Skip to main content

Эта версия GitHub Enterprise Server была прекращена 2024-12-19. Исправления выпускаться не будут даже при критических проблемах безопасности. Для повышения производительности, повышения безопасности и новых функций выполните обновление до последней версии GitHub Enterprise Server. Чтобы получить справку по обновлению, обратитесь в службу поддержки GitHub Enterprise.

Замена узла кластера

Если узел завершается сбоем в кластере GitHub Enterprise Server или если вы хотите добавить новый узел с дополнительными ресурсами, пометьте все узлы для замены как автономные, а затем добавьте новый узел.

Кто может использовать эту функцию?

GitHub определяет право кластеризации и должен включить конфигурацию лицензии вашего экземпляра. Кластеризация требует тщательного планирования и дополнительных административных накладных расходов. Дополнительные сведения см. в разделе Сведения о кластеризации.

О замене узлов кластера GitHub Enterprise Server

Можно заменить функциональный узел в кластере GitHub Enterprise Server или заменить узел, который произошел сбой.

После замены узла ваш экземпляр GitHub Enterprise Server не автоматически распределяет задания на новый узел. Вы можете принудительно выполнить балансировку заданий экземпляра между узлами. Дополнительные сведения см. в разделе Перебалансирование рабочих нагрузок кластера.

Warning

Чтобы избежать конфликтов, не используйте имя узла, которое ранее было назначено узлу в кластере.

Замена функционального узла

Вы можете заменить существующий функциональный узел в кластере. Например, может потребоваться предоставить виртуальную машину с дополнительными ресурсами ЦП, памяти или хранилища.

Чтобы заменить функциональный узел, установите устройство GitHub Enterprise Server на новой виртуальной машине, настройте IP-адрес, добавьте новый узел в файл конфигурации кластера, инициализируйте кластер и примените конфигурацию, а затем перейдите в автономный режим.

Note

Если вы заменяете узел базы данных-источника, см . раздел "Замена узла базы данных-источника".

  1. Подготовьте и установите GitHub Enterprise Server с уникальным именем узла на заменяемом узле.
  2. Для добавления недавно подготовленного заменяющего узла на любом узле измените файл 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, что приведет к тому, что устройство будет открываться для трафика раньше. Дополнительные сведения см. в разделе Отсрочка заполнения базы данных.

  1. В административной оболочке узла с измененным cluster.conf выполните команду ghe-cluster-config-init. Эта команда инициализирует только что добавленный узел в кластере.

  2. Выполните команду ghe-cluster-config-apply из того же узла. Это позволит проверить файл конфигурации, скопировать его на каждый узел в кластере и настроить каждый узел в соответствии с измененным файлом cluster.conf.

Замена узла в экстренной ситуации

Вы можете заменить неудающийся узел в кластере. Например, проблема с программным обеспечением или оборудованием может повлиять на доступность узла.

Note

Если вы заменяете узел базы данных-источника, см . раздел "Замена узла базы данных-источника".

Чтобы заменить узел в чрезвычайной ситуации, установите устройство GitHub Enterprise Server на новой виртуальной машине, настройте IP-адрес, отключите неисправный узел, примените конфигурацию, добавьте новый узел в файл конфигурации кластера, инициализируйте кластер и примените конфигурацию, а также при необходимости эвакуируйте неисправный узел.

  1. Подготовьте и установите GitHub Enterprise Server с уникальным именем узла на заменяемом узле.

  2. Используя административную оболочку или DHCP, настройте только IP-адрес заменяющего узла. Не следует настраивать другие параметры.

  3. Чтобы пометить узел со сбоем в автономном режиме, измените файл конфигурации кластера (cluster.conf) в соответствующем разделе узла для включения текста offline = true.

    Например, этот измененный cluster.conf помечает узел как автономный ghe-data-node-3:

    [cluster "ghe-data-node-3"]
    hostname = ghe-data-node-3
    offline = true
    ipv4 = 192.168.0.6
    # ipv6 = fd12:3456:789a:1::6
    
  4. В административной оболочке узла, в котором вы изменили cluster.conf, выполните команду ghe-cluster-config-apply. Это позволит проверить файл конфигурации, скопировать его на каждый узел в кластере и отметить узел как автономный.

  5. Для добавления недавно подготовленного заменяющего узла на любом узле измените файл 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, что приведет к тому, что устройство будет открываться для трафика раньше. Дополнительные сведения см. в разделе Отсрочка заполнения базы данных.

  6. Если вы заменяете основной узел Redis, cluster.confизмените redis-master значение с именем узла замены.

    Note

    Если основной узел Redis также является основным узлом MySQL, см. раздел "Замена узла базы данных-источника".

    Например, этот измененный cluster.conf файл указывает только что подготовленный узел кластера в ghe-replacement-data-node-1 качестве основного узла Redis:

    redis-master = ghe-replacement-data-node-1
    
  7. В административной оболочке узла с измененным cluster.conf выполните команду ghe-cluster-config-init. Эта команда инициализирует только что добавленный узел в кластере.

  8. Выполните команду ghe-cluster-config-apply из того же узла. Это позволит проверить файл конфигурации, скопировать его на каждый узел в кластере и настроить каждый узел в соответствии с измененным файлом cluster.conf.

  9. Если вы принимаете узел в автономном режиме, предоставляющий службы данных, например git-server, pages-serverили storage-serverэвакуировать узел. Дополнительные сведения см. в разделе Эвакуирование узла кластера с службами данных.

