etcd集群恢复、单节点恢复操作手册

在这里插入图片描述

一、集群备份

备份方式:Jenkins触发每小时的定时任务,通过调取ansible的playbook进行etcd集群的数据备份和上传,默认只备份集群中的非leader成员,避免leader成员压力过大。将备份数据上传到对应的公有云对象存储,分别上传到两个不同的对象存储的目录下,以适配不同目录下的不同生命周期规则,a目录每小时上传,生命周期为保留近3天的每小时的数据备份;b目录为只有当时间为0点、12点才进行上传,生命周期为保留近15天的数据备份,每天有2次备份。

备份命令:

/usr/local/bin/etcdctl --endpoints {{ ansible_default_ipv4.address }}:2379 snapshot save {{ local_tar_dir }}{{ dump_name }}
#ansible_default_ipv4.address:本机的IP地址
#local_tar_dir:本地的保存路径
#dump_name:备份名字

二、整个集群还原

前言

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

1、从公有云下载备份文件

#obs华为云
sudo /usr/local/bin/obsutil ls obs://jws2-live-cn-backup-01/db-etcd/2024-03-28/05/ -s | grep "_master"
sudo /usr/local/bin/obsutil cp {{ first_tarball }} /tmp/snapshot.db

#gcp谷歌云
/bin/gsutil ls gs://{{cloud_backup_bucket}}/db-etcd/{{now_date}}/{{now_hour}}/
/bin/gsutil  cp  {{ backup_file.stdout }}   /tmp/snapshot.db

2、备份当前etcd集群

执行jenkins任务,或者手动执行命令

/usr/local/bin/etcdctl --endpoints {{ ansible_default_ipv4.address }}:2379 snapshot save {{ local_tar_dir }}{{ dump_name }}
#{{ local_tar_dir }}{{ dump_name }}:备份保存的目标目录和文件名

3、停止etcd集群

sudo systemctl stop etcd

4、移除原有目录

#移除原有目录
sudo mv /opt/etcd/etcd-data /opt/etcd/etcd-data_bak
#创建新目录
sudo mkdir /opt/etcd/etcd-data

5、还原etcd数据库(三节点)

建议使用etcdutl命令

先将etcdutl命令移动

sudo cp /opt/etcd/etcd-data/etcd-v3.5.0-linux-amd64/etcdutl /usr/local/bin/etcdutl

每台机器上都需要进行还原,从快照恢复时,您可以直接将新成员信息提供到数据存储中

$ etcdutl snapshot restore snapshot.db \
  --name m1 \
  --initial-cluster m1=http://host1:2380,m2=http://host2:2380,m3=http://host3:2380 \
  --initial-cluster-token etcd-cluster-1 \
  --initial-advertise-peer-urls http://host1:2380 \
  --data-dir=/opt/etcd/etcd-data
  
$ etcdutl snapshot restore snapshot.db \
  --name m2 \
  --initial-cluster m1=http://host1:2380,m2=http://host2:2380,m3=http://host3:2380 \
  --initial-cluster-token etcd-cluster-1 \
  --initial-advertise-peer-urls http://host2:2380 \
  --data-dir=/opt/etcd/etcd-data
  
$ etcdutl snapshot restore snapshot.db \
  --name m3 \
  --initial-cluster m1=http://host1:2380,m2=http://host2:2380,m3=http://host3:2380 \
  --initial-cluster-token etcd-cluster-1 \
  --initial-advertise-peer-urls http://host3:2380 \
  --data-dir=/opt/etcd/etcd-data

启动etcd集群

sudo  systemctl start etcd

6、检查新集群

检查每个etcd的数据大小和成员信息

sudo etcdctl --endpoints=http://192.168.1.5:2380,http://192.168.0.142:2380,http://192.168.1.175:2380,http://192.168.1.99:2380,http://192.168.0.70:2380 endpoint status -w table

sudo etcdctl member list

检查日志是否有异常

7、集群还原注意事项

etcd集群还原有一些坑,应当慎重执行还原操作!

当使用备份进行整个集群的还原时,集群间的数据不会自动同步,必须每台都要进行还原,切记!一定要使用同一份备份数据进行所有节点的还原。

第一次进行测试时,共有三节点,只将节点1进行了还原,2、3节点没有进行还原,2、3节点也没有数据,但是集群依然可以启动,并且2、3节点上也没有数据,集群的运行状态正常,还可以正常对外提供服务,很是诡异。

去集群get某个key,只会有三分之一的概率会获取到。也是说raft协议在这时并不会生效,这时候在写入key,集群间同步正常,可以正常获取到这个key。

