Master 节点替换
本文档介绍在 3 Master 高可用集群中,当某个 Master 节点故障且无法恢复时,如何替换该节点。
建议在维护窗口内执行,并严格按照“先移除旧节点,再加入新节点”的顺序操作。
步骤一:确认替换前条件
登录一台健康的 Master 节点,确认当前节点状态:
kubectl get nodes -o wide确认 NineData 服务容器名称和运行状态:
docker ps --format "table {{.Names}}\t{{.Status}}"记录以下信息:
- 故障 Master 节点的 IP 地址。
- 任意一台健康 Master 节点的 IP 地址。
- 新服务器的 IP 地址。
注意本文适用于已经部署为 3 Master 架构的集群。若当前环境只有 1 台 Master 节点,请不要直接按本文执行替换操作。
步骤二:获取新节点加入集群所需的 Token
在健康 Master 节点执行:
docker exec -i ninedata-server cat /var/lib/rancher/k3s/server/token保存返回的 Token,后续修改
config.properties时使用。说明默认容器名为
ninedata-server。如果现场环境的容器名不同,请替换为实际名称。
步骤三:准备 install_source 目录
在健康 Master 节点确认安装目录位置:
find /root -maxdepth 3 -type d -name install_source将安装目录拷贝到新服务器,例如:
scp -r <install_source目录> root@<新服务器IP>:/root/登录新服务器,进入安装目录,例如:
cd /root/install_source说明install_source的实际路径以安装包解压目录为准,例如/root/niup_ins_xxx/install_source。如果您拷贝后目录名称不同,请以实际目录为准。
步骤四:修改新节点配置
在新服务器的
install_source目录中执行:grep -nE 'k3s_token|first_master_ip|hostname' config.properties根据实际环境修改
config.properties,重点确认以下参数:k3s_token:填写步骤二获取到的 Token。first_master_ip:填写任意一台健康 Master 节点的 IP 地址。hostname:按需修改为新节点的主机名或 IP 地址。
如需编辑文件,可执行:
vi config.properties说明若
hostname保持为空,安装脚本会默认使用当前主机的本机 IP。
步骤五:停止故障节点并从集群中删除
登录故障 Master 节点,执行:
docker stop ninedata-server回到健康 Master 节点,确认故障节点已变为
NotReady:kubectl get nodes删除故障节点:
kubectl delete node <故障节点IP>注意旧节点必须先从集群中删除,再执行新节点加入操作。否则 etcd 成员数和 quorum 会先膨胀,导致新节点无法正常加入。
步骤六:在新服务器上加入 Master 节点
登录新服务器,进入
install_source目录。执行以下命令:
sh add.sh执行过程中请保持终端连接,不要中断安装。
说明如需指定数据目录或主机名,可结合脚本参数执行,例如
sh add.sh --data-dir=/opt/ninedata --hostname=<新节点主机名>。
步骤七:验证替换结果
回到健康 Master 节点,执行:
kubectl get nodes -o wide如需继续确认服务状态,可执行:
kubectl get pods -A确认新的 Master 节点已经加入集群,且关键服务恢复为 Running。
常见报错及原因说明
如果在旧节点尚未删除时直接添加新节点,可能出现如下报错:
Waiting for other members to finish joining etcd cluster: etcdserver: unhealthy cluster
原因如下:
原 3 节点 etcd 集群的 quorum 为 2。当旧节点 A 已故障,但 etcd 仍然保留该成员记录时,集群中实际存活的节点只有 B 和 C。如果此时直接加入新节点 D,集群成员数会变为 4,quorum 也会提升为 3。由于当前实际仅有 B、C 两个健康节点,2 < 3,集群会被判定为不健康,导致新节点加入失败。
因此,必须先执行 kubectl delete node <故障节点 IP> 删除旧节点,再执行加节点操作,使集群先恢复到健康的 2/2 状态,然后再接入新的 Master 节点。