Замена узла базы данных-источника (MySQL или MySQL и MSSQL)

Для предоставления служб базы данных кластеру требуется основной узел MySQL и по крайней мере один узел MySQL. Дополнительные сведения см. в разделе Сведения об узлах кластера.

Если в кластере включен GitHub Actions, необходимо также учесть MSSQL на следующих шагах.

Если вам нужно выделить дополнительные ресурсы для основного узла MySQL (или MySQL и MSSQL) или заменить неработоспособный узел, можно добавить новый узел в кластер. Чтобы свести к минимуму время простоя, добавьте новый узел, реплицируйте данные MySQL (или MySQL и MSSQL), а затем добавьте его в основной узел. Некоторые простои требуются во время процесса продвижения.

  1. Подготовьте и установите GitHub Enterprise Server с уникальным именем узла на заменяемом узле.
  2. Откройте файл /data/user/common/cluster.conf конфигурации кластера в текстовом редакторе. Например, можно использовать редактор Vim. Создайте резервную копию cluster.conf файла перед изменением файла.
Shell
sudo vim /data/user/common/cluster.conf
  1. Добавьте новый заголовок узла и введите пары "ключ-значение" для конфигурации, заменив заполнители фактическими значениями.
  • Убедитесь, что вы включаете 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
     ...
   ...
   
  1. В административной оболочке узла с измененным cluster.conf выполните команду ghe-cluster-config-init. Эта команда инициализирует только что добавленный узел в кластере.

  2. В административной оболочке узла, в котором вы изменили cluster.conf, выполните команду ghe-cluster-config-apply. Недавно добавленный узел станет репликой узла MySQL, и все другие настроенные службы будут запускаться там.

    Note

    В предыдущем фрагменте не предполагается, что в кластере включен GitHub Actions.

  3. Дождитесь завершения репликации MySQL. Чтобы отслеживать репликацию MySQL с любого узла в кластере, выполните команду ghe-cluster-status -v.

    Если в кластере включена GitHub Actions, вам придется ждать завершения репликации MSSQL.

    Вскоре после добавления узла в кластер может появиться ошибка состояния репликации во время перехвата репликации. Репликация может занять несколько часов в зависимости от нагрузки экземпляра, объема данных базы данных и последнего создания начального значения базы данных.

  4. Во время запланированного периода обслуживания включите режим обслуживания. Дополнительные сведения см. в разделе Включение и планирование режима обслуживания.

  5. Убедитесь, что репликация MySQL (или MySQL и MSSQL) завершена с любого узла в кластере, выполнив команду ghe-cluster-status -v.

    Warning

    Если репликация MySQL (или MySQL и MSSQL) не завершится, вы рискуете потерей данных в экземпляре.

  6. Чтобы задать текущий основной узел MySQL режимом только для чтения, выполните следующую команду из первичного узла MySQL.

    Shell
    echo "SET GLOBAL super_read_only = 1;" | sudo mysql
    
  7. Подождите, пока глобальные идентификаторы транзакций (GTID) на первичных узлах MySQL и реплики идентичны. Чтобы проверить идентификаторы GTID, выполните следующую команду из любого узла кластера.

    Shell
    ghe-cluster-each -r mysql -- 'echo "SELECT @@global.gtid_executed;" | sudo mysql'
    
    • Чтобы проверить успешность установки глобальной переменной MySQL, выполните следующую команду.
    Shell
     echo "SHOW GLOBAL VARIABLES LIKE 'super_read_only';" | sudo mysql
    
  8. Если GitHub Actions включен в кластере, SSH в узел, который станет новым основным узлом MSSQL.

    Shell
    ssh -p 122 admin@NEW_MSSQL_NODE_HOSTNAME
    
    • В сеансе screen выполните следующую команду, чтобы повысить уровень MSSQL на новый узел.
    Shell
    /usr/local/share/enterprise/ghe-mssql-repl-promote
    

    Это попытается получить доступ к текущему основному узлу MSSQL и выполнить правильную отработку отказа

  9. После сопоставления 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
    ...
    
  10. В административной оболочке узла, в котором вы изменили cluster.conf, запустите screen сеанс и запустите его ghe-cluster-config-apply. Эта команда перенастраивает кластер, повышая только что добавленный узел к основному узлу MySQL и преобразуя исходный первичный узел MySQL в реплику.

    Note

    В предыдущем фрагменте не предполагается, что в кластере включен GitHub Actions.

  11. Проверьте состояние репликации MySQL (или MySQL и MSSQL) с любого узла в кластере, выполнив команду ghe-cluster-status -v.

  12. Если GitHub Actions включен в кластере, выполните следующую команду из нового узла MySQL и MSSQL.

    Shell
    /usr/local/share/enterprise/ghe-repl-post-failover-mssql
    
  13. После завершения репликации MySQL (или MySQL и MSSQL) от любого узла в кластере отключите режим обслуживания. См . раздел AUTOTITLE.