因为我们在还原集群的时候指定了新的元数据,还原后的集群可以认为是一个新的集群,通过上述的情况可知,即便是集群的三个节点恢复了不同的数据,集群也不会进行数据校验,当集群运行后,raft协议才会生效,raft只会同步“新”集群后写入的数据。

三、集群单节点故障处理

前言

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

1、恢复流程

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

整体的恢复流程如下

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

2、详细恢复步骤
(1)查看集群状态

通过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)删除异常节点
MEMBER_ID=278c654c9a6dfd3b
etcdctl --endpoints=${HOST_1}:2379,${HOST_2}:2379,${HOST_3}:2379 \
	member remove ${MEMBER_ID}
(2)删除异常节点数据
#移除原有目录
sudo mv /opt/etcd/etcd-data /opt/etcd/etcd-data_bak
#创建新目录
sudo mkdir /opt/etcd/etcd-data
(3)集群中重新添加节点

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

export ETCDCTL_API=3
NAME_1=etcd-node-1
NAME_2=etcd-node-2
NAME_3=etcd-node-3
HOST_1=10.240.0.13
HOST_2=10.240.0.14
HOST_3=10.240.0.16 # 故障成员
etcdctl --endpoints=${HOST_1}:2379,${HOST_2}:2379 \
	member add ${NAME_3} \
	--peer-urls=http://${HOST_3}:2380
(4)启动节点

注意:

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

TOKEN=my-etcd-token-1
CLUSTER_STATE=existing
NAME_1=etcd-node-1
NAME_2=etcd-node-2
NAME_3=etcd-node-3
HOST_1=10.240.0.13
HOST_2=10.240.0.14
HOST_3=10.240.0.16 # 故障成员
CLUSTER=${NAME_1}=http://${HOST_1}:2380,${NAME_2}=http://${HOST_2}:2380,${NAME_3}=http://${HOST_3}:2380

THIS_NAME=${NAME_3}
THIS_IP=${HOST_3}
etcd --data-dir=data.etcd --name ${THIS_NAME} \
	--initial-advertise-peer-urls http://${THIS_IP}:2380 \
	--listen-peer-urls http://${THIS_IP}:2380 \
	--advertise-client-urls http://${THIS_IP}:2379 \
	--listen-client-urls http://${THIS_IP}:2379 \
	--initial-cluster ${CLUSTER} \
	--initial-cluster-state existing \
	--initial-cluster-token ${TOKEN}
(5)等待集群数据完成同步并恢复
export ETCDCTL_API=3
export ETCD_ENDPOINTS=10.240.0.13:2379,10.240.0.14:2379,10.240.0.16:2379
etcdctl --endpoints=$ETCD_ENDPOINTS --write-out=table member list
etcdctl --endpoints=$ETCD_ENDPOINTS --write-out=table endpoint status

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/620745.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Flink 算子

Flink 算子 用户通过算子能将一个或多个 DataStream 转换成新的 DataStream,在应用程序中可以将多个数据转换算子合并成一个复杂的数据流拓扑。 这部分内容将描述 Flink DataStream API 中基本的数据转换 API,数据转换后各种数据分区方式,以…

Excel 两层分类后的行转列

