系列文章目录

ETCD容器化搭建集群



前言

生产环境中,经常遇到etcd集群出现单节点故障或者集群故障。针对这两种情况,进行故障修复。本文介绍etcd的单节点故障时,故障应急的恢复手册


一、总体恢复流程

由于etcd的raft协议,整个集群能够容忍的故障节点数为(n-1)/ 2,因此在单个节点故障时,单个集群的仍然可用,不会影响业务的读写。
整体的恢复流程如下

集群member rmove异常节点
异常节点删除脏数据并重建
集群member add节点
集群完成数据同步并恢复

二、详细恢复指导

2.1 环境信息

使用本地的vmstation创建3个虚拟机,信息如下

节点名称节点IP节点配置操作系统Etcd版本Docker版本
etcd1192.168.82.1281c1g 20gCentOS7.4v3.513.1
etcd2192.168.82.1291c1g 20gCentOS7.4v3.513.1
etcd3192.168.82.1301c1g 20gCentOS7.4v3.513.1

假设etcd2节点异常,并且本地的数据已经损坏。

2.2 集群删除异常节点

通过member remove命令删除异常节点,此时整个集群只有2个节点,不会触发master重新选主,集群正常运行。

查看当前集群状态

export ETCDCTL_API=3
export ETCD_ENDPOINTS=192.168.92.128:2379,192.168.92.129:2379,192.168.92.130:2379
etcdctl --endpoints=$ETCD_ENDPOINTS --write-out=table member list
etcdctl --endpoints=$ETCD_ENDPOINTS --write-out=table endpoint status

在这里插入图片描述

2.2 删除异常节点数据

2.2.1 删除异常member

docker stop etcd2

2.2.2 删除数据
由于数据通过-v /data/etcd:/data/etcd的方式挂载,因此删除对应的数据,会清理etcd数据。

 rm -rf /data/etcd/*

2.3 集群重新添加节点

通过如下命令,将异常节点添加到集群中,等对应的节点启动后,就会自动完成集群数据同步和选主

export ETCDCTL_API=3
export ETCD_ENDPOINTS=192.168.92.128:2379,192.168.92.129:2379,192.168.92.130:2379
etcdctl --endpoints=$ETCD_ENDPOINTS member add etcd2 --peer-urls=http://192.168.92.129:2380

在这里插入图片描述

2.4 启动节点

2.4.1 完整的启动脚本为

[root@host-2 ~]# 
[root@host-2 ~]# cat start_etcd.sh 
 /bin/sh

name="etcd2"
host="192.168.92.129"
cluster="etcd1=http://192.168.92.128:2380,etcd2=http://192.168.92.129:2380,etcd3=http://192.168.92.130:2380"

docker run -d --privileged=true  -p 2379:2379  -p 2380:2380 -v /data/etcd:/data/etcd   --name $name --net=host  quay.io/coreos/etcd:v3.5.0   /usr/local/bin/etcd --name $name   --data-dir /data/etcd   --listen-client-urls http://$host:2379  --advertise-client-urls http://$host:2379 --listen-peer-urls http://$host:2380   --initial-advertise-peer-urls http://$host:2380   --initial-cluster $cluster  --initial-cluster-token tkn   --initial-cluster-state existing   --log-level info   --logger zap   --log-outputs stderr

注意,由于etcd的数据已经被删除,因此当前节点重启时,从其他的节点获取数据,因此需要调整参数–initial-cluster-state,从new改成existing

--initial-cluster-state existing

2.4.2 查看日志

docker logs 8bf31834f8ce

2.4 等待集群数据完成同步并恢复

查看当前集群的member信息

export ETCDCTL_API=3
export ETCD_ENDPOINTS=192.168.92.128:2379,192.168.92.129:2379,192.168.92.130:2379
etcdctl --endpoints=$ETCD_ENDPOINTS --write-out=table member list
etcdctl --endpoints=$ETCD_ENDPOINTS --write-out=table endpoint status

在这里插入图片描述


总结

由于整体集群有多副本,因此单节点异常时,并不会导致整个集群异常,只要正常启动对应的节点并同步数据即可恢复。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