关于 GitHub Enterprise Server 群集节点的替换
可以替换 GitHub Enterprise Server 群集中的功能节点,也可以替换意外发生故障的节点。
替换节点后,你的 GitHub Enterprise Server 实例 不会自动将作业分配到新节点。 可以强制让实例在各节点中实现作业均衡。 有关详细信息,请参阅“重新均衡群集工作负荷”。
Warning
为避免冲突,请勿重复使用群集中的节点曾使用过的主机名。
替换功能节点
可以替换群集中现有的功能节点。 例如,需要为虚拟机 (VM) 提供额外的 CPU、内存或存储资源时。
若要替换功能节点,请在新 VM 上安装 GitHub Enterprise Server 设备,配置 IP 地址,将新节点添加到群集配置文件,将群集初始化并应用配置,然后将替换掉的节点脱机。
Note
如果要替换主 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 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
的节点的管理 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
。 这将验证配置文件、将其复制到集群中的每个节点以及将该节点标记为离线。
在紧急情况下替换节点
可以替换群集中发生故障的节点。 例如,发生了可能会影响节点可用性的软件或硬件问题时。
Note
如果要替换主 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 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 副本节点的数据库种子设定,从而能够更快地向流量开放设备。 有关详细信息,请参阅“延迟数据库种子设定”。
-
如果要替换主 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 复制完成。 若要从群集中的任何节点监视 MySQL 复制,请运行
ghe-cluster-status -v
。将节点添加到群集后不久,可能会在复制恢复时看到复制状态错误。 复制可能需要几个小时,具体取决于实例的负载、数据库数据量以及实例上次生成数据库种子的时间。
-
在计划性维护时段内,启用维护模式。 有关详细信息,请参阅“启用和排定维护模式”。
-
通过运行
ghe-cluster-status -v
,确保 MySQL 复制从群集中的任何节点完成。Warning
如果不等待 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
。 这会重新配置群集,使新添加的节点成为主 MySQL 节点,而原始主 MySQL 节点变为副本 MySQL 节点。 -
通过运行
ghe-cluster-status -v
从群集中的任何节点检查 MySQL 复制的状态。 -
如果 MySQL 复制已完成,请从群集中的任何节点禁用维护模式。 有关详细信息,请参阅“启用和排定维护模式”。