ETCD集群故障应急恢复-本地数据可用

系列文章目录



前言

如果整个etcd集群的所有节点宕机,并且通过常规节点重启,无法完成选主,集群无法恢复。本文针对这种情况进行集群恢复指导


一、总体恢复流程

整体的恢复流程如下

选择一个数据可用的节点
使用强启动的方式启动一个单节点集群
逐一将其他节点添加到集群中
集群完成数据同步并恢复

二、集群故障恢复

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

由于各种原因,整个集群无法完成选主。本次选择etcd1节点,作为最开始启动的节点。

2.2 启动第一个节点

2.2.1 etcd1节点需要调整启动参数,启动脚本如下

[root@host-1 /]# cat start_etcd_with_force_new_cluster.sh 
#! /bin/sh

name="etcd1"
host="192.168.92.128"
cluster="etcd1=http://192.168.92.128: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 new --force-new-cluster  --log-level info   --logger zap   --log-outputs stderr

关键参数如下

  • –data-dir /data/etcd,需要从当前保存的数据目录加载
  • –force-new-cluster,强制启动集群
  • –initial-cluster-state new,启动一个新集群,跟–force-new-cluster配合使用
  • –initial-cluster $cluster,只配置本节点,形成一个单节点集群

2.2.2 验证集群是否启动

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

在这里插入图片描述

2.2 添加第二个节点

2.2.1 添加第2个节点到集群中

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

在这里插入图片描述
此时由于整体集群是2个节点,第2个节点没有启动,因此不符合raft协议,第1个节点会宕机,需要尽快将第2个节点启动,整体集群才能恢复正常。

2.2.2 删除第2个节点的数据

mv /data/etcd /data/etcd.bak
mkdir -p /data/etcd/

备份数据(以防万一),并创建一个空的数据目录,启动时加入到集群中,并同步数据

2.2.2 启动第2个节点
第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"

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

关键参数如下

  • –data-dir /data/etcd,需要从当前保存的数据目录加载
  • –initial-cluster-state existing,加入已有集群
  • –initial-cluster $cluster,只配置2个节点,形成一个2节点集群

2.2.3 查看集群状态

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

在这里插入图片描述
说明
1、etcd的raft协议进行选主时,会考虑数据的offset,offset越大,倾向于获取选主的选票,因此在这种情况下,会选择etcd1作为主

2.3 添加第三个节点

2.2.1 添加第3个节点到集群中

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

在这里插入图片描述

此时由于整体集群是3个节点,已经有2个节点正常,因此添加第3个节点并不会影响当前的选主情况。

2.2.2 删除第3个节点的数据

mv /data/etcd /data/etcd.bak
mkdir -p /data/etcd/

备份数据(以防万一),并创建一个空的数据目录,启动时加入到集群中,并同步数据

2.2.2 启动第3个节点
第2个节点的启动脚本如下

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

name="etcd3"
host="192.168.92.130"
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

关键参数如下

  • –data-dir /data/etcd,需要从当前保存的数据目录加载
  • –initial-cluster-state existing,加入已有集群
  • –initial-cluster $cluster,配置3个节点,形成一个3节点集群

2.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 --write-out=table member list
etcdctl --endpoints=$ETCD_ENDPOINTS --write-out=table endpoint status

在这里插入图片描述

2.4 调整第1个节点的启动参数

第1个节点的启动参数按照如下方式调整,否则每次第1个节点重启后,会重新创建一个集群,明显是不合适的。

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

name="etcd1"
host="192.168.92.128"
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

并重启etcd1节点


总结

集群无法完成选主时,可以通过这种强启动集群的方式,进行恢复。这是一种兜底方案,也是最后的手段

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: etcd-manager-1.2.0-win64.exe 是一个在Windows 64位操作系统上运行的 etcd 管理工具。etcd 是一个分布式的键值存储系统,用于在分布式环境下存储和获取数据etcd-manager 是一个用于管理和监控 etcd 集群的工具,它可以帮助用户轻松地部署、配置和监视 etcd 集群。 etcd-manager-1.2.0-win64.exe 提供了一个直观的图形用户界面(GUI),使用户可以通过简单的操作来管理 etcd 集群。它提供了集群节点的状态信息,包括健康状态、存储容量等。用户可以通过 etcd-manager 来添加、删除和修改集群节点,并监控节点的运行状态。 etcd-manager-1.2.0-win64.exe 还提供了一些高级功能,例如自动扩展和负载均衡。用户可以设置自动扩展规则,以便在需要时动态添加新的节点。它还支持负载均衡,可以自动将请求分发到可用的集群节点上,以提高系统的性能和可靠性。 此外,etcd-manager-1.2.0-win64.exe 还包含了一些安全功能,例如身份验证和访问控制。用户可以设置用户名和密码来保护集群的访问,并根据角色和权限对用户进行授权。 综上所述,etcd-manager-1.2.0-win64.exe 是一个功能强大的 etcd 管理工具,它可以帮助用户轻松地管理和监视 etcd 集群,提高系统的性能和可靠性。 ### 回答2: etcd-manager-1.2.0-win64.exe是一个Windows操作系统上的etcd管理工具。etcd是一个分布式的键值存储系统,用于存储关键配置和服务发现。etcd-manager则是帮助管理和监控etcd集群的工具。 etcd-manager-1.2.0-win64.exe版本是1.2.0,适用于64位的Windows操作系统。通过运行这个可执行文件,可以在Windows平台上使用etcd-manager。 etcd-manager具有很多功能,包括集群管理、监控和告警、备份和恢复等。它可以帮助管理员轻松配置和管理etcd集群,监控集群的健康状态,并在出现问题时提供相应的告警信息。此外,etcd-manager还提供了备份和恢复功能,以便在需要时可以方便地进行数据的备份和恢复操作。 etcd-manager-1.2.0-win64.exe的安装和使用相对简单。只需下载可执行文件,然后在Windows系统上运行它即可。用户可以根据需要配置etcd集群的相关参数,并通过etcd-manager的web界面进行监控和管理。 总之,etcd-manager-1.2.0-win64.exe是一个方便的etcd管理工具,适用于Windows操作系统。它提供了集群管理、监控和告警、备份和恢复等功能,帮助管理员轻松配置和管理etcd集群。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值