Шаг 4. Изменение конфигурации
Нужно провести изменения в конфигурации, например добавить сервер, перераспределить роли, или изменить их параметры. Казалось бы, чего же проще – разложить новый файл конфигурации по всем серверам и перезапустить систему. Далее ServerShell все сделает, как на этапе загрузки (шага 3). Можно даже не перезапускать, рассчитывая на то, что ServerShell регулярно отслеживает изменения файловой системы. Однако в таком подходе есть три существенных недостатка:
-
Если много серверов – много работы, особенно учитывая возможные сложности доступа к удаленным сайтам.
-
Если какие-то серверы недоступны, то придется откладывать операцию, поскольку иначе возникнет риск существенного и вредного рассогласования отдельных кластеров системы.
-
Если в файле конфигурации ошибка, то такую конфигурацию применять нельзя. Речь идет как о статических ошибках, так и динамических – не всякое изменение можно применить сразу.
Поэтому существует API по работе с файлами конфигураций. Это API не уровня доменов, это API уровня системы, поэтому возможность его использования имеют только администраторы мастер-домена.
Кейс: администратор в мастер-домене загружает и применяет новый файл конфигурации с изменениями настроек, и по результатам его применения система обретает новое целостное состояние.
Решению этого кейса служит набор ролей, совместно отвечающих за конфигурацию: MIC (Master Infrastructure Configurator) и IC (Site Infrastructure Configurator).
Для начала, по аналогии с шагом 1, загружаемый администратором файл конфигурации попадает через WS на MIC. Там он сохраняется и ожидает дальнейших активностей администратора. Администратор проверяет корректность загруженного файла, валидацию проводит та же роль MIC. Затем, если все успешно, администратор применяет файл API-запросом /api/admin/v1/cfg/apply
. MIC инициирует сложный процесс синхронизации файла
конфигурации на всех сайтах, серверах и
нодах. Этот процесс доходит до каждой работающей роли, чтобы та имела возможность применить новые настройки по-горячему.
Применение конфигурации – древовидно разветвляемый процесс.
-
MIC отправляет команду на синхронизацию файла конфигурации всем сайтам – ролям IC.
-
IC отправляет команду на синхронизацию конфигурации всем серверам – служебному процессу ServerShell в корневой ноде.
-
ServerShell вычисляет разницу и применяет изменения, выгружая ненужные и запуская нужные ноды. В том числе возможно изменились названия нод – они формируются автоматически на основании исполняемых в них ролей. Остальным нодам своего сервера он отправляет команду на применение конфигурации, а именно служебному процессу BasedRole в каждой ноде.
-
BasedRole вычисляет разницу и применяет изменения. Название нод зависит от состава ролей, поэтому измениться состав не мог, следовательно BasedRole отправляет команду на применение новых параметров во все роли, запущенные на текущей рабочей ноде.
-
Каждая роль самостоятельно анализирует изменения и применяет свои новые параметры запуска – по горячему, либо путем перезагрузки.
Каждый из узлов рассмотренного процесса синхронизации конфигурации отправляет команду всем своим подписчикам, а сам соответственно подписывается на родительский узел. Таким образом ответственность дочернего узла – обнаружить посредством конфигурации родительский узел и осуществить подписку (см.рис.).
MIC и IC такие же роли, как и остальные, а значит их базовое поведение подчинено своим локальным ServerShell и BasedRole. А целевая функциональность держит их на вершине иерархии процесса управления конфигурацией. (см.рис.выше). Это две точки зрения на связь конфигурационных сервисов, два уровня связи: С точки зрения процесса подписки и обновления конфигурации главный MIC, и далее MIC → IC → ServerShell → BasedRole, а с точки зрения запуска системы главный ServerShell, и далее ServerShell → BasedRole → Role, в том числе MIC и IC. Адекватно нарисовать плоскую компактную диаграмму, отражающую одновременно обе точки зрения, нетривиально, но абстрактно представить эту модель более чем реально:
ServerShell запускает BasedRole, BasedRole запускает среди прочих ролей MIC, тот начинает работать и обеспечивать функционал управления конфигурацией. Аналогично IC на своем сервере. Если вдруг конфигурация меняется, MIC оповещает все доступные IC, IC оповещает все доступные ServerShell на сайте (в том числе и свой собственный), ServerShell управляет рабочими нодами и оповещает BasedRole (в том числе на ноде MIC). После этого роль MIC может изменить свое расположение и поведение. Пока IC не запущен как роль, все ServerShell осуществляют неудачные попытки подключиться к нему исходя из текущей конфигурации. Эти попытки асинхронны и не мешают осуществить целевой процесс запуска рабочих нод и ролей в них.
MIC – особенная роль, она должна присутствовать ровно на одном сайте. Сайт, на котором располагается MIC, называется мастер-сайтом. И с другой стороны, если сайт является мастер-сайтом, то на нём должен присутствовать MIC. Другие сайты называются рабочими сайтами. При этом если сайт (неважно рабочий или мастер) обладает всем составом необходимых ролей, то он называется коммуникационным. Таким образом коммуникационный сайт – это признак продуктовой полнофункциональности сайта. Любой рабочий сайт обязан быть коммуникационным.
На диаграмме приведена иерархия подписки на изменения конфигурации на примере двоично-разветвляемого дерева (два сайта, по два сервера, по две роли):
В нижнем слое компонентов диаграммы располагаются BasedRole, но мы помним, что те в свою очередь управляют рабочими нодами с функциональными ролями. Так, один из приведенных на диаграмме BasedRole управляет запуском ноды с ролью MIC, а еще два управляют запуском нод с ролями IC. Следует тщательно обдумать эту модель, прежде чем переходить дальше.
Отключенные серверы и сайты
Если какой либо узел системы в момент применения конфигурации окажется недоступным, то это не помешает применить конфигурацию. Все доступные узлы переключатся на новую конфигурацию, а недоступные в момент подключения к кластеру подключатся на основе предыдущего файла конфигурации к родительскому узлу (в частности, подключенный сайт – к MIC из предыдущей конфигурации, подключенный сервер – к IC из предыдущей конфигурации). Родительский узел сразу же отдаст новую конфигурацию и вновь подключенный узел получит новые настройки себя самого и остальной инфраструктуры. То же самое произойдет, если к системе подключить новый сайт или сервер.
Первая конфигурация
А какая же конфигурация изначально? Ведь дерево подписки на изменение конфигурации должно существовать и быть активным.
Инсталлируя программу на каждый новый сервер, в параметрах указывается не что иное как адрес сервера, на котором роль MIC (в виде имени ноды). Таким образом, первым запускается сервер с ролью MIC, чтобы дальнейшие подключать к нему. На нем автоматически возникает базовая конфигурация из трех ролей: MIC, DC, WS. Каждый новый инсталлированный сервер выступает аналогом IC в том смысле, что является прямым подписчиком MIC на изменения конфигурации. И только в момент, когда обнаружит в конфигурации себя, он запустится полноценно и переориентируется на IC текущего сайта.
Когда текущая конфигурация уже содержит сайты и действующие роли IC, в качестве точки подключения новых серверов может указываться как MIC, так и любой доступный экземпляр IC.
О сложностях при изменении конфигурации
Существуют некоторые незначительные сложности с переконфигурированием, отчего не любую конфигурацию можно применить к текущей. Например,
-
Невозможно в один ход переместить MIC на другой сервер. Однако это можно сделать в два хода в пределах мастер-сайта.
-
Существуют сложности с перемещением MIC на другой сайт.
-
Существуют сложности со сменой IP-адресов серверов.
-
Существует ряд ролей, которые по аналогии с MIC можно перемещать на другие серверы только в два хода, чтобы не потерять данные.
-
Существуют сложности со сменой имен сайтов.
-
Существуют сложности со сменой идентификаторов ролей.
-
Существуют сложности с перемещением ролей, к которым явно привязываются сущности доменов.
-
Невозможно изменить название мастер-домена.
"Применить в два хода" означает: предварительно создать промежуточную переходную конфигурацию на основе текущей и целевой, применить ее, дождаться когда нужные серверы завершат ее применение (все роли запустятся и выйдут на марш – этот процесс может быть небыстрым в виду необходимости синхронизации данных), а уже затем применить целевую конфигурацию.
Чтобы не сталкиваться с этими сложностями следует продумать перед началом внедрения будущее состояние системы. Рекомендуется оформить паспорт проекта, где утвердить мастер-домен, мастер-сайт, имена всех сайтов, зафиксировать диапазон IP-адресов для серверов будущей системы и смоделировать распределение ролей по серверам. Расширять систему можно легко, сужать сложнее, перемещать и изменять некоторые параметры конфигурации не просто сложно, а порой невозможно без полного переподсоединения по одному серверу. Однако даже в этом случае сущности в доменах сохранятся и смогут быть подгружены из DomainDB.
Термин | Определение |
---|---|
|
! |
|
! |
|
! |
|
! |
|
! |
-
Что не позволяет производить изменение конфигурации непосредственно на серверах?
-
В каких доменах возможно управление конфигурацией?
-
Какая роль, ответственна за управление конфигурациями?
-
Какие роли участвуют в применении конфигурации?
-
Какие сервисы/роли присутствуют и в дереве управления конфигурацией и в дереве запуска системы?
-
При каком условии отключенные сервера смогут подключиться к системе с новой конфигурацией?
-
В какой момент возникает первая (базовая) конфигурация?
-
Следующий шаг: Шаг 5. Синхронизация данных в доменах между сайтами
-
Предыдущий шаг: Шаг 3. Многосерверная система