Skip to main content

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

替换集群节点

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

谁可以使用此功能?

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

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

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

替换节点后,你的 GitHub Enterprise Server 实例 不会自动将作业分配到新节点。 可以强制让实例在各节点中实现作业均衡。 有关详细信息,请参阅“重新均衡群集工作负荷”。

Warning

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

替换功能节点

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

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

Note

如果要替换主 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
      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 副本节点的数据库种子设定,从而能够更快地向流量开放设备。 有关详细信息,请参阅“延迟数据库种子设定”。

  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。 这将验证配置文件、将其复制到集群中的每个节点以及将该节点标记为离线。

在紧急情况下替换节点

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

Note

如果要替换主 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
      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 值。

    注意: 如果主 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。 新添加的节点将成为副本 MySQL 节点,配置的任何其他服务都将在那里运行。

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

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

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

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

    Warning

    如果不等待 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。 这会重新配置群集,使新添加的节点成为主 MySQL 节点,而原始主 MySQL 节点变为副本 MySQL 节点。

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

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