etcd 操作备份和恢复

复制代码
2.3.5 :etcd增删改查数据:





2.3.6 :etcd数据watch机制:
基于不断监看数据,发⽣变化就主动触发通知客户端,  Etcd v3 的watch机制⽀持watch某个固定的key,也⽀持 watch⼀个范围。
相⽐Etcd v2, Etcd v3的⼀些主要变化:

接⼝通过grpc提供rpc接⼝,放弃了v2的http接⼝,优势是⻓连接效率提升明显,缺点是使⽤不如以前⽅便,尤其对
不⽅便维护⻓连接的场景。
废弃了原来的⽬录结构,变成了纯粹的kv,⽤户可以通过前缀匹配模式模拟⽬录。
内存中不再保存value,同样的内存可以⽀持存储更多的key。
watch机制更稳定,基本上可以通过watch机制实现数据的完全同步。
提供了批量操作以及事务机制,⽤户可以通过批量事务请求来实现Etcd v2的CAS机制(批量事务⽀持if条件判断)。
watch测试:

#在etcd node1上watch⼀个key,没有此key也可以执⾏watch,后期可以再创建:
root@etcd1:~# ETCDCTL_API=3  /usr/bin/etcdctl watch  /name
#在etcd node2修改数据,验证etcd node1是否能够发现数据变化
root@etcd2:~# ETCDCTL_API=3  /usr/bin/etcdctl put  /data "data v1"
OK
root@etcd2:~# ETCDCTL_API=3  /usr/bin/etcdctl put  /data "data v2"
OK







2.3.7 :etcd数据备份与恢复机制:
WAL是writeahead log的缩写,顾名思义,也就是在执⾏真正的写操作之前先写⼀个⽇志,预写⽇志。
wal: 存放预写式⽇志,最⼤的作⽤是记录了整个数据变化的全部历程。在etcd中,所有数据的修改在提交前,都要 先写⼊到WAL中。
2.3.7.1 :etcd v2版本数据备份与恢复:

V2版本帮助信息:
root@k8s-etcd2:~# /usr/bin/etcdctl backup --help
NAME:
etcdctl backup - backup an etcd directory

USAGE:
etcdctl backup [command options]

OPTIONS:
--data-dir value        Path to the etcd data dir #源数据⽬录
--wal-dir value         Path to the etcd wal dir
--backup-dir value      Path to the backup dir #备份⽬录
--backup-wal-dir value  Path to the backup wal dir

V2版本备份数据:
root@k8s-etcd2:~# ETCDCTL_API=2 etcdctl backup  --data-dir /var/lib/etcd/ --backup-dir
/opt/etcd_backup
2019-07-11 18:59:57.674432 I | wal: segmented wal file
/opt/etcd_backup/member/wal/0000000000000001-0000000000017183.wal is created

V2版本恢复数据:
#恢复帮助信息:
root@k8s-etcd2:~# etcd --help | grep force
--force-new-cluster 'false'
force to create a new one-member cluster.

etcd --data-dir=/var/lib/etcd/default.etcd --force-new-cluster &

root@k8s-etcd2:~# vim /etc/systemd/system/etcd.service
[Unit]
Description=Etcd Server




2.3.7.2 :etcd 集群v3版本数据⼿动备份与恢复:

V3版本备份数据:
root@k8s-etcd2:~# ETCDCTL_API=3 etcdctl  snapshot save  snapshot.db
Snapshot saved at snapshot.db

