Сведения о репликации с высоким уровнем доступности для кластеров
Вы можете обеспечить защиту от нарушений в центре обработки данных или облачном регионе, настроив развертывание кластера GitHub Enterprise Server для обеспечения высокой доступности. В конфигурации высокой доступности идентичный набор узлов реплики синхронизируется с узлами в активном кластере. Если сбои оборудования или программного обеспечения затронут центр обработки данных с активным кластером, вы можете вручную выполнить отработку отказа на узлы реплики и продолжить обработку запросов пользователей, сводя воздействие сбоя к минимуму.
В конфигурации высокой доступности узлы, на которых службы данных регулярно синхронизируются с кластером реплик. Узлы реплики выполняются в режиме ожидания и не обслуживают приложения или обрабатывают запросы пользователей.
Рекомендуется настроить высокий уровень доступности в рамках комплексного плана аварийного восстановления для кластеризации GitHub Enterprise Server. Мы также рекомендуем выполнять регулярное резервное копирование. Дополнительные сведения см. в разделе Настройка резервных копий в экземпляре.
Необходимые компоненты
Оборудование и программное обеспечение
Для каждого узла в вашем активном кластере необходимо подготовить вторую виртуальную машину с идентичными аппаратными ресурсами. Например, если в кластере есть 13 узлов, и каждый узел имеет 12 виртуальных ЦП, 96 ГБ ОЗУ и 750 ГБ подключенного хранилища, необходимо подготовить 13 новых виртуальных машин, у которых есть 12 виртуальных ЦП, 96 ГБ ОЗУ и 750 ГБ подключенного хранилища.
На каждой новой виртуальной машине установите ту же версию GitHub Enterprise Server, которая работает на узлах в вашем активном кластере. Вам не нужно передавать лицензию или выполнять какую-либо дополнительную настройку. Дополнительные сведения см. в разделе Настройка экземпляра GitHub Enterprise Server.
Note
Узлы, которые планируется использовать для репликации высокой доступности, должны быть изолированными экземплярами GitHub Enterprise Server. Не инициализировать узлы реплики в качестве второго кластера.
Network
Вам нужно назначить статический IP-адрес каждому новому подготовленному узлу и настроить подсистему балансировки нагрузки для приема подключений и направления их в узлы на интерфейсном уровне кластера.
Задержка между основными и реплика узлами должна быть меньше 70 миллисекунд. Не рекомендуется настраивать брандмауэр между сетями узлов. Дополнительные сведения о сетевом подключении между узлами в кластере реплик см. в разделе Конфигурация сети кластера.
Создание реплики с высоким уровнем доступности для кластера
Чтобы создать реплику высокого уровня доступности для кластера, необходимо выполнить следующие задачи. Вы также можете просмотреть пример конфигурации.
- Назначьте активные узлы основному центру обработки данных.
- Добавьте узлы реплики в файл конфигурации кластера.
- Просмотрите пример конфигурации.
1. Назначение активных узлов основному центру обработки данных
Прежде чем определить дополнительный центр обработки данных для узлов реплики, убедитесь, что активные узлы назначаются основному центру обработки данных.
- Откройте файл
/data/user/common/cluster.conf
конфигурации кластера в текстовом редакторе. Например, можно использовать редактор Vim. Создайте резервную копиюcluster.conf
файла перед изменением файла.
sudo vim /data/user/common/cluster.conf
sudo vim /data/user/common/cluster.conf
-
Запишите имя основного центра обработки данных кластера. В верхнем разделе
[cluster]
файла конфигурации кластера определяется имя основного центра обработки данных с помощью пары "ключ-значение"primary-datacenter
.[cluster] mysql-master = HOSTNAME redis-master = HOSTNAME primary-datacenter = primary
- При необходимости измените имя основного центра обработки данных на более информативное или точное, изменив значение
primary-datacenter
.
- При необходимости измените имя основного центра обработки данных на более информативное или точное, изменив значение
-
Файл конфигурации кластера перечисляет каждый узел под заголовком
[cluster "HOSTNAME"]
. Под заголовком каждого узла добавьте новую пару "ключ-значение", чтобы назначить узел центру обработки данных. Используйте то же значение, что и вprimary-datacenter
на шаге 3 выше. Например, если вы хотите использовать имя по умолчанию (default
), добавьте следующую пару "ключ-значение" в соответствующий раздел для каждого узла.datacenter = primary
После этого добавления раздел для каждого узла в файле конфигурации кластера должен выглядеть так, как показано в следующем примере. Порядок пар "ключ-значение" может быть любым.
[cluster "HOSTNAME"] datacenter = default hostname = HOSTNAME ipv4 = IP-ADDRESS ... ...
Note
Если вы изменили имя первичного центра обработки данных на шаге 3, найдите
consul-datacenter
пару "ключ-значение" в разделе для каждого узла и измените значение на переименованный первичный центр обработки данных. Например, если вы присвоили основному центру обработки данных имяprimary
, используйте для каждого узла следующую пару "ключ-значение".consul-datacenter = primary
-
Примените новую конфигурацию. Выполнение этой команды может занять некоторое время, поэтому мы рекомендуем выполнить команду в мультиплексоре терминала, например
screen
илиtmux
.ghe-cluster-config-apply
-
После завершения инициализации GitHub Enterprise Server отобразит следующее сообщение.
Finished cluster configuration
Когда GitHub Enterprise Server вернет вас в командную строку, это будет означать, что вы завершили назначение узлов основному центру обработки данных кластера.
2. Добавление узлов реплики в файл конфигурации кластера
Чтобы настроить высокий уровень доступности, необходимо определить соответствующий узел реплики для каждого активного узла в кластере. Чтобы создать новую конфигурацию кластера, которая определяет активные и реплики узлов, выполните следующие задачи.
- Создать копию файла конфигурации активного кластера.
- Измените копию, чтобы определить узлы реплики, соответствующие активным узлам, добавив IP-адреса подготовленных виртуальных машин.
- Объединить измененную копию конфигурации кластера с конфигурацией активного кластера.
- Применить новую конфигурацию для запуска репликации.
Пример конфигурации см. в разделе "Просмотр примера конфигурации".
-
Для каждого узла в кластере подготовьте соответствующую виртуальную машину с идентичными характеристиками, запустив одну и ту же версию GitHub Enterprise Server. Запишите IPv4-адрес и имя узла для каждого нового узла кластера. Дополнительные сведения см. в разделе Необходимые условия.
Note
При перенастройке высокой доступности после отработки отказа можно использовать старые узлы из основного центра обработки данных.
-
Подключение к любому узлу в кластере по протоколу SSH. Дополнительные сведения см. в разделе Доступ к административной оболочке (SSH).
-
Создайте резервную копию существующей конфигурации кластера.
cp /data/user/common/cluster.conf ~/$(date +%Y-%m-%d)-cluster.conf.backup
-
Создайте копию существующего файла конфигурации кластера в временном расположении, например
/home/admin/cluster-replica.conf
.grep -Ev "(?:|ipv|uuid)" /data/user/common/cluster.conf > ~/cluster-replica.conf
-
Удалите раздел
[cluster]
из временного файла конфигурации кластера, скопированного на предыдущем шаге.git config -f ~/cluster-replica.conf --remove-section cluster
-
Определите имя дополнительного центра обработки данных, где вы подготовили узлы реплики, а затем обновите файл конфигурации временного кластера с новым именем центра обработки данных. Замените
SECONDARY
выбранным вами именем.sed -i 's/datacenter = default/datacenter = SECONDARY/g' ~/cluster-replica.conf
-
Определите шаблон для имен узлов реплики.
Warning
Имена узлов для узлов реплики должны быть уникальными и отличаться от имени узла для соответствующего активного узла.
-
Откройте в текстовом редакторе временный файл конфигурации кластера из шага 3. Например, можно использовать редактор Vim.
sudo vim ~/cluster-replica.conf
-
В каждом разделе временного файла конфигурации кластера обновите конфигурацию узла. Файл конфигурации кластера перечисляет каждый узел под заголовком
[cluster "HOSTNAME"]
.- Измените имя узла в заголовке раздела и значение
hostname
в разделе на имя узла реплики в соответствии с шаблоном, выбранным на шаге 7 выше. - Добавьте новый ключ с именем
ipv4
и задайте значение статического IPv4-адреса узла реплики. - Добавьте новую пару "ключ-значение"
replica = enabled
.
[cluster "NEW REPLICA NODE HOSTNAME"] ... hostname = NEW REPLICA NODE HOSTNAME ipv4 = NEW REPLICA NODE IPV4 ADDRESS replica = enabled ... ...
- Измените имя узла в заголовке раздела и значение
-
Добавьте содержимое временного файла конфигурации кластера, созданного на шаге 4, в активный файл конфигурации.
cat ~/cluster-replica.conf >> /data/user/common/cluster.conf
-
Назначьте основные узлы MySQL и Redis в дополнительном центре обработки данных. Замените и
REPLICA REDIS PRIMARY HOSTNAME
наREPLICA MYSQL PRIMARY HOSTNAME
имена узлов узла реплики, подготовленного для сопоставления существующих первичных объектов MySQL и Redis.git config -f /data/user/common/cluster.conf cluster.mysql-master-replica REPLICA-MYSQL-PRIMARY-HOSTNAME git config -f /data/user/common/cluster.conf cluster.redis-master-replica REPLICA-REDIS-PRIMARY-HOSTNAME
Warning
Прежде чем продолжить, просмотрите файл конфигурации кластера.
- В разделе верхнего уровня
[cluster]
убедитесь, что значения дляmysql-master-replica
узлов репликиredis-master-replica
и являются правильными именами узлов реплики в дополнительном центре обработки данных, который будет служить основными центрами MySQL и Redis после отработки отказа. - В каждом разделе для активного узла с именем
[cluster "ACTIVE NODE HOSTNAME"]
дважды проверьте следующие пары "ключ-значение".- Значение
datacenter
должно соответствовать значениюprimary-datacenter
в верхнем разделе[cluster]
. - Значение
consul-datacenter
должно соответствовать значениюdatacenter
, которое должно совпадать со значениемprimary-datacenter
в верхнем разделе[cluster]
.
- Значение
- Убедитесь, что для каждого активного узла конфигурация имеет один соответствующий раздел для одного узла реплики с одинаковыми ролями. В каждом разделе для узла реплики дважды проверьте каждую пару "ключ-значение".
datacenter
должен соответствовать всем остальным узлам реплики.consul-datacenter
должен соответствовать всем остальным узлам реплики.- Значение
hostname
должно соответствовать имени узла в заголовке раздела. - Значение
ipv4
должно соответствовать уникальному статическому IPv4-адресу узла. - Значение
replica
должно бытьenabled
.
- Воспользуйтесь возможностью удалить разделы для автономных узлов, которые больше не используются.
Чтобы просмотреть пример конфигурации, ознакомьтесь с примером конфигурации.
- В разделе верхнего уровня
-
Инициализируйте новую конфигурацию кластера. Выполнение этой команды может занять некоторое время, поэтому мы рекомендуем выполнить команду в мультиплексоре терминала, например
screen
илиtmux
.ghe-cluster-config-init
-
После завершения инициализации GitHub Enterprise Server отобразит следующее сообщение.
Finished cluster initialization
-
Примените новую конфигурацию. Выполнение этой команды может занять некоторое время, поэтому мы рекомендуем выполнить команду в мультиплексоре терминала, например
screen
илиtmux
.ghe-cluster-config-apply
-
После завершения выполнения конфигурации убедитесь, что репликация кластера настроена и работает правильно.
ghe-cluster-repl-status
-
После завершения инициализации GitHub Enterprise Server отобразит следующее сообщение.
Finished cluster configuration
-
Настройте подсистему балансировки нагрузки, которая будет принимать подключения от пользователей после отработки отказа на узлы реплики. Дополнительные сведения см. в разделе Конфигурация сети кластера.
Вы завершили настройку репликации с высоким уровнем доступности для узлов в кластере. Каждый активный узел начинает репликацию конфигурации и данных на соответствующий узел реплики, и вы можете направлять трафик в подсистему балансировки нагрузки для дополнительного центра обработки данных в случае сбоя. Дополнительные сведения о отработки отказа см. в разделе Запуск отработки отказа в кластер реплики.
3. Просмотр примера конфигурации
Конфигурация [cluster]
верхнего уровня должна выглядеть так, как показано в следующем примере.
[cluster]
mysql-master = HOSTNAME-OF-ACTIVE-MYSQL-MASTER
redis-master = HOSTNAME-OF-ACTIVE-REDIS-MASTER
primary-datacenter = PRIMARY-DATACENTER-NAME
mysql-master-replica = HOSTNAME-OF-REPLICA-MYSQL-MASTER
redis-master-replica = HOSTNAME-OF-REPLICA-REDIS-MASTER
mysql-auto-failover = false
...
Конфигурация для активного узла на уровне хранилища кластера должна выглядеть так, как показано в следующем примере.
...
[cluster "UNIQUE ACTIVE NODE HOSTNAME"]
datacenter = default
hostname = UNIQUE-ACTIVE-NODE-HOSTNAME
ipv4 = IPV4-ADDRESS
consul-datacenter = default
consul-server = true
git-server = true
pages-server = true
mysql-server = true
elasticsearch-server = true
redis-server = true
memcache-server = true
metrics-server = true
storage-server = true
uuid = UUID SET AUTOMATICALLY
...
Конфигурация соответствующего узла реплики на уровне хранилища должна выглядеть следующим образом.
- Важные отличия от соответствующего активного узла выделены полужирным шрифтом.
- GitHub Enterprise Server назначает значение
uuid
автоматически, поэтому не следует определять это значение для узлов реплик, которые будут инициализироваться. - Роли сервера, определенные ключами
*-server
, согласуются с соответствующим активным узлом.
...
[cluster "UNIQUE REPLICA NODE HOSTNAME"]
replica = enabled
ipv4 = IPV4 ADDRESS OF NEW VM WITH IDENTICAL RESOURCES
datacenter = SECONDARY DATACENTER NAME
hostname = UNIQUE REPLICA NODE HOSTNAME
consul-datacenter = SECONDARY DATACENTER NAME
consul-server = true
git-server = true
pages-server = true
mysql-server = true
elasticsearch-server = true
redis-server = true
memcache-server = true
metrics-server = true
storage-server = true
uuid = DO NOT DEFINE
...
Мониторинг репликации между активными и репликами узлов кластера
Начальная репликация между активными узлами и репликами в кластере занимает время. Это время зависит от объема реплицируемых данных и уровней активности для GitHub Enterprise Server.
Вы можете отслеживать ход выполнения на любом узле кластера с помощью инструментов командной строки, доступных в административной оболочке GitHub Enterprise Server. Дополнительные сведения об административной оболочке см. в разделе Доступ к административной оболочке (SSH).
Чтобы отслеживать репликацию всех служб, используйте следующую команду.
ghe-cluster-repl-status
Для проверки общей работоспособности кластера можно использовать ghe-cluster-status
. Дополнительные сведения см. в разделе Служебные программы командной строки.
Перенастройка репликации с высоким уровнем доступности после отработки отказа
После отработки отказа с активных узлов кластера на узлы реплики кластера можно перенастроить высокий уровень доступности одним из двух способов. Выбор способа зависит от причины отработки отказа и состояния исходных активных узлов.
- Подготовьте и настройте новый набор узлов реплик для каждого из новых активных узлов в дополнительном центре обработки данных.
- Используйте исходные активные узлы в качестве новых узлов реплики.
Процесс перенастройки высокого уровня доступности аналогичен начальной настройке высокого уровня доступности. Дополнительные сведения см. в статье "Создание реплики высокой доступности для кластера".
Если вы используете исходные активные узлы, после перенастройки высокой доступности потребуется отменить режим обслуживания на узлах. Дополнительные сведения см. в разделе Включение и планирование режима обслуживания.
Отключение репликации с высоким уровнем доступности для кластера
Вы можете остановить репликацию на узлы-реплики для развертывания кластера GitHub Enterprise Server.
- Откройте файл
/data/user/common/cluster.conf
конфигурации кластера в текстовом редакторе. Например, можно использовать редактор Vim. Создайте резервную копиюcluster.conf
файла перед изменением файла.
sudo vim /data/user/common/cluster.conf
sudo vim /data/user/common/cluster.conf
-
В верхнем разделе
[cluster]
удалите пары "ключ-значение"redis-master-replica
иmysql-master-replica
. -
Удалите каждый раздел для узла реплики. Для узлов
replica
реплики настраивается какenabled
. -
Примените новую конфигурацию. Выполнение этой команды может занять некоторое время, поэтому мы рекомендуем выполнить команду в мультиплексоре терминала, например
screen
илиtmux
.ghe-cluster-config-apply
-
После завершения инициализации GitHub Enterprise Server отобразит следующее сообщение.
Finished cluster configuration