关于 GitHub Enterprise Server 群集节点的替换
可以替换 GitHub Enterprise Server 群集中的功能节点,也可以替换意外发生故障的节点。
替换节点后,你的 GitHub Enterprise Server 实例 不会自动将作业分配到新节点。 可以强制让实例在各节点中实现作业均衡。 有关详细信息,请参阅“重新均衡群集工作负荷”。
警告:为避免冲突,请勿重复使用群集中的节点曾使用过的主机名。
替换功能节点
可以替换群集中现有的功能节点。 例如,需要为虚拟机 (VM) 提供额外的 CPU、内存或存储资源时。
若要替换功能节点,请在新 VM 上安装 GitHub Enterprise Server 设备,配置 IP 地址,将新节点添加到群集配置文件,将群集初始化并应用配置,然后将替换掉的节点脱机。
注意: 如果要替换主 MySQL 节点,请参阅“替换主 MySQL 节点”。
-
在替换节点上使用唯一主机名预配和安装 GitHub Enterprise Server。
-
使用管理 shell 或 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 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
的节点的管理 shell 中,运行ghe-cluster-config-init
。 这将初始化集群中新增的节点。 -
从同一节点中运行
ghe-cluster-config-apply
。 这将验证配置文件、将其复制到集群中的每个节点以及根据修改的cluster.conf
文件配置每个节点。 -
如果要使提供数据服务(例如
git-server
、pages-server
或storage-server
)的节点脱机,请疏散该节点。 有关详细信息,请参阅“疏散运行数据服务的群集节点”。 -
若要将失败的节点标记为脱机,请在任何节点上修改相关节点部分中的群集配置文件 (
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
-
从修改
cluster.conf
的节点的管理 shell 中,运行ghe-cluster-config-apply
。 这将验证配置文件、将其复制到集群中的每个节点以及将该节点标记为离线。
在紧急情况下替换节点
可以替换群集中发生故障的节点。 例如,发生了可能会影响节点可用性的软件或硬件问题时。
注意: 如果要替换主 MySQL 节点,请参阅“替换主 MySQL 节点”。
若要在紧急情况下替换某个节点,请在新 VM 上安装 GitHub Enterprise Server 设备,配置 IP 地址,将故障节点脱机,应用配置,将新节点添加到群集配置文件,将群集初始化并应用配置,然后选择性地去掉故障节点。
-
在替换节点上使用唯一主机名预配和安装 GitHub Enterprise Server。
-
使用管理 shell 或 DHCP,仅配置替换节点的 IP 地址。 不要配置任何其他设置。
-
若要将失败的节点标记为脱机,请在任何节点上修改相关节点部分中的群集配置文件 (
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
-
从修改
cluster.conf
的节点的管理 shell 中,运行ghe-cluster-config-apply
。 这将验证配置文件、将其复制到集群中的每个节点以及将该节点标记为离线。 -
若要添加新预配的替换节点,可在任何节点上修改
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
可以选择延迟新 MySQL 副本节点的数据库种子设定,从而能够更快地向流量开放设备。 有关详细信息,请参阅“延迟数据库种子设定”。
-
如果要替换主 Redis 节点,请在
cluster.conf
中,使用替换节点名称修改redis-master
值。注意: 如果主 Redis 节点也是主 MySQL 节点,请参阅“替换主 MySQL 节点”。
例如,此修改的
cluster.conf
文件将新预配的群集节点ghe-replacement-data-node-1
指定为主 Redis 节点:redis-master = ghe-replacement-data-node-1
-
从含有经修改
cluster.conf
的节点的管理 shell 中,运行ghe-cluster-config-init
。 这将初始化集群中新增的节点。 -
从同一节点中运行
ghe-cluster-config-apply
。 这将验证配置文件、将其复制到集群中的每个节点以及根据修改的cluster.conf
文件配置每个节点。 -
如果要使提供数据服务(例如
git-server
、pages-server
或storage-server
)的节点脱机,请疏散该节点。 有关详细信息,请参阅“疏散运行数据服务的群集节点”。
替换主 MySQL 节点
若要提供数据库服务,群集需要主 MySQL 节点和至少一个辅助 MySQL 节点。 有关详细信息,请参阅“关于集群节点”。
如果想要为主 MySQL 节点的虚拟机提供更多资源,或者如果该节点故障,可以更换该节点。 若要最大程度地减少停机时间,请将新节点添加到群集,复制 MySQL 数据,然后升级该节点。 升级期间需要停机一段时间。
-
在替换节点上使用唯一主机名预配和安装 GitHub Enterprise Server。
-
使用管理 shell 或 DHCP,仅配置替换节点的 IP 地址。 不要配置任何其他设置。
-
若要连接到 你的 GitHub Enterprise Server 实例,请通过 SSH 连接到群集的任何节点。 在工作站中运行以下命令。 将 HOSTNAME 替换为节点的主机名。 有关详细信息,请参阅“访问管理 shell (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
-
群集配置文件在
[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 ... ...
- 确保包含了
-
从含有经修改
cluster.conf
的节点的管理 shell 中,运行ghe-cluster-config-init
。 这将初始化集群中新增的节点。 -
从修改
cluster.conf
的节点的管理 shell 中,运行ghe-cluster-config-apply
。 这将验证配置文件、将其复制到集群中的每个节点以及将该节点标记为离线。 -
等待 MySQL 复制完成。 若要从群集中的任何节点监视 MySQL 复制,请运行
ghe-cluster-status -v
。将节点添加到群集后不久,可能会在复制恢复时看到复制状态错误。 复制可能需要几个小时,具体取决于实例的负载和上次实例生成数据库种子的时间。
-
在计划性维护时段内,启用维护模式。 有关详细信息,请参阅“启用和排定维护模式”。
-
通过运行
ghe-cluster-status -v
,确保 MySQL 复制从群集中的任何节点完成。警告:如果不等待 MySQL 复制完成,则实例上可能会丢失数据。****
-
若要将当前 MySQL 主节点设置为只读模式,请在实例的节点运行以下命令。
Shell echo "SET GLOBAL super_read_only = 1;" | sudo mysql
echo "SET GLOBAL super_read_only = 1;" | sudo mysql
-
等待直至在主要和辅助 MySQL 节点上设置的全局事务标识符 (GTID) 相同。 若要检查 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 节点上的 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 ...
- 在编辑文件之前创建
-
从修改
cluster.conf
的节点的管理 shell 中,运行ghe-cluster-config-apply
。 这将验证配置文件、将其复制到集群中的每个节点以及将该节点标记为离线。 -
通过运行
ghe-cluster-status -v
,从群集中的任何节点检查 MySQL 复制的状态。 -
如果 MySQL 复制已完成,请从群集中的任何节点禁用维护模式。 有关详细信息,请参阅“启用和排定维护模式”。