При масштабной миграции инфраструктуры, когда на сервере СУБД размещено более сотни информационных баз, перенос данных вручную через консоль администрирования кластера 1С (классическую оснастку MMC) становится чрезмерно трудоемким и чреват ошибками. Задача усложняется, если на новом сервере баз данных меняются не только сетевой адрес или имя инстанса СУБД, но и учетная запись пользователя, под которой кластер 1С подключается к базам данных.
Разберем, почему не удается обойтись простой заменой строк в файлах конфигурации кластера, и подробно рассмотрим надежные способы автоматизации этой задачи: от использования скриптов администрирования до настройки сквозной Windows-аутентификации.
Файлы описания кластера и зарегистрированных в нем баз данных по умолчанию располагаются в каталоге данных службы агента сервера (каталог srvinfo, путь к которому задается в параметрах запуска службы ragent). За список информационных баз отвечают файлы реестра (например, 1CV8Clst.lst или 1CV8Reg.lst в зависимости от версии платформы и настроек кластера).
Казалось бы, достаточно остановить службу ragent, открыть файл реестра текстовым редактором, выполнить массовую замену старого имени SQL-сервера на новое и поменять имя пользователя. Однако главная трудность возникает с полем пароля. Платформа 1С не хранит пароль пользователя СУБД в открытом виде.
Проанализируем механизм защиты паролей в реестре кластера:
Поэтому ручная модификация конфигурационных файлов без изменения пароля (или с одинаковым старым пользователем и паролем) возможна, но при смене учетных данных пользователя СУБД требует других инженерных подходов.
Штатным и наиболее гибким платформенным инструментом автоматизации управления кластером без использования COM-технологий является связка из сервиса удаленного администрирования ras и консольной утилиты rac. Данный подход работает как в среде Windows, так и в Linux.
Рассмотрим порядок действий для массового обновления параметров подключения баз:
ras (по умолчанию она ожидает подключений на TCP-порту 1545). Если служба не запущена, ее можно стартовать командой ras cluster --port=1545 localhost:1540.rac.Посмотрим на пример команды обновления параметров отдельной базы через rac:
rac infobase --cluster=d3b07384-2a6d-4b8a-9f22-123456789abc update \
--infobase=e4c18495-3b7e-4c9b-af33-987654321def \
--db-server="tcp:SQL-SRV-02" \
--db-name="trade_base" \
--db-user="app_1c_user" \
--db-pwd="StrongNewPassword123"
При выполнении команды rac infobase update платформа самостоятельно генерирует корректную зашифрованную последовательность пароля для каждого GUID информационной базы и сохраняет изменения в конфигурацию на лету, не требуя перезапуска службы ragent.
Если администрирование выполняется с помощью внешней обработки 1С, задачу можно решить через системный объект V83.COMConnector. Для этого используется программный доступ к агенту сервера 1С.
Разберем по шагам логику работы скрипта или обработки на встроенном языке:
ConnectAgent().Authenticate().GetInfoBases().GetInfoBaseInfo(), модифицируем свойства объекта и применяем новые настройки методом UpdateInfoBase().Посмотрим на пример кода на встроенном языке 1С:
Соединитель = Новый COMОбъект("V83.COMConnector");
Агент = Соединитель.ConnectAgent("SRV-APP-02");
Кластеры = Агент.GetClusters();
Кластер = Кластеры.Получить(0);
// Аутентификация администратора кластера 1С при необходимости
Агент.Authenticate(Кластер, "AdminCluster", "AdminPassword");
СписокБаз = Агент.GetInfoBases(Кластер);
Для Каждого КраткоеОписаниеИБ Из СписокБаз Цикл
// Аутентификация в контексте информационной базы (если задана)
Агент.AuthenticateInfoBase(Кластер, КраткоеОписаниеИБ, "AdminIB", "PassIB");
// Получаем полные параметры информационной базы
ОписаниеИБ = Агент.GetInfoBaseInfo(Кластер, КраткоеОписаниеИБ);
// Обновляем параметры подключения к СУБД
ОписаниеИБ.DbServerName = "SQL-SRV-02";
ОписаниеИБ.DbUser = "NewSqlUser";
ОписаниеИБ.DbPassword = "NewSqlPassword";
// Блокируем сеансы и регламентные задания на время миграции
ОписаниеИБ.ScheduledJobsDenied = Истина;
// Записываем обновленные настройки
Агент.UpdateInfoBase(Кластер, ОписаниеИБ);
КонецЦикла;
Важное ограничение: использование V83.COMConnector требует соответствия разрядности клиента и сервера, а также корректно зарегистрированной в операционной системе библиотеки comcntr.dll. Данный способ доступен исключительно в среде Windows.
Один из самых надежных способов решения проблемы с хранением и сменой паролей пользователей СУБД — полный отказ от SQL-аутентификации в пользу встроенной аутентификации Windows (Integrated Security).
Проанализируем, как это реализовать:
ragent) в операционной системе должна запускаться не от имени системной учетной записи LocalSystem, а от имени выделенного доменного пользователя (например, DOMAIN\usr1cv8).DOMAIN\usr1cv8.dbcreator (если кластер должен сам создавать базы) или назначение пользователя владельцем (db_owner) для всех перенесенных баз данных.При пустых полях пользователя и пароля процесс рабочих процессов 1С (rphost) подключается к MS SQL Server от имени учетной записи Windows, под которой он запущен. Это полностью устраняет проблему передачи, синхронизации и шифрования паролей в конфигурационных файлах кластера.
При единовременном переносе сотни информационных баз критически важно соблюдать правильную последовательность технологических шагов:
SessionsDenied = Истина и принудительно отключите зависшие соединения. Это исключит модификацию данных в момент резервного копирования.ScheduledJobsDenied = Истина. Если переключить 100 баз на новый сервер без блокировки заданий, сразу после старта они одновременно запустят регламентные процедуры (закрытие месяца, расчет итогов, обновление полнотекстового поиска), что приведет к мгновенной перегрузке дисковой подсистемы и процессора нового SQL-сервера.rac или обработку с COMConnector).