Skip to main content

此版本的 GitHub Enterprise Server 已于以下日期停止服务 2024-03-26. 即使针对重大安全问题,也不会发布补丁。 为了获得更好的性能、更高的安全性和新功能,请升级到最新版本的 GitHub Enterprise。 如需升级帮助,请联系 GitHub Enterprise 支持

替换集群节点

如果 GitHub Enterprise Server 群集中的某个节点发生故障,或如果需要添加有更多资源的新节点,请将要替换的任何节点标记为脱机,然后添加新节点。

谁可以使用此功能?

GitHub 确定聚类分析的资格,并且必须为实例的许可证启用配置。 聚类分析需要仔细规划和额外的管理开销。 有关详细信息,请参阅“关于集群”。

关于 GitHub Enterprise Server 群集节点的替换

可以替换 GitHub Enterprise Server 群集中的功能节点,也可以替换意外发生故障的节点。

警告:为避免冲突,请勿重复使用群集中的节点曾使用过的主机名。

替换功能节点

可以替换群集中现有的功能节点。 例如,需要为虚拟机 (VM) 提供额外的 CPU、内存或存储资源时。

若要替换功能节点,请在新 VM 上安装 GitHub Enterprise Server 设备,配置 IP 地址,将新节点添加到群集配置文件,将群集初始化并应用配置,然后将替换掉的节点脱机。

注意: 如果要替换主 MySQL 节点,请参阅“替换主 MySQL 节点”。

  1. 在替换节点上使用唯一主机名预配和安装 GitHub Enterprise Server

  2. 使用管理 shell 或 DHCP,仅配置替换节点的 IP 地址。 不要配置任何其他设置。

  3. 若要添加新预配的替换节点,可在任何节点上修改 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
      git-server = true
      pages-server = true
      mysql-server = true
      elasticsearch-server = true
      redis-server = true
      memcache-server = true
      metrics-server = true
      storage-server = true
    
  4. 从含有经修改 cluster.conf 的节点的管理 shell 中,运行 ghe-cluster-config-init。 这将初始化集群中新增的节点。

  5. 从同一节点中运行 ghe-cluster-config-apply。 这将验证配置文件、将其复制到集群中的每个节点以及根据修改的 cluster.conf 文件配置每个节点。

  6. 如果要使提供数据服务(例如 git-serverpages-serverstorage-server)的节点脱机,请疏散该节点。 有关详细信息,请参阅“疏散运行数据服务的群集节点”。

  7. 若要将失败的节点标记为脱机,请在任何节点上修改相关节点部分中的群集配置文件 (cluster.conf),使其包含文本 offline = true

    例如,此修改的 cluster.confghe-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
    
  8. 从修改 cluster.conf 的节点的管理 shell 中,运行 ghe-cluster-config-apply。 这将验证配置文件、将其复制到集群中的每个节点以及将该节点标记为离线。

在紧急情况下替换节点

可以替换群集中发生故障的节点。 例如,发生了可能会影响节点可用性的软件或硬件问题时。

注意: 如果要替换主 MySQL 节点,请参阅“替换主 MySQL 节点”。

若要在紧急情况下替换某个节点,请在新 VM 上安装 GitHub Enterprise Server 设备,配置 IP 地址,将故障节点脱机,应用配置,将新节点添加到群集配置文件,将群集初始化并应用配置,然后选择性地去掉故障节点。

  1. 在替换节点上使用唯一主机名预配和安装 GitHub Enterprise Server

  2. 使用管理 shell 或 DHCP,仅配置替换节点的 IP 地址。 不要配置任何其他设置。

  3. 若要将失败的节点标记为脱机,请在任何节点上修改相关节点部分中的群集配置文件 (cluster.conf),使其包含文本 offline = true

    例如,此修改的 cluster.confghe-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 的节点的管理 shell 中,运行 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
      git-server = true
      pages-server = true
      mysql-server = true
      elasticsearch-server = true
      redis-server = true
      memcache-server = true
      metrics-server = true
      storage-server = true
    
  6. 如果要替换主 Redis 节点,请在 cluster.conf 中,使用替换节点名称修改 redis-master 值。

    注意: 如果主 Redis 节点也是主 MySQL 节点,请参阅“替换主 MySQL 节点”。

    例如,此修改的 cluster.conf 文件将新预配的群集节点 ghe-replacement-data-node-1 指定为主 Redis 节点:

    redis-master = ghe-replacement-data-node-1
    
  7. 从含有经修改 cluster.conf 的节点的管理 shell 中,运行 ghe-cluster-config-init。 这将初始化集群中新增的节点。

  8. 从同一节点中运行 ghe-cluster-config-apply。 这将验证配置文件、将其复制到集群中的每个节点以及根据修改的 cluster.conf 文件配置每个节点。

  9. 如果要使提供数据服务(例如 git-serverpages-serverstorage-server)的节点脱机,请疏散该节点。 有关详细信息,请参阅“疏散运行数据服务的群集节点”。

