前面几篇笔记记录了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
在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
接着我们再检查删除前的数据
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数据,说明恢复成功。