etcd集群数据备份和恢复

前面几篇笔记记录了etcd单机和集群,还有加密集群的部署方式,这篇就是etcd目前学习的最后一篇笔记,记录了etcd集群备份和恢复数据的方法,记录下来方便后面使用

还是用之前TLS加密部署的集群,部署方式可以查看之前的笔记:https://sulao.cn/post/969.html

首先我们写入数据

etcdctl --cacert=/etc/etcd/pki/ca.pem --cert=/etc/etcd/pki/server.pem --key=/etc/etcd/pki/server-key.pem --endpoints="https://127.0.0.1:2379" put testdata "test data"
ok

查询刚才写入的数据

etcdctl --cacert=/etc/etcd/pki/ca.pem --cert=/etc/etcd/pki/server.pem --key=/etc/etcd/pki/server-key.pem --endpoints="https://127.0.0.1:2379" get testdata
testdata
test data

使用snapshot进行备份,etcd集群备份我们只需要找其中一个节点进行备份即可,不用每个集群节点都备份

etcdctl --cacert=/etc/etcd/pki/ca.pem --cert=/etc/etcd/pki/server.pem --key=/etc/etcd/pki/server-key.pem --endpoints="https://127.0.0.1:2379" snapshot save /data/etcd_cluster_backup2.db

删除刚才写入的数据

etcdctl --cacert=/etc/etcd/pki/ca.pem --cert=/etc/etcd/pki/server.pem --key=/etc/etcd/pki/server-key.pem --endpoints="https://127.0.0.1:2379" del testdata

这个时候我们需要先停止三个集群的etcd服务,如果是k8s的话还需要停止api-server


systemctl stop etcd
#如果是k8s需要将/etc/kubernetes/manifests目录移走,移走以后api-server就pendding了。
mv /etc/kubernetes/manifests /etc/kubernetes/manifests_bak
#恢复前注意还需要清空配置的data-dir目录,这个目录确保里面为空
mv /data/etcd /data/etcd_bak
mkdir -p /data/etcd
#如果是k8s,那么etcd目录是在/var/lib/下
mv /var/lib/etcd /var/lib/etcd_bak

恢复etcd_cluster_backup.db备份,每个集群都需要进行恢复

把备份数据拷贝到其他两个节点


scp /data/etcd_cluster_backup.db root@192.168.1.77:/data/
scp /data/etcd_cluster_backup.db root@192.168.1.79:/data/

然后进行恢复,注意每个etcd节点的--name不一样,其他配置根据自己集群配置进行更改

同时也需要注意,高版本恢复数据已经弃用etcdctl,需要使用etcdutl命令

在etcd1节点执行


etcdutl snapshot restore /data/etcd_cluster_backup.db \
  --name etcd1 \
  --initial-cluster "etcd1=https://192.168.1.76:2380,etcd2=https://192.168.1.77:2380,etcd3=https://192.168.1.79:2380" \
  --initial-cluster-token etcd-cluster \
  --initial-advertise-peer-urls https://192.168.1.76:2380 \
  --data-dir=/data/etcd

微信截图_20240130153359.png

在etcd2节点执行


etcdutl snapshot restore /data/etcd_cluster_backup.db \
  --name etcd2 \
  --initial-cluster "etcd1=https://192.168.1.76:2380,etcd2=https://192.168.1.77:2380,etcd3=https://192.168.1.79:2380" \
  --initial-cluster-token etcd-cluster \
  --initial-advertise-peer-urls https://192.168.1.77:2380 \
  --data-dir=/data/etcd

在etcd3节点执行


etcdutl snapshot restore /data/etcd_cluster_backup.db \
  --name etcd3 \
  --initial-cluster "etcd1=https://192.168.1.76:2380,etcd2=https://192.168.1.77:2380,etcd3=https://192.168.1.79:2380" \
  --initial-cluster-token etcd-cluster \
  --initial-advertise-peer-urls https://192.168.1.79:2380 \
  --data-dir=/data/etcd

最后再次检查数据和集群状态

etcdctl --cacert=/etc/etcd/pki/ca.pem --cert=/etc/etcd/pki/server.pem --key=/etc/etcd/pki/server-key.pem --endpoints="https://192.168.1.76:2379,https://192.168.1.77:2379,https://192.168.1.79:2379" endpoint health -w table

微信截图_20240130154309.png

接着我们再检查删除前的数据

etcdctl --cacert=/etc/etcd/pki/ca.pem --cert=/etc/etcd/pki/server.pem --key=/etc/etcd/pki/server-key.pem --endpoints="https://127.0.0.1:2379" get testdata

返回了之前写入的testdata数据,说明恢复成功。


内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://sulao.cn/post/970.html