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 数据存储的目录。 在实际操作中,你只需要在集群中的一个节点上执行恢复操作,然后等待该节点将数据同步到其他节点。如果集群中的所有节点都需要恢复,那么可能需要逐个节点执行恢复操作,但通常这是不必要的,除非有特殊情况需要单独处理某个节点。
时来天地皆同力,运去英雄不自由
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有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源报错怎么解决?