etcd默认的api版本是2的版本是不支持快照功能的,我们可以通过设置环境变量来切换成3的版本
[root@etcd1 ~]# export ETCDCTL_API=3
在节点1上写入数据
[root@etcd1 ~]# etcdctl put k1 v1
OK
在其他节点查看数据同步性
[root@etcd2 ~]# export ETCDCTL_API=3
[root@etcd2 ~]# etcdctl get k1
k1
v1
可以在节点2看到节点1的数据,证明数据是同步了的
在etcd1上拍一个快照
[root@etcd1 ~]# etcdctl snapshot save snap1.db
Snapshot saved at snap1.db
把快照文件传到其他节点
[root@etcd1 ~]# scp -p snap1.db etcd2:~
[root@etcd1 ~]# scp -p snap1.db etcd3:~
把原先的创建的k1删除
[root@etcd1 ~]# etcdctl del k1
1
[root@etcd1 ~]# etcdctl get k1
[root@etcd1 ~]#
所有节点关闭etcd,并删除/var/lib/etcd/里的数据
systemctl stop etcd
rm -rf /var/lib/etcd/*
在所有节点修改快照文件的所有者和所属组
chown etcd.etcd snap1.db
在所有节点上开始恢复数据
[root@etcd1 ~]# etcdctl snapshot restore snap1.db --name etcd1 --initial-cluster etcd1=http://172.16.210.53:2380,etcd2=http://172.16.210.54:2380,etcd3=http://172.16.210.55:2380 --initial-advertise-peer-urls http://172.16.210.53:2380 --data-dir /var/lib/etcd/cluster.etcd
[root@etcd2 ~]# etcdctl snapshot restore snap1.db --name etcd2 --initial-cluster etcd1=http://172.16.210.53:2380,etcd2=http://172.16.210.54:2380,etcd3=http://172.16.210.55:2380 --initial-advertise-peer-urls http://172.16.210.54:2380 --data-dir /var/lib/etcd/cluster.etcd
[root@etcd3 ~]# etcdctl snapshot restore snap1.db --name etcd3 --initial-cluster etcd1=http://172.16.210.53:2380,etcd2=http://172.16.210.54:2380,etcd3=http://172.16.210.55:2380 --initial-advertise-peer-urls http://172.16.210.55:2380 --data-dir /var/lib/etcd/cluster.etcd
修改所有节点把/var/lib/etcd及里面内容的所有者和所属组改为etcd,然后启动etcd
chown -R etcd.etcd /var/lib/etcd/
systemctl restart etcd
查看数据恢复情况
[root@etcd1 ~]# etcdctl get k1 ##可以看到成功恢复数据
k1
v1