V3版本恢复数据:
root@k8s-etcd2:~#  ETCDCTL_API=3  etcdctl snapshot restore  snapshot.db  --data- dir=/opt/etcd-testdir #将数据恢复到⼀个新的不存在的⽬录中
2019-07-11 18:57:46.526757 I | mvcc: restore compact to 74541
2019-07-11 18:57:46.536114 I | etcdserver/membership: added member 8e9e05c52164694d
[http://localhost:2380] to cluster cdf818194e3a8c32
#⾃动备份数据
root@k8s-etcd2:~# mkdir /data/etcd-backup-dir/ -p
root@k8s-etcd2:~# cat  script.sh
#!/bin/bash
source /etc/profile
DATE=`date +%Y-%m-%d_%H-%M-%S`
ETCDCTL_API=3 /usr/bin/etcdctl  snapshot save  /data/etcd-backup-dir/etcd-snapshot-
${DATE}.db
2.3.7.3 :etcd 集群v3版本数据⾃动备份与恢复:




root@k8s-master1:/etc/kubeasz# ./ezctl backup  k8s-01

root@k8s-master1:/etc/kubeasz# kubectl  delete pod net-test4
pod "net-test4" deleted

root@k8s-master1:/etc/kubeasz# ./ezctl restore k8s-01
2.3.7.4:  ETCD数据恢复流程:
当etcd集群宕机数量超过集群总节点数⼀半以上的时候(如总数为三台宕机两台),就会导致整合集群宕机,后期需 要重新恢复数据,则恢复流程如下:

1、恢复服务器系统
2、重新部署ETCD集群
3、停⽌kube-apiserver/controller-manager/scheduler/kubelet/kube-proxy
4、停⽌ETCD集群
5、各ETCD节点恢复同⼀份备份数据
6、启动各节点并验证ETCD集群
7、启动kube-apiserver/controller-manager/scheduler/kubelet/kube-proxy
8、验证k8s master状态及pod数据
2.3.7.5:  ETCD集群节点添加与删除:
节点维护主要是节点的添加或删除
复制代码

 

复制代码
ETCD 是 Kubernetes 集群中的关键组件,它负责存储集群的所有数据,包括集群状态、配置、服务发现、配置管理等。因此,对 ETCD 数据进行备份和恢复是非常重要的。备份可以让你在数据丢失或集群故障时恢复到之前的状态。

备份 ETCD 数据
安装 ETCD 客户端:首先需要安装 etcdctl 工具,它是 etcd 的命令行客户端,用于管理 etcd 集群。

创建备份:使用 etcdctl 工具创建快照备份。以下是一个备份命令的示例:

ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
                      --cacert=/etc/kubernetes/pki/etcd/ca.crt \
                      --cert=/etc/kubernetes/pki/etcd/server.crt \
                      --key=/etc/kubernetes/pki/etcd/server.key \
                      snapshot save /path/to/backup/etcd-snapshot.db
这个命令会创建一个包含当前 etcd 数据的快照文件,例如 etcd-snapshot.db。

验证备份:可以使用以下命令来检查备份文件的完整性和可用性:

etcdctl --write-out=table snapshot status /path/to/backup/etcd-snapshot.db
恢复 ETCD 数据
停止服务:在恢复之前,需要停止所有 etcd 服务和 Kubernetes 集群的相关组件,如 kube-apiserver、kube-controller-manager、kube-scheduler 等。

备份当前数据:在恢复之前,建议备份当前的 etcd 数据目录,以防万一恢复出现问题需要回滚。

恢复数据:使用 etcdctl 的 snapshot restore 命令从备份文件中恢复数据。以下是恢复命令的示例:

etcdctl snapshot restore /path/to/backup/etcd-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 /var/lib/etcd
注意,如果你有多个 etcd 节点,你需要确保 --initial-cluster 参数包含所有节点的信息,并且每个节点的 --name、--initial-advertise-peer-urls 和其他相关参数都是正确配置的。

重启服务:恢复完成后,重启 etcd 服务和 Kubernetes 集群的相关组件。

验证恢复:恢复完成后,检查 etcd 和 Kubernetes 集群的状态,确保集群恢复正常工作。

注意事项
备份频率:建议定期备份 etcd,并根据集群的重要性和数据变化频率确定备份频率。生产环境中的集群建议每日备份。
备份位置:将备份文件存储在安全的地方,可以考虑远程存储或云端存储。
多节点集群的恢复:如果是高可用的多节点 etcd 集群,恢复时需要对所有 etcd 节点进行操作,确保数据一致性。
测试恢复流程:定期在非生产环境中测试备份与恢复流程,确保在真正故障时能够快速、无误地恢复集群。
通过上述步骤,你可以确保 Kubernetes 集群中 etcd 数据的安全性,并在需要时能够快速恢复集群状态。

--initial-cluster-token 是什么



--initial-cluster-token 是一个标识不同 etcd 集群的令牌(token),它在引导期间用于 etcd 集群。这个参数确保了只有使用相同 initial-cluster-token 的节点才会形成一个集群,从而防止不同集群间的意外交互
。

在启动 etcd 集群时,每个节点都会使用 --initial-cluster-token 参数来指定集群的唯一标识。这个标识符在整个集群中应该是一致的,这样不同的 etcd 节点才能相互发现并加入到同一个集群中。如果设置不同的 initial-cluster-token,那么节点将无法加入到同一个集群中,因为它们会被认为是属于不同的集群。

例如,如果你有三个 etcd 节点,并且想要启动一个新的集群,你需要在启动每个节点的 etcd 服务时指定相同的 --initial-cluster-token。这样,它们就会相互识别并形成一个集群。这个参数通常在集群的初始启动时使用,在集群运行后,这个参数就不再需要了。

在 Kubernetes 集群中,etcd 作为关键的数据存储服务,存储了所有集群状态和配置。因此,--initial-cluster-token 也是 Kubernetes 集群初始化过程中的一个重要参数,确保了集群的稳定性和安全性。在实际操作中,这个参数需要被妥善保管,因为任何拥有这个令牌的人都可以加入新的节点到集群中。
复制代码

 

复制代码
在 etcd 集群中,当执行 etcdctl snapshot restore 命令来恢复数据时,通常只需要在集群中的一个节点上执行一次。这是因为 etcd 集群使用 Raft 协议来保证数据的一致性,一个节点恢复后,它会将恢复的数据同步到其他节点。

--name 参数指定了 etcd 节点的名称,这个名称是集群中唯一的。在 etcd 集群中,每个节点都有一个唯一的名称,用于标识自己。--name 参数的值通常与 --initial-cluster 参数中的节点名称相对应。

例如,如果你的 --initial-cluster 参数设置为 m1=http://host1:2380,m2=http://host2:2380,m3=http://host3:2380,那么每个节点的 --name 参数应该分别对应于 m1、m2 和 m3。这意味着:

在 host1 上执行恢复操作时,--name 应该是 m1。
在 host2 上执行恢复操作时,--name 应该是 m2。
在 host3 上执行恢复操作时,--name 应该是 m3。
这样做的目的是为了确保每个节点在集群中的标识是唯一的,并且与集群启动时的配置相匹配。

以下是 etcdctl snapshot restore 命令中各个参数的作用:

/path/to/backup/etcd-snapshot.db:指定备份文件的路径。
--name m1:指定当前节点的名称,这个名称需要与 --initial-cluster 中的节点名称一致。
--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 /var/lib/etcd:指定 etcd 数据存储的目录。
在实际操作中,你只需要在集群中的一个节点上执行恢复操作,然后等待该节点将数据同步到其他节点。如果集群中的所有节点都需要恢复,那么可能需要逐个节点执行恢复操作,但通常这是不必要的,除非有特殊情况需要单独处理某个节点。
复制代码

 

posted @   滴滴滴  阅读(492)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2019-10-17 Prometheus基于consul自动发现监控对象 https://www.iloxp.com/archive/11/
2019-10-17 Grafana 在添加邮件和钉钉报警之后不报警的原因是没有重启grafana 不生效重启。
2019-10-17 peomethues 参数设置 监控网站 /usr/local/prometheus-2.13.0.linux-amd64/prometheus --config.file=/usr/local/prometheus-2.13.0.linux-amd64/prometheus.yml --web.listen-address=:9999 --web.enable-lifecycle
2017-10-17 yum-plugin-priroites这个插件的一个文件。
2017-10-17 什么是EPEL 及 Centos上安装EPEL
2017-10-17 epel源报错怎么解决?
点击右上角即可分享
微信分享提示