В начале июля, в чрезвычайно жаркое время, под вечер,
один молодой человек вышел из своей каморки,
которую нанимал от жильцов в С — м переулке,
на улицу и медленно, как бы в нерешимости, отправился к К — ну мосту.
На улице жара стояла страшная, к тому же духота, толкотня,
всюду известка, леса, кирпич, пыль и та особенная летняя вонь,
столь известная каждому петербуржцу, не имеющему возможности нанять дачу,
— всё это разом неприятно потрясло и без того уже расстроенные нервы юноши.
©Ф. М. Достоевский. Преступление и наказание
Впрочем о чем это я...Давайте вернемся к 1С.
В прошлой, достаточно объемной статье мы собрали отказоустойчивый кластер PostgreSQL, в этой соберем отказоустойчивый кластер из двух серверов 1С.
Это на порядок проще и к тому же можно делать в графическом интерфейсе, что приятно глазу.
Не стоило бы тревожить клавиатуру и отвлекать почтенную публику из-за таких несложных действий.
Занимает это с учетом записи видео и принтскринов минут 15.
Однако хотелось бы, чтобы такие сервисы, как журнал регистрации и полнотекстового поиска, не мотались, как институтка на гусарском балу, а были в меру доступности привязаны к определенному серверу.С этого момента и начинаются недопонимания или как красиво говорила Фелин Херманс - замешательство (см. публикацию Гостья из будущего. Обзор книги Фелин Херманс "Ум программиста. Как понять и осмыслить любой код")
То есть статья будет не о том как собрать отказоустойчивый кластер 1С Предприятие 8.3, в ней мы разберем несколько утверждений сказанных с высоких трибун технических конференций о требованиях назначения функциональности.
Известно, что слово сказанное со сцены, оказывает магическое действие на слушателей, этим пользовался еще Остап Бендер, а с появлением широкополосного интернета это влияние только усилилось.
Как не вспомнить известную фразу:
"Главная проблема цитат в интернете в том,
что люди сразу верят в их подлинность"
В. И. Ленин
этого не говорил
Хотя описание, достаточно внятное, есть на ИТС
Еще лучше, найти на том же ИТС описание текстовых файлов настроек и посмотреть как и что в них изменяется при изменении в консоли администрирования.
Это даст с одной стороны более глубокое понимание процесса, а с другой, отличный инструмент для управления кластером со стороны DevOps, например уверенное отключение регламентных заданий, если это контур разработки.
В благословенные времена, когда семинары проходили не онлайн, а в конференц-холлах, обязательно на галерке сидел технически продвинутый человек, который рвал на себе волосы, показывая пальцем в докладчика и тихим шепотом советуя так не делать.
Причем количество волос на голове этого человека намекало, на скольки конференциях он уже побывал.
Мне в этом отношении комфортнее, я по другую сторону монитора и я не собираюсь ни в кого кидать помидоры.
Скорее дать метод, которым желающие смогут проверить справедливость любого утверждения о настройках кластера 1С, ведь это обычный текстовый файл и понять как было/стало можно любой утилитой сравнения файлов.
Проверим его, например, на пересоздании кластера.
Все эксперименты, которые описаны в публикации не надо воспроизводить на рабочих серверах!
Для клиентских соединений применяется более сложная логика, подробнее на ИТС - 2.2.7.3.3. Назначение рабочих процессов!
Скопируем файл списка кластеров srvribrg.lst с рабочего сервера, остановим сервис 1С, удалим все файлы из рабочего каталога центрального сервера и запустим сервис 1С.
Создастся новый кластер с новым GUID
Это можно увидеть, сравнив файлы
Принцип вы поняли, только нам будет нужен файл реестра кластера 1CV8Clst.lst из каталога reg_<номер_порта_кластера> в данном случае reg_1541
Тем кто не любит много букв
В этой публикации рассмотрим построение отказоустойчивого кластера 1С и требования назначения функциональности.
Кто не любит читать вообще, может посмотреть видео.
Остальные, добро пожаловать.
Кто прочитает до конца, получит бонус: Скрипт обновления платформы 1С на рабочих серверах с сохранением настроек и т.п.
Постановка задачи
Поскольку настройка серверов получилась уже достаточно сложная, то удостоверимся, что все включилось и работает, для контура, который не запускался три месяца, это очень актуально.
Спасибо коллегам из компании ©Serverspace, что они не удалили весь контур.
#Статус и состояние сервиса etcd
systemctl status etcd.service --no-pager -l
ENDPOINTS=red8-cln01.test.loc:2379,red-srv.test.loc:2379,red8-srv.test.loc:2379
etcdctl --write-out=table --endpoints=$ENDPOINTS endpoint status
#Статус и состояние сервиса vip-manager
systemctl status vip-manager.service --no-pager -l
#Статус и состояние сервиса patroni
systemctl status patroni.service --no-pager -l
/usr/local/bin/patronictl --config-file /etc/patroni/patroni.yml topology cluster-1c
#Статус и состояние сервиса сервера 1С
systemctl status srv1cv8-8.3.24.1467@default --no-pager -l
Контроллер домена, сервер Windows 2012 R2, домен AD уровня Windows 2012. dc.test.loc
Рабочая станция Windows 10. win-cln01.test.loc
Рабочая станция РедОС 8. red8-cln01.test.loc
Сервер 1С РедОС 8 настроенный. red8-srv.test.loc
Сервер 1С РедОС 8 настраиваемый. red-srv.test.loc
Postgres 16 от PostgresPro
1С Предприятие 64-х 8.3.24.1467
все в домене test.loc.
Имя домена *.local не рекомендуют коллеги РедОС.
все по железу 4ГБ RAM 50ГБ SSD 2 Ядра CPU
все развернуто в облаке из оригинальных iso образов производителей для чистоты эксперимента.
Исходное состояние - два независимых локальных кластера на двух серверах 1С
На раз-два-три
- Выбираем один из серверов, который будет образцом, удаляем у второго сервера 1С собственный кластер
- Добавляем его в кластер соседа
- Устанавливаем флажок "Центральный сервер" в свойствах добавленного сервера
- Устанавливаем уровень отказоустойчивости в свойствах кластера
- Настраиваем требования назначения функциональности
- Не забываем в строке соединения базы(баз) 1С прописать оба сервера через запятую без пробелов.
Целевое состояние - отказоустойчивый кластер с балансировкой нагрузки на двух серверах 1С
Далее переходим к проверке некоторых утверждений aka ©MythBusters.
Самое распространенное из них
№1 Требования назначения функциональности применятся при перезагрузке сервера 1С
Сохраняем исходный файл 1CV8Clst.lst
Назначаем журнал регистрации на один сервер, полнотекстового поиска на другой.
Сохраняем файл еще раз в другой каталог
Сравниваем и видим что заполнилась секция с настройками требований назначения функциональности.
Перезагружаемся в любом порядке и видим что файл настроек кластера не поменялся.
Как и расположение сервисов, легко увидеть их подкаталоги внутри каталога ИБ.
Зато его меняет применение требований назначения функциональности в свойствах кластера.
Видно, что примененные требования попали совсем в другую секцию файла.
И уже после этого указанные сервисы расходятся по назначенным серверам.
Итог: утверждение №1 это миф
№2 Требования назначения функциональности применяются по алфавитному упорядочиванию серверов 1С
Часть последователей этого утверждения знает, видело на ИТС фразу:
Обход серверов и требований выполняется в порядке следования этих объектов в консоли кластера.
но искренне верит, что сервера в консоли кластера 1С упорядочены по алфавиту.
Возможно потому, что сервера упорядочены в правой панели просмотра консоли администрирования.
Даже не надо заглядывать в файл 1CV8Clst.lst чтобы убедится, что сервера в консоли упорядочиваются в порядке добавления.
Достаточно удалить идущий первым по алфавиту и добавить его заново, теперь он будет вторым.
Соответственно и требования назначения функциональности с него будут обработаны позже.
В нашем примере, если мы создали требование назначения функциональности для журнала регистрации с типом требования "Назначать" на обоих серверах, то если они оба доступны, оно сработает для верхнего в консоли администрирования, а не в алфавитном порядке.
Если верхний сервер недоступен, то менеджер кластера применит требование назначения функциональности со следующего по порядку.
Главное, чтобы оно там было с типом требования "Назначать".
Если его нет больше ни на одном сервере или оно есть с типом требования "Авто", то мы получим ошибку вида "Сервис недоступен"
Итог: утверждение №2 это миф
Как разновидность утверждения №2 встречается №3 Для типа требования "Назначать" имеет значение свойство "Приоритет"
При разборе предыдущего примера мы увидели, что это не так и на ИТС буквами по белому написано:
Обход серверов и требований выполняется в порядке следования этих объектов в консоли кластера.
Сложно поверить, но это действительно так. Это не ошибка платформы, а действительно логика ее разработчиков
Итог: утверждение №3 это миф
В этом месте обычно резонный вопрос: Зачем тогда вообще свойство "Приоритет"?
Для типа требования "Авто"
В итоге мы приходим к правильному пути конфигурирования требований назначения функциональности
Для того чтобы сервис назначался на один из серверов при его доступности, вне зависимости от расположения в консоли кластера и обеспечивалась отказоустойчивость решения, то есть при недоступности этого сервера, назначался на следующий, надо тип требования установить в "Авто", а приоритет в более высокое значение,
чем на остальных серверах, где также тип требования установить в "Авто".
Тем, кто дочитал до конца, обещанный скрипт обновления платформы 1С на РедОС и совместимых с ним.
Использование программы: $PROGNAME параметр1 параметр2
Первый параметр это номер обновляемой версии 1С, если 0 то чистая установка
Второй параметр это номер новой версии 1С"
Файл установки 1С должен находиться в одном каталоге со скриптом
Если указан номер обновляемой версии 1С, то должен существовать каталог установки
Что он умеет.
- Распаковать архив установки
- Сохранить файлы старых служб с возможными нетиповыми настройками
- Установить новую версию платформы 1С
- Удалить старую версию платформы 1С
- Заменить версию платформы в веб публикациях
- Запустить службы
Если непонятно, запишу видео
На гитхаб выкладывать пока не планирую, хочу сделать версию на 1С:Исполнителе.
Это кошерно, интересно хватит ли у него возможностей, для этого надо его выучить)
Планы на будущее:
Осталась положить вишенку на торт - провести нагрузочное тестирование и определиться с быстродействием сервера.
Это финал любого порядочного внедрения.
Благодарности:
Благодарю компанию ©Serverspace за предоставленное оборудование, без поддержки собрать такой пингвинариум мне было бы негде.
Желающие знают, где меня искать, время за пределами рабочего.
Статья продолжает серию публикаций:
- Построение отказоустойчивого кластера PostgreSQL. HAProxy, давай до свидания. Рецепты от Капитана
- В облако на работу: Архивирование postgres. Дайте два
- В облако на работу: Все варианты авторизации ОС сервером 1С на базе РЕД ОС 8 в домене windows. Рецепты от Капитана
- Бесплатный вебинар "В облаке, как дома: Как настроить рабочее место пользователя 1С на базе РЕД ОС"
- В облаке, как дома: Устраиваемся поудобнее. Рабочее место пользователя 1С на базе РЕД ОС (HTTPS и архивирование)
- Три пингвина под окном... Обзор рабочих мест пользователя 1С, собранных на отечественных дистрибутивах linux
- Три пингвина под окном… Точки над Ё. Обзор рабочих мест пользователя 1С, собранных на отечественных дистрибутивах linux
- Установка 1С:Сервера взаимодействия. Заметки на полях
- Сервер 1С:Предприятие на Ubuntu 16.04 и PostgreSQL 9.6, для тех, кто хочет узнать его вкус. Рецепт от Капитана обратите внимание на дату публикации
- 1С в 1cloud.ru. Теплое, ламповое, свое отчет о походе в питерский офис ©Serverspace когда он еще не был Serverspace
Серия "Рецепты от Капитана" на всякий случай