Check-list по настройке рабочих серверов в продукционной зоне
> 1С: ПредприятиеДата обновления: 24 мая 2024 г. Дата публикации: 24 мая 2024 г.
При работе с информационными системами, построенными с использованием платформы 1С:Предприятие, возникает необходимость организовать рабочую площадку таким образом, чтобы на серверах этой площадки были выполнены все настройки, которые необходимы либо могут помочь при решении задач эксплуатации.
В этой статье приводится инструкция check-list, который является рекомендуемым при настройке крупных информационных систем.
Также в статье приводится набор скриптов, которые оказались полезны при эскплуатации.
1. Check-list
1.1 Настроен сбор технологических журналов на всех продукционных рабочих серверах с платформой 1С:Предприятие.
-
директория ALL (события EXCP, PROC, CONN, SESN, CLSTR, SRVC, ADMIN);
-
директория CALLSCALL (события CALL, SCALL);
-
Сбор дампов аварийных завершений процессов кластера.
Настройка выполняется с помощью файла logcfg.xml.
Пример настройки технологического журнала.
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
<dump create="true" location="C:\DUMPS" type="3" prntscrn="false" externaldump="1"/>
<log location="C:\LOGS\All" history="28">
<event>
<eq property="Name" value="EXCP"/>
</event>
<event>
<eq property="Name" value="PROC"/>
</event>
<event>
<eq property="Name" value="ADMIN"/>
</event>
<event>
<eq property="Name" value="CONN"/>
</event>
<event>
<eq property="Name" value="SESN"/>
</event>
<event>
<eq property="Name" value="CLSTR"/>
</event>
<event>
<eq property="Name" value="SRVC"/>
</event>
<property name="all"/>
</log>
<log location="C:\LOGS\CallScall" history="28">
<event>
<eq property="Name" value="CALL"/>
</event>
<event>
<eq property="Name" value="SCALL"/>
</event>
<property name="Context">
<event>
<eq property="name" value=""/>
</event>
</property>
<property name="all"/>
</log>
</config>
В данном примере события CALL и SCALL собираются без контекстов, что в значительной мере сокращает объем собираемых журналов. Однако в некоторых случаях контексты необходимы.
Тогда часть
<property name="Context">
<event>
<eq property="name" value=""/>
</event>
</property>
необходимо будет удалить.
Обратите внимание, что history=»28″ указан равным 28 часам, что при достаточно интенсивной нагрузке может привести к сбору достаточно большого объема журналов.
Если места на дисках не достаточно, лучше отказаться от журнала с CALL, SCALL, а сбор «основного» журнала «C:\LOGS\All»сократить до 12 часов.
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
<dump create="true" location="C:\DUMPS" type="3" prntscrn="false" externaldump="1"/>
<log location="C:\LOGS\All" history="12">
<event>
<eq property="Name" value="EXCP"/>
</event>
<event>
<eq property="Name" value="PROC"/>
</event>
<event>
<eq property="Name" value="ADMIN"/>
</event>
<event>
<eq property="Name" value="CONN"/>
</event>
<event>
<eq property="Name" value="SESN"/>
</event>
<event>
<eq property="Name" value="CLSTR"/>
</event>
<event>
<eq property="Name" value="SRVC"/>
</event>
<property name="all"/>
</log>
</config>
Следует также настроить архивирование технологических журналов с последующим копированием на сетевой ресурс.
1.2 Настроен сбор счетчиков Performance Monitor на всех продукционных серверах
Запуск счетчика добавлен в Task Schedule.
1.3 Настроен Windows Error Reporting Service на процессы ragent, rmngr, rphost
Инструкция по настройки дампов находится здесь.
1.4 На рабочих серверах есть только продукционные кластеры с продукционными базами
Другие (не рабочие) базы и кластеры должны отсутствовать.
«Исключением» из данного правила могут являться «обслуживающие» (хотя всё же продукционные) информационные базы, такие как:
-
Центр Контроля Качества;
-
Центр Управления Производительностью;
-
Менеджер Сервиса;
-
Агент Сервиса;
-
и т.п.
Обратите внимание, что не должно быть
-
развернутых копий продукционных информационных баз;
-
тестовых информационных баз;
-
информационных баз разработки.
1.5 Выполнены настройки перезапуска процессов по памяти для всех серверов
Ограничения по безопасному расходу памяти либо «По умолчанию», либо имеют такие значения, при которых они действительно могут сработать на конкретном оборудовании.
Не должно быть установлено таких значений, которые «отключают» работу механизмов контроля потребления памяти на вызов.
1.6 Наличие утилит
в определенной директории, например, C:\Utils
Ярлык на эту директорию должен быть на рабочем столе.
1.7 Наличие скриптов автоматизации в определенной директории
Например, C:\Scripts
Ярлык на эту директорию должен быть на рабочем столе.
Примеры скриптов приведены в конце статьи.
1.8 Настроена контрольная процедура «Контроль подключений» для всех продукционных баз в Центре Контроля Качества.
1.9 Настроена контрольная процедура «Контроль потребления памяти» для всех продукционных баз в Центре Контроля Качества
1.10 Настроен сбор данных по загруженности оборудования для всех серверов продукционной площадки в ЦКК из Мастера настройки в ЦКК
У пользователя ОС, от которого запущен rphost, вхождение в группу Windows Performance Monitor Users.
1.11 Настроены оповещения в ЦКК
-
По месту на дисках для всех продукционных серверов: меньше 10% места за 5 минут;
-
По памяти для всех продукционных серверов (кроме СУБД): меньше 200 Мб памяти за 5 минут;
-
По CPU для всех продукционных серверов: более 90% за 5 минут;
-
Для СУБД по превышению размера tempdb (SQL Tempdb Log Used Size (MB) [среднее]) более 70 Гб (нужно убедиться в снятом ограничении по размеру tempdb в настройках СУБД).
1.12 Проведен успешный тест отправки e-mail или смс из рабочего Центра Контроля Качества
Если тест успешно не выполняется (т.е. смс или письмо не приходят), но проверять наличие доступа к соответствующим серверам.
1.13 На веб серверах настроен сбор access и error логов IIS или Apache.
1.14 Настроены регламентные процедуры
-
Обновление статистик;
-
Очистка процедурного КЭШа;
-
Дефрагментация индексов;
-
Реиндексация таблиц базы данных;
-
Создание бэкапов.
1.15 Установлен Windows Performance Toolkit на всех рабочих (1С) Windows серверах
Windows Performance Toolkit входит в комплект Windows 8.1 SDK.
После установки проверяется возможность запустить Windows Performance Recorder с опцией “Resource Analysis”\”CPU Usage” на несколько секунд.
1.16 Наличие файла swpuser.ini с указанием пользователя для рабочих процессов с соответствующими правами в ОС.
При использовании файла swpuser.ini пользователь, от имени которого работает главный агент кластера (ragent), должен иметь административные права. Дополнительно следует обеспечить наличие этого пользователя в локальных политиках безопасности: Adjust memory quotas for a process (сюда обычно входит группа Администраторы) и Replace a process level token (обычно группа Администрторы сюда не входит). Необходимо помнить, что инсталятор не подготавливает почву для использования swpuser.ini. Поэтому для использования swpuser.ini все предлагаетя сделать руками: создать пользователей, дать им права и т. п. Важно, что пользователям, от которых запускаются рабочие процессы и менеджеры кластера, в Windows должен быть создан профиль. Он необходим для правильного размещения:
-
каталога временных файлов;
-
каталога данных приложения;
-
переменных окружения.
Наиболее простой способ создания профиля — однократный интерактивный вход.
1.17 Наличие требований назначения функциональности для всех продукционных кластеров с двумя и более рабочими серверами
-
Для сервиса лицензирования;
-
Для сервиса полнотекстового поиска данных;
-
Для сервиса журнала регистрации.
Должно быть явно указано расположение именно этих сервисов, т.к. их корректная работа зависит от расположения файлов кластера. При наличии нескольких рабочих серверов в кластере нужно не допускать возможность переезда этих сервисов между рабочими серверами.
1.18 Имена пользователей, от которых рабочие процессы rphost работают с СУБД, в точности соответствуют именам информационных баз
Лучше для каждой продукционной информационной базы создавать отдельного пользователя. Это нужно в первую очередь при расследовании каких-либо проблема на сервере СУБД. Если на сервере СУБД расположено более одной продукционной базы данных, может возникнуть необходимость максимально быстро расследовать проблему. При этом под рукой в отчетах или трассировках всегда будет имя пользователя, который в данный момент работает с сервером баз данных, как следствие будет и понимание, к какой именно информационной базе относится этот пользователь.
1.19 Настроена утилита BgInfo от SysInternals
Желательно на рабочем столе всегда видеть:
-
Имя сервера;
-
Объем места на дисках;
-
Его сетевые адресы.
1.20 План электропитания: Высокая производительность.
В Control Panel\All Control Panel Items\Power Options необходимо указать «High Performance».
1.21 Хотя бы один раз проведено тестовое восстановление из бэкапа с замером времени восстановления.
1.22 Настроен пересчет итогов, перестроение агрегатов
1.23 Отсутствует лишняя регистрация изменений в планах обмена
1.24 Число процессов rphost адекватно решаемой кластром задачи
Например, не установлена настройка 1 rphost на 1 информационную базу при наличии большого числа информационных баз в кластере серверов.
1.25 Корректно сконфигурированные виртуальные машины
На виртуальных машинах обеспечено гарантированное выделение ресурсов, суммарный объем выданной оперативной памяти в виртуальных машинах, меньше объема имеющейся памяти на хосте.
1.26 Выполнены настройки в соответствие с инструкциями (http://disablessl3.com/)
1.27 Выполнено отключение RC4 в соответствие с инструкциями (https://support.microsoft.com/en-us/kb/2868725)
1.28 Для работы системы «1С:Предприятие» c СУБД MS SQL Server
Требуется установленный SQL ServerNativeClientfor SQL Server 2005 (и более старших версий Microsoft SQL Server). Проверка наличия установленного SQL ServerNativeClientосуществляется при выполнении следующих операций:
-
создание информационной базы;
-
загрузка информационной базы;
-
обновление конфигурации базы данных.
2. Примеры скриптов
2.1 Немедленно завершить приложения
taskkill /F /IM ragent.exe
taskkill /F /IM rmngr.exe
taskkill /F /IM rphost.exe
taskkill /F /IM httpd.exe
taskkill /F /IM w3wp.exe
taskkill /F /IM 1cv8c.exe
taskkill /F /IM 1cv8.exe
2.2 Получить дампы процессов
Этот скрипт должен выполняться из той же директории, в которой находится procdump.exe
@ echo off
echo Start dumping processes on this server...
CD %~dp0
for /f "usebackq tokens=2" %%a in (`tasklist /FO list /FI "IMAGENAME eq rmngr.exe" ^| find /i "PID:"`) do (
start /b procdump.exe -ma %%a rmngr_%%a
)
for /f "usebackq tokens=2" %%a in (`tasklist /FO list /FI "IMAGENAME eq rphost.exe" ^| find /i "PID:"`) do (
start /b procdump.exe -ma %%a rphost_%%a
)
for /f "usebackq tokens=2" %%a in (`tasklist /FO list /FI "IMAGENAME eq ragent.exe" ^| find /i "PID:"`) do (
start /b procdump.exe -ma %%a ragent_%%a
)
for /f "usebackq tokens=2" %%a in (`tasklist /FO list /FI "IMAGENAME eq ragent.exe" ^| find /i "PID:"`) do (
start /b procdump.exe -ma %%a ragent_%%a
)
for /f "usebackq tokens=2" %%a in (`tasklist /FO list /FI "IMAGENAME eq httpd.exe" ^| find /i "PID:"`) do (
start /b procdump.exe -ma %%a httpd_%%a
)
for /f "usebackq tokens=2" %%a in (`tasklist /FO list /FI "IMAGENAME eq w3wp.exe" ^| find /i "PID:"`) do (
start /b procdump.exe -ma %%a w3wp_%%a
)
for /f "usebackq tokens=2" %%a in (`tasklist /FO list /FI "IMAGENAME eq 1cv8c.exe" ^| find /i "PID:"`) do (
start /b procdump.exe -ma %%a 1cv8c_%%a
)
for /f "usebackq tokens=2" %%a in (`tasklist /FO list /FI "IMAGENAME eq 1cv8.exe" ^| find /i "PID:"`) do (
start /b procdump.exe -ma %%a 1cv8_%%a
)
2.3 Остановка службы 1С:Предприятие с очисткой временных файлов
set LOG_FILE="scripts.log"
set SERVICE_1C_NAME="1C:Enterprise 8.3 Server Agent (x86-64)"
set SERVICE_RAS_NAME="1C:Enterprise 8.3 Remote Server"
set CNTX_PATH="C:\srvinfo\reg_1541"
set PFL_PATH="C:\ProgramData\1C\1cv8"
set TEMP_PATH="C:\Windows\Temp"
echo stop %DATE% %TIME% >> %TEMP_PATH%\%LOG_FILE%
sc stop %SERVICE_1C_NAME%
sc stop %SERVICE_RAS_NAME%
timeout 5
taskkill /f /im "rphost.exe"
taskkill /f /im "rmngr.exe"
taskkill /f /im "ragent.exe"
taskkill /f /im "ras.exe"
timeout 5
echo done stop %DATE% %TIME% >> %TEMP_PATH%\%LOG_FILE%
echo clean temp %DATE% %TIME% >> %TEMP_PATH%\%LOG_FILE%
DEL /Q /F /S %CNTX_PATH%\snccntx*
DEL /Q /F %PFL_PATH%\*.pfl
DEL /Q /F /S %TEMP_PATH%\*.*
echo done clean temp %DATE% %TIME% >> %TEMP_PATH%\%LOG_FILE%
2.4 Запуск службы 1С:Предприятие
set LOG_FILE="scripts.log"
set SERVICE_1C_NAME="1C:Enterprise 8.3 Server Agent (x86-64)"
set SERVICE_RAS_NAME="1C:Enterprise 8.3 Remote Server"
echo start %DATE% %TIME% >> %TEMP_PATH%\%LOG_FILE%
sc start %SERVICE_1C_NAME%
sc start %SERVICE_ RAS _NAME%
echo done start %DATE% %TIME% >> %TEMP_PATH%\%LOG_FILE%
2.5 Рестарт с очисткой временных файлов
set LOG_FILE="scripts.log"
set SERVICE_1C_NAME="1C:Enterprise 8.3 Server Agent (x86-64)"
set SERVICE_RAS_NAME="1C:Enterprise 8.3 Remote Server"
set CNTX_PATH="C:\srvinfo\reg_1541"
set PFL_PATH="C:\ProgramData\1C\1cv8"
set TEMP_PATH="C:\Windows\Temp"
echo stop %DATE% %TIME% >> %TEMP_PATH%\%LOG_FILE%
sc stop %SERVICE_1C_NAME%
sc stop %SERVICE_RAS_NAME%
timeout 5
taskkill /f /im "rphost.exe"
taskkill /f /im "rmngr.exe"
taskkill /f /im "ragent.exe"
taskkill /f /im "ras.exe"
timeout 5
echo done stop %DATE% %TIME% >> %TEMP_PATH%\%LOG_FILE%
echo clean temp %DATE% %TIME% >> %TEMP_PATH%\%LOG_FILE%
DEL /Q /F /S %CNTX_PATH%\snccntx*
DEL /Q /F %PFL_PATH%\*.pfl
DEL /Q /F /S %TEMP_PATH%\*.*
echo done clean temp %DATE% %TIME% >> %TEMP_PATH%\%LOG_FILE%
echo start %DATE% %TIME% >> %TEMP_PATH%\%LOG_FILE%
sc start %SERVICE_1C_NAME%
sc start %SERVICE_ RAS _NAME%
echo Service %SERVICE_1C_NAME% restarted at %DATE% %TIME% >> %TEMP_PATH%\%LOG_FILE%
2.6 Аварийное завершение процесса rphost, который потребляет больше N Гб памяти
N сильно зависит от вашей системы, нагрузки, конфигурации и т.д. В этом примере N = 8 Гб.
@echo off
REM MemLimit in bytes!
REM MemLimit is 8 GB
set MemLimit=8796093022208
echo MemLimit is set %MemLimit% bytes
for /f "usebackq tokens=2" %%a in (`tasklist /FO list /FI "IMAGENAME eq rphost.exe" ^| find /i "PID:"`) do (
for /f "usebackq tokens=1" %%c in (`"wmic process where ProcessId=%%a get WorkingSetSize"`) do (
SET "var="&for /f "delims=0123456789" %%i in ("%%c") do set var=%%i
if not defined var (
if /I %%c GTR %MemLimit% (
echo Killing process rphost_%%a with Mem Usage %%c for breaking limit %MemLimit%
taskkill /F /PID %%a
)
)
)
)