Check-list по настройке рабочих серверов в продукционной зоне

При работе с информационными системами, построенными с использованием платформы 1С:Предприятие, возникает необходимость организовать рабочую площадку таким образом, чтобы на серверах этой площадки были выполнены все настройки, которые необходимы либо могут помочь при решении задач эксплуатации.

В этой статье приводится инструкция check-list, который является рекомендуемым при настройке крупных информационных систем.

Также в статье приводится набор скриптов, которые оказались полезны при эскплуатации.

Check-list

  1. Настроен сбор технологических журналов на всех продукционных рабочих серверах с платформой 1С:Предприятие.

Настройка выполняется с помощью файла 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. Настроен сбор счетчиков Performance Monitor на всех продукционных серверах.

Запуск счетчика добавлен в Task Schedule.

  1. Настроен Windows Error Reporting Service на процессы ragent, rmngr, rphost.

Инструкция по настройки дампов находится здесь.

  1. На рабочих серверах есть только продукционные кластеры с продукционными базами.

Другие (не рабочие) базы и кластеры должны отсутствовать.

«Исключением» из данного правила могут являться «обслуживающие» (хотя всё же продукционные) информационные базы, такие как:

и т.п.

Обратите внимание, что не должно быть

  1. Выполнены настройки перезапуска процессов по памяти для всех серверов.

Ограничения по безопасному расходу памяти либо «По умолчанию», либо имеют такие значения, при которых они действительно могут сработать на конкретном оборудовании.

Не должно быть установлено таких значений, которые «отключают» работу механизмов контроля потребления памяти на вызов.

  1. Наличие утилит

в определенной директории, например, C:\Utils

Ярлык на эту директорию должен быть на рабочем столе.

  1. Наличие скриптов автоматизации в определенной директории.

Например, C:\Scripts

Ярлык на эту директорию должен быть на рабочем столе.

Примеры скриптов приведены в конце статьи.

  1. Настроена контрольная процедура «Контроль подключений» для всех продукционных баз в Центре Контроля Качества.

  1. Настроена контрольная процедура «Контроль потребления памяти» для всех продукционных баз в Центре Контроля Качества.

  1. Настроен сбор данных по загруженности оборудования для всех серверов продукционной площадки в ЦКК из Мастера настройки в ЦКК.

У пользователя ОС, от которого запущен rphost, вхождение в группу Windows Performance Monitor Users.

  1. Настроены оповещения в ЦКК

  1. Проведен успешный тест отправки e-mail или смс из рабочего Центра Контроля Качества.

Если тест успешно не выполняется (т.е. смс или письмо не приходят), но проверять наличие доступа к соответствующим серверам.

  1. На веб серверах настроен сбор access и error логов IIS или Apache.

  1. Настроены регламентные процедуры:

  1. Установлен Windows Performance Toolkit на всех рабочих (1С) Windows серверах.

Windows Performance Toolkit входит в комплект Windows 8.1 SDK.

После установки проверяется возможность запустить Windows Performance Recorder с опцией “Resource Analysis”\”CPU Usage” на несколько секунд.

  1. Наличие файла swpuser.ini с указанием пользователя для рабочих процессов с соответствующими правами в ОС.

При использовании файла swpuser.ini пользователь, от имени которого работает главный агент кластера (ragent), должен иметь административные права. Дополнительно следует обеспечить наличие этого пользователя в локальных политиках безопасности: Adjust memory quotas for a process (сюда обычно входит группа Администраторы) и Replace a process level token (обычно группа Администрторы сюда не входит). Необходимо помнить, что инсталятор не подготавливает почву для использования swpuser.ini. Поэтому для использования swpuser.ini все предлагаетя сделать руками: создать пользователей, дать им права и т. п. Важно, что пользователям, от которых запускаются рабочие процессы и менеджеры кластера, в Windows должен быть создан профиль. Он необходим для правильного размещения:

Наиболее простой способ создания профиля - однократный интерактивный вход.

  1. Наличие требований назначения функциональности для всех продукционных кластеров с двумя и более рабочими серверами

Должно быть явно указано расположение именно этих сервисов, т.к. их корректная работа зависит от расположения файлов кластера. При наличии нескольких рабочих серверов в кластере нужно не допускать возможность переезда этих сервисов между рабочими серверами.

  1. Имена пользователей, от которых рабочие процессы rphost работают с СУБД, в точности соответствуют именам информационных баз.

Лучше для каждой продукционной информационной базы создавать отдельного пользователя. Это нужно в первую очередь при расследовании каких-либо проблема на сервере СУБД. Если на сервере СУБД расположено более одной продукционной базы данных, может возникнуть необходимость максимально быстро расследовать проблему. При этом под рукой в отчетах или трассировках всегда будет имя пользователя, который в данный момент работает с сервером баз данных, как следствие будет и понимание, к какой именно информационной базе относится этот пользователь.

  1. Настроена утилита BgInfo от SysInternals.

Желательно на рабочем столе всегда видеть:

  1. План электропитания: Высокая производительность.

В Control Panel\All Control Panel Items\Power Options необходимо указать "High Performance".

  1. Хотя бы один раз проведено тестовое восстановление из бэкапа с замером времени восстановления.

  1. Настроен пересчет итогов, перестроение агрегатов.

  1. Отсутствует лишняя регистрация изменений в планах обмена.

  1. Число процессов rphost адекватно решаемой кластром задачи.

Например, не установлена настройка 1 rphost на 1 информационную базу при наличии большого числа информационных баз в кластере серверов.

  1. Корректно сконфигурированные виртуальные машины.

На виртуальных машинах обеспечено гарантированное выделение ресурсов, суммарный объем выданной оперативной памяти в виртуальных машинах, меньше объема имеющейся памяти на хосте.

  1. Выполнены настройки в соответствие с инструкциями (http://disablessl3.com/)

  1. Выполнено отключение RC4 в соответствие с инструкциями (https://support.microsoft.com/en-us/kb/2868725)

  1. Для работы системы «1С:Предприятие» c СУБД MS SQL Server

требуется установленный SQL ServerNativeClientfor SQL Server 2005 (и более старших версий Microsoft SQL Server). Проверка наличия установленного SQL ServerNativeClientосуществляется при выполнении следующих операций:

Примеры скриптов.

Немедленно завершить приложения.

Копировать в буфер обмена
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

Получить дампы процессов.

Этот скрипт должен выполняться из той же директории, в которой находится 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

)

Остановка службы 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%

Запуск службы 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%

Рестарт с очисткой временых файлов

Копировать в буфер обмена
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%

Аварийное завершение процесса 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

)

)

)

)