О замене GitHub Enterprise Server узлов кластера
Вы можете заменить функциональный узел в GitHub Enterprise Server кластере или узел, который неожиданно вышел из строя.
После замены узла ваш экземпляр GitHub Enterprise Server задания не распределяются автоматически по новому узлу. Вы можете принудительно выполнить балансировку заданий экземпляра между узлами. Дополнительные сведения см. в разделе Перебалансирование рабочих нагрузок кластера.
Предупреждение
Чтобы избежать конфликтов, не используйте имя узла, которое ранее было назначено узлу в кластере.
Замена функционального узла
Вы можете заменить существующий функциональный узел в кластере. Например, может потребоваться предоставить виртуальную машину с дополнительными ресурсами ЦП, памяти или хранилища.
Чтобы заменить функциональный узел, установите GitHub Enterprise Server устройство на новую виртуальную машину, настройте IP-адрес, добавьте новый узел в конфигурационный файл кластера, инициализируйте кластер и примените конфигурацию, затем выведите заменённый узел в офлайн.
Примечание.
Если вы заменяете узел базы данных-источника, см . раздел "Замена узла базы данных-источника".
-
Подготовьте и установите GitHub Enterprise Server с уникальным именем узла на заменяемом узле.
-
Используя административную оболочку или DHCP, настройте только IP-адрес заменяющего узла. Не следует настраивать другие параметры.
-
Для добавления недавно подготовленного заменяющего узла на любом узле измените файл
cluster.conf, чтобы удалить узел со сбоем и добавить заменяющий. Например, этот измененный файлcluster.confзаменяетghe-data-node-3только что подготовленным узломghe-replacement-data-node-3:[cluster "ghe-replacement-data-node-3"] hostname = ghe-replacement-data-node-3 ipv4 = 192.168.0.7 # ipv6 = fd12:3456:789a:1::7 consul-datacenter = PRIMARY-DATACENTER git-server = true pages-server = true mysql-server = true elasticsearch-server = true redis-server = true memcache-server = true metrics-server = true storage-server = true
Вы можете отложить начальный объем базы данных нового узла реплики MySQL, что приведет к тому, что устройство будет открываться для трафика раньше. Дополнительные сведения см. в разделе Отсрочка заполнения базы данных.
-
В административной оболочке узла с измененным
cluster.confвыполните командуghe-cluster-config-init. Эта команда инициализирует только что добавленный узел в кластере. -
Выполните команду
ghe-cluster-config-applyиз того же узла. Это позволит проверить файл конфигурации, скопировать его на каждый узел в кластере и настроить каждый узел в соответствии с измененным файломcluster.conf. -
Чтобы перевести узел, который вы заменяете в автономном режиме, из основного узла MySQL кластера выполните следующую команду.
ghe-remove-node NODE-HOSTNAMEЭта команда будет эвакуировать данные из всех служб данных, работающих на узле, пометить узел как автономный в конфигурации и остановить маршрутизацию трафика на узел. Дополнительные сведения см. в разделе Служебные программы командной строки.
Замена узла в экстренной ситуации
Вы можете заменить неудающийся узел в кластере. Например, проблема с программным обеспечением или оборудованием может повлиять на доступность узла.
Примечание.
Если вы заменяете узел базы данных-источника, см . раздел "Замена узла базы данных-источника".
Чтобы заменить узел в чрезвычайной ситуации, вы будете использовать неработоспособный узел в автономном режиме, добавьте в кластер замены узел, а затем выполните команды, чтобы удалить ссылки на службы данных на удаленном узле.
-
Чтобы удалить узел, который сталкивается с проблемами из кластера, из основного узла MySQL кластера выполните следующую команду. Замените NODE-HOSTNAME именем узла, который вы принимаете в автономном режиме.
ghe-remove-node --no-evacuate NODE-HOSTNAMEЭта команда помечает узел как автономный в конфигурации и остановит трафик, который направляется на узел. Эту команду можно запустить в
no-evacuateрежиме, так как далее в этой процедуре вы запустите команды, которые указывают службам данных на узле копировать все реплики на другие доступные узлы в кластере. Дополнительные сведения см. в разделе Служебные программы командной строки. -
Добавьте узел замены в кластер.
-
Подготовьте и установите GitHub Enterprise Server с уникальным именем узла на заменяемом узле.
-
Используя административную оболочку или DHCP, настройте только IP-адрес заменяющего узла. Не следует настраивать другие параметры.
-
Чтобы добавить недавно подготовленный узел замены на любом узле, измените
cluster.confфайл, чтобы добавить его. Например, этот измененныйcluster.confфайл добавляет только что подготовленный узелghe-replacement-data-node-3:[cluster "ghe-replacement-data-node-3"] hostname = ghe-replacement-data-node-3 ipv4 = 192.168.0.7 # ipv6 = fd12:3456:789a:1::7 git-server = true pages-server = true mysql-server = true elasticsearch-server = true redis-server = true memcache-server = true metrics-server = true storage-server = true
-
В административной оболочке узла с измененным
cluster.confвыполните командуghe-cluster-config-init. Эта команда инициализирует только что добавленный узел в кластере. -
Выполните команду
ghe-cluster-config-applyиз того же узла. Это позволит проверить файл конфигурации, скопировать его на каждый узел в кластере и настроить каждый узел в соответствии с измененным файломcluster.conf.
-
-
Удалите ссылки на службы данных на удаленном узле.
-
Найдите UUID удаленного узла. Чтобы найти идентификатор UUID, выполните следующую команду, заменив
HOSTNAMEимя узла узла. Этот идентификатор UUID будет использоваться на следующем шаге.ghe-config cluster.HOSTNAME.uuid -
Чтобы удалить ссылки на службы данных, выполните следующие команды. Замените
UUIDUUID узла.Эти команды указывают на каждую службу, которую узел окончательно удаляет. Службы повторно создадут все реплики, содержащиеся в узле на доступных узлах в кластере.
Примечание.
Эти команды могут привести к увеличению нагрузки на сервере во время перебалансирования данных между репликами.
`git-server` Для службы (используется для данных репозитория):ghe-spokesctl server destroy git-server-UUIDДля сервиса (используемого
pages-serverдля GitHub Pages строительства сайтов):ghe-dpages remove pages-server-UUID`storage-server` Для службы (используется для данных Git LFS, изображений аватара, вложений файлов и архивов выпуска):ghe-storage destroy-host storage-server-UUID --force
-
-
При необходимости удалите запись для удаленного узла в
cluster.confфайле. Это позволит упорядочитьcluster.confфайл и сэкономить время во время будущихconfig-applyзапусков.-
Чтобы удалить запись из файла, выполните следующую команду, заменив
HOSTNAMEимя узла удаленного узла.ghe-config --remove-section "cluster.HOSTNAME" -
Чтобы скопировать конфигурацию на другие узлы в кластере, из административной оболочки узла, в котором вы изменили,
cluster.confвыполните командуghe-cluster-config-apply.
-
Замена узла базы данных-источника (MySQL или MySQL и MSSQL)
Для предоставления служб базы данных кластеру требуется основной узел MySQL и по крайней мере один узел MySQL. Дополнительные сведения см. в разделе Сведения об узлах кластера.
Если ваш кластер GitHub Actions включён, вам также нужно будет учесть MSSQL в следующих шагах.
Если вам нужно выделить дополнительные ресурсы для основного узла MySQL (или MySQL и MSSQL) или заменить неработоспособный узел, можно добавить новый узел в кластер. Чтобы свести к минимуму время простоя, добавьте новый узел, реплицируйте данные MySQL (или MySQL и MSSQL), а затем добавьте его в основной узел. Некоторые простои требуются во время процесса продвижения.
-
Подготовьте и установите GitHub Enterprise Server с уникальным именем узла на заменяемом узле.
-
Используя административную оболочку или DHCP, настройте только IP-адрес заменяющего узла. Не следует настраивать другие параметры.
-
Чтобы подключиться к ваш экземпляр GitHub Enterprise Server, SSH в любом узле кластера. На рабочей станции выполните следующую команду. Замените HOSTNAME именем узла. Дополнительные сведения см. в разделе Доступ к административной оболочке (SSH).
Shell ssh -p 122 admin@HOSTNAME
ssh -p 122 admin@HOSTNAME -
Откройте файл
/data/user/common/cluster.confконфигурации кластера в текстовом редакторе. Например, можно использовать редактор Vim. Создайте резервную копиюcluster.confфайла перед изменением файла.Shell sudo vim /data/user/common/cluster.conf
sudo vim /data/user/common/cluster.conf -
Файл конфигурации кластера перечисляет каждый узел под заголовком <code>[cluster "<em>HOSTNAME</em>"]</code>. Добавьте новый заголовок для узла и введите пары ключ-значение для конфигурации, заменив заполнятели на реальные значения.- Убедитесь, что вы включаете
mysql-server = trueпару "ключ-значение". - Если GitHub Actions он включен в кластере, нужно будет включить
mssql-server = trueпару ключ-значение. - В следующем разделе приведен пример, а конфигурация узла может отличаться.
... [cluster "HOSTNAME"] hostname = HOSTNAME ipv4 = IPV4-ADDRESS # ipv6 = IPV6-ADDRESS consul-datacenter = PRIMARY-DATACENTER datacenter = DATACENTER mysql-server = true redis-server = true ... ...
- Убедитесь, что вы включаете
-
В административной оболочке узла с измененным
cluster.confвыполните командуghe-cluster-config-init. Эта команда инициализирует только что добавленный узел в кластере. -
В административной оболочке узла, в котором вы изменили
cluster.conf, выполните командуghe-cluster-config-apply. Недавно добавленный узел станет репликой узла MySQL, и все другие настроенные службы будут запускаться там.Примечание.
Предыдущий фрагмент не предполагает GitHub Actions , что включен в кластере.
-
Дождитесь завершения репликации MySQL. Чтобы отслеживать репликацию MySQL с любого узла в кластере, выполните команду
ghe-cluster-status -v.Если GitHub Actions он включён в кластере, придётся дождаться завершения репликации MSSQL.
Вскоре после добавления узла в кластер может появиться ошибка состояния репликации во время перехвата репликации. Репликация может занять несколько часов в зависимости от нагрузки экземпляра, объема данных базы данных и последнего создания начального значения базы данных.
-
Во время запланированного периода обслуживания включите режим обслуживания. Дополнительные сведения см. в разделе Включение и планирование режима обслуживания.
-
Убедитесь, что репликация MySQL (или MySQL и MSSQL) завершена с любого узла в кластере, выполнив команду
ghe-cluster-status -v.Предупреждение
Если репликация MySQL (или MySQL и MSSQL) не завершится, вы рискуете потерей данных в экземпляре.
-
Чтобы задать текущий основной узел MySQL режимом только для чтения, выполните следующую команду из первичного узла MySQL.
Shell echo "SET GLOBAL super_read_only = 1;" | sudo mysql
echo "SET GLOBAL super_read_only = 1;" | sudo mysql -
Подождите, пока глобальные идентификаторы транзакций (GTID) на первичных узлах MySQL и реплики идентичны. Чтобы проверить идентификаторы GTID, выполните следующую команду из любого узла кластера.
Shell ghe-cluster-each -r mysql -- 'echo "SELECT @@global.gtid_executed;" | sudo mysql'
ghe-cluster-each -r mysql -- 'echo "SELECT @@global.gtid_executed;" | sudo mysql'- Чтобы проверить успешность установки глобальной переменной MySQL, выполните следующую команду.
Shell echo "SHOW GLOBAL VARIABLES LIKE 'super_read_only';" | sudo mysql
echo "SHOW GLOBAL VARIABLES LIKE 'super_read_only';" | sudo mysql -
Если GitHub Actions в кластере включено, подключите SSH к узлу, который станет новым основным узлом MSSQL.
Shell ssh -p 122 admin@NEW_MSSQL_NODE_HOSTNAME
ssh -p 122 admin@NEW_MSSQL_NODE_HOSTNAME- В сеансе
screenвыполните следующую команду, чтобы повысить уровень MSSQL на новый узел.
Shell /usr/local/share/enterprise/ghe-mssql-repl-promote
/usr/local/share/enterprise/ghe-mssql-repl-promoteЭто попытается получить доступ к текущему основному узлу MSSQL и выполнить правильную отработку отказа
- В сеансе
-
После сопоставления GTID на первичных и репликах узлов MySQL обновите конфигурацию кластера, открыв файл
/data/user/common/cluster.confконфигурации кластера в текстовом редакторе.- Создайте резервную копию
cluster.confфайла перед изменением файла. - В разделе верхнего уровня
[cluster]удалите имя узла для узла, который вы заменили изmysql-masterпары "ключ-значение", а затем назначьте новый узел. Если новый узел также является первичным узлом Redis, изменитеredis-masterпару "ключ-значение". - Если GitHub Actions он включен в кластере, нужно будет включить
mssql-server = trueпару ключ-значение.
[cluster] mysql-master = NEW-NODE-HOSTNAME redis-master = NEW-NODE-HOSTNAME primary-datacenter = primary ...
- Создайте резервную копию
-
В административной оболочке узла, в котором вы изменили
cluster.conf, запуститеscreenсеанс и запустите егоghe-cluster-config-apply. Эта команда перенастраивает кластер, повышая только что добавленный узел к основному узлу MySQL и преобразуя исходный первичный узел MySQL в реплику.Примечание.
Предыдущий фрагмент не предполагает GitHub Actions , что включен в кластере.
-
Если GitHub Actions включено в кластере, выполните следующую команду из нового узла MySQL и MSSQL.
Shell /usr/local/share/enterprise/ghe-repl-post-failover-mssql
/usr/local/share/enterprise/ghe-repl-post-failover-mssql -
Проверьте состояние репликации MySQL (или MySQL и MSSQL) с любого узла в кластере, выполнив команду
ghe-cluster-status -v. -
После завершения репликации MySQL (или MySQL и MSSQL) от любого узла в кластере отключите режим обслуживания. См . раздел AUTOTITLE.