例题描述 Excel 文件中有下图所示的数据,同 Name 的物品可能有多种颜色。 现在想要把数据列出下图的形式,每种Type一行,其后依次列出每种Name及其Color。 实现方法 使用 Excel 插件 SPL XLL 在空白单元格写入公式: spl("…

阿里云短信提示被攻击怎么解决!!

你是否收到过这样的短信,【阿里云】尊敬的用户:您的IP: 实例名称: 受到攻击流量已超过云盾DDoS基础防护的带宽峰值,服务器的所有访问已被屏蔽,如果35分钟后攻击停止将自动解除否则会延期解除。详情请登录云盾控制台DDo…

5.12学习总结

一.JAVA聊天室项目 文件发送 使用 Java Socket 实现聊天内容或文件的传输的原理如下: 服务器端启动:聊天室的服务器端在指定的端口上监听客户端的连接。它创建一个 ServerSocket 对象,并通过调用 accept() 方法等待客户端的连接请求。客户…

LSTM计算指示图

掌握网络结构组件构成 输入门、遗忘门、输出门候选记忆细胞记忆细胞隐藏状态ref:6.8. 长短期记忆(LSTM) — 《动手学深度学习》 文档 (gluon.ai)

《深入浅出LLM基础篇》(四):主流大模型介绍

🎉AI学习星球推荐: GoAI的学习社区 知识星球是一个致力于提供《机器学习 | 深度学习 | CV | NLP | 大模型 | 多模态 | AIGC 》各个最新AI方向综述、论文等成体系的学习资料,配有全面而有深度的专栏内容,包括不限于 前沿论文解读、…

冯喜运:5.13黄金晚间还会跌吗?原油还会涨吗?

【黄金消息面分析】:自5月初以来,黄金和白银一直在享受需求的回归,买家在过去几天加大了力度,一度推动金价重返2370美元上方,白银重返28.5美元上方。不过,经过几天的盘整后,黄金白银价格双双下跌…

限流算法(令牌桶漏桶计数器)

📝个人主页:五敷有你 🔥系列专栏:Spring⛺️稳中求进,晒太阳 业务重的三种情况:突发流量、恶意流量、业务本身需要 限流: 是为了保护自身系统和下游系统不被高并发流量冲垮,导致系统雪崩…

AI智剪轻松学:一键操作技巧,批量视频剪辑不求人

随着科技的飞速发展,人工智能已经渗透到我们生活的方方面面,其中AI在视频剪辑领域的应用更是为众多创作者带来了福音。AI智剪技术,以其高效、便捷的特点,正在逐步改变着传统视频剪辑的方式。今天,我们就来探讨一下如何…

新火种AI|清华开发首个AI医院小镇!开启智能医疗新纪元。

作者:小岩 编辑:彩云 AI技术飞速发展,它的影响力正在逐渐渗透到各行各业,医疗领域也不例外。 人生无非是生老病死,医疗领域与其中的“病”息息相关。所以,每每医疗领域产生什么重大进展,都会…

ranger配置ha高可用方案

变更影响面 变更完需要重启所有组件 配置lb(需要客户侧配置并提供LB地址) 转发方式选择ip hash(哈希) 监听端口为6080 协议为tcp 配置后端监听

考研数学|24像张宇那样的题?李林880和李永乐660不够用了?

以前的卷子就不说了,就说说最近的24年的考研数学题 24年考研数学真题评价: 首先数学二在计算量上超过了数学三,尤其是在高等数学的选择题部分,这使得数学二的难度可能略高于数学三,尽管两者之间并没有本质的差异。与…

测试二(测试点)

能掌握80% 一、能对穷举场景设计测试点 能对穷举场景设计测试点——>等价类划分法 1.1、等价类划分法 1.1.1. 说明 | 分类 | 步骤 说明:在所有测试数据中,具有某种共同特征的数据集合进行划分。 分类:有效等价类:满足…

Multisim14 安装教程

1、下载压缩包 链接:https://pan.baidu.com/s/1L50kBBKWFtud6GhmmqHLiw?pwd8888 提取码:8888 2、解压 3、运行应用程序,开始安装, 4、点击确定 5、点击unzip,解压 6、点击确定 7、点击安装 8、填写name和organ&a…

排序-快速排序(Quick Sort)

快排的简介 快速排序(Quick Sort)是一种高效的排序算法,采用分治法的策略,其基本思想是选择一个基准元素,通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据要…

pywinauto,一款Win自动化利器!

pywinauto,一款Win自动化利器! 1.安装 pywinauto是一个用于自动化Python模块,适合Windows系统的软件(GUI),可以通过Pywinauto遍历窗口(对话框)和窗口里的控件,也可以控…

11、FreeRTOS 队列、队列集,邮箱的使用

文章目录 一、队列的特性1.1 队列常规操作1.2 传输数据的两种方法1.3 队列的阻塞访问 二 队列函数2.1创建2.2 复位2.3 删除2.4 写队列2.5 读队列2.6 查询2.7 覆盖/偷看 三、示例3.1示例 队列的基本使用3.2 示例: 分辨数据源3.3 示例: 传输大块数据3.4 : 邮箱(Mailbox) 四、队列…

多人同时导出 Excel 干崩服务器!新来的阿里大佬给出的解决方案太优雅了!

前言 业务诉求:考虑到数据库数据日渐增多,导出会有全量数据的导出,多人同时导出可以会对服务性能造成影响,导出涉及到mysql查询的io操作,还涉及文件输入、输出流的io操作,所以对服务器的性能会影响的比较大…

十进制整数转平衡三进制

求解原视频&#xff1a;平衡三进制 求赞&#xff01;100赞买个乒乓球拍&#xff01;_哔哩哔哩_bilibili 题目&#xff1a; 上海市计算机学会竞赛平台 | YACS 求解程序&#xff1a; using namespace std; #include <iostream> #include <cstring>string work(int n…

网页版五子棋的自动化测试

目录 前言 一、主要技术 二、测试环境的准备部署 三、测试用例 四、执行测试 4.1、公共类设计 创建浏览器驱动对象 测试套件 释放驱动类 4.2、功能测试 登录页面 注册页面 游戏大厅页面 游戏房间页面 测试套件结果 4.3、界面测试 登录页面 注册页面 游戏大…