ETCD单节点故障应急恢复

系列文章目录

ETCD容器化搭建集群


文章目录

  • 前言
  • 一、总体恢复流程
  • 二、详细恢复指导
    • 2.1 环境信息
    • 2.2 集群删除异常节点
    • 2.2 删除异常节点数据
    • 2.3 集群重新添加节点
    • 2.4 启动节点
    • 2.4 等待集群数据完成同步并恢复
  • 总结


前言

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


一、总体恢复流程

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

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

二、详细恢复指导

2.1 环境信息

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

节点名称 节点IP 节点配置 操作系统 Etcd版本 Docker版本
etcd1 192.168.82.128 1c1g 20g CentOS7.4 v3.5 13.1
etcd2 192.168.82.129 1c1g 20g CentOS7.4 v3.5 13.1
etcd3 192.168.82.130 1c1g 20g CentOS7.4 v3.5 13.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

ETCD单节点故障应急恢复_第1张图片

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

ETCD单节点故障应急恢复_第2张图片

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

ETCD单节点故障应急恢复_第3张图片


总结

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

你可能感兴趣的:(ETCD,kubernetes,etcd)