替换主 MySQL 节点

若要提供数据库服务,群集需要主 MySQL 节点和至少一个辅助 MySQL 节点。 有关详细信息,请参阅“关于集群节点”。

如果想要为主 MySQL 节点的虚拟机提供更多资源,或者如果该节点故障,可以更换该节点。 若要最大程度地减少停机时间,请将新节点添加到群集,复制 MySQL 数据,然后升级该节点。 升级期间需要停机一段时间。

  1. 在替换节点上使用唯一主机名预配和安装 GitHub Enterprise Server

  2. 使用管理 shell 或 DHCP,仅配置替换节点的 IP 地址。 不要配置任何其他设置。

  3. 若要连接到 你的 GitHub Enterprise Server 实例,请通过 SSH 连接到群集的任何节点。 在工作站中运行以下命令。 将 HOSTNAME 替换为节点的主机名。 有关详细信息,请参阅“访问管理 shell (SSH)”。

    Shell
    ssh -p 122 admin@HOSTNAME
    
  4. 在文本编辑器中,打开位于 /data/user/common/cluster.conf 的群集配置文件。 例如,您可以使用 Vim。 在编辑文件之前创建 cluster.conf 文件的备份。

    Shell
    sudo vim /data/user/common/cluster.conf
    
  5. 群集配置文件在 [cluster "HOSTNAME"] 标题下列出每个节点。 为节点添加新标题,并输入配置的键值对,将占位符替换为实际值。

    • 确保包含了 mysql-server = true 键值对。
    • 以下部分是一个示例,且节点的配置可能有所不同。
    ...
    [cluster "HOSTNAME"]
      hostname = HOSTNAME
      ipv4 = IPV4-ADDRESS
      # ipv6 = IPV6-ADDRESS
      consul-datacenter = PRIMARY-DATACENTER
      datacenter = DATACENTER
      mysql-server = true
      redis-server = true
      ...
    ...
    
  6. 从含有经修改 cluster.conf 的节点的管理 shell 中,运行 ghe-cluster-config-init。 这将初始化集群中新增的节点。

  7. 从修改 cluster.conf 的节点的管理 shell 中,运行 ghe-cluster-config-apply。 这将验证配置文件、将其复制到集群中的每个节点以及将该节点标记为离线。

  8. 等待 MySQL 复制完成。 若要从群集中的任何节点监视 MySQL 复制,请运行 ghe-cluster-status -v

    将节点添加到群集后不久,可能会在复制恢复时看到复制状态错误。 复制可能需要几个小时,具体取决于实例的负载和上次实例生成数据库种子的时间。

  9. 在计划性维护时段内,启用维护模式。 有关详细信息,请参阅“启用和排定维护模式”。

  10. 通过运行 ghe-cluster-status -v,确保 MySQL 复制从群集中的任何节点完成。

    警告:如果不等待 MySQL 复制完成,则实例上可能会丢失数据。****

  11. 若要将当前 MySQL 主节点设置为只读模式,请在实例的节点运行以下命令。

    Shell
    echo "SET GLOBAL super_read_only = 1;" | sudo mysql
    
  12. 等待直至在主要和辅助 MySQL 节点上设置的全局事务标识符 (GTID) 相同。 若要检查 GTID,请在任何实例的节点运行以下命令。

    Shell
    ghe-cluster-each -r mysql -- 'echo "SELECT @@global.gtid_executed;" | sudo mysql'
    
  13. 当主节点和辅助 MySQL 节点上的 GTID 匹配后,通过在文本编辑器中的 /data/user/common/cluster.conf 处打开群集配置文件来更新群集配置。

    • 在编辑文件之前创建 cluster.conf 文件的备份。
    • 在顶级 [cluster] 部分,删除从 mysql-master 键值对替换的节点主机名,然后改为分配新节点。 如果新节点也是主 Redis 节点,请调整 redis-master 键值对。
    [cluster]
      mysql-master = NEW-NODE-HOSTNAME
      redis-master = NEW-NODE-HOSTNAME
      primary-datacenter = primary
    ...
    
  14. 从修改 cluster.conf 的节点的管理 shell 中,运行 ghe-cluster-config-apply。 这将验证配置文件、将其复制到集群中的每个节点以及将该节点标记为离线。

  15. 通过运行 ghe-cluster-status -v,从群集中的任何节点检查 MySQL 复制的状态。

  16. 如果 MySQL 复制已完成,请从群集中的任何节点禁用维护模式。 有关详细信息,请参阅“启用和排定维护模式”。