Etcd集群备份恢复
安装Etcd集群
docker pull quay.io/coreos/etcd:v3.3.1
docker run -d --name etcd1 quay.io/coreos/etcd:v3.3.1 etcd -name etcd1 -advertise-client-urls http://172.17.0.2:2379 -initial-advertise-peer-urls http://172.17.0.2:2380 -listen-client-urls http://0.0.0.0:2379 -listen-peer-urls http://0.0.0.0:2380 -initial-cluster-token etcd-cluster -initial-cluster "etcd1=http://172.17.0.2:2380,etcd2=http://172.17.0.3:2380,etcd3=http://172.17.0.4:2380" -initial-cluster-state new
docker run -d --name etcd2 quay.io/coreos/etcd:v3.3.1 etcd -name etcd2 -advertise-client-urls http://172.17.0.3:2379 -initial-advertise-peer-urls http://172.17.0.3:2380 -listen-client-urls http://0.0.0.0:2379 -listen-peer-urls http://0.0.0.0:2380 -initial-cluster-token etcd-cluster -initial-cluster "etcd1=http://172.17.0.2:2380,etcd2=http://172.17.0.3:2380,etcd3=http://172.17.0.4:2380" -initial-cluster-state new
docker run -d --name etcd3 quay.io/coreos/etcd:v3.3.1 etcd -name etcd3 -advertise-client-urls http://172.17.0.4:2379 -initial-advertise-peer-urls http://172.17.0.4:2380 -listen-client-urls http://0.0.0.0:2379 -listen-peer-urls http://0.0.0.0:2380 -initial-cluster-token etcd-cluster -initial-cluster "etcd1=http://172.17.0.2:2380,etcd2=http://172.17.0.3:2380,etcd3=http://172.17.0.4:2380" -initial-cluster-state new
Etcd集群备份快照
快照中包含了集群id和成员id。
docker exec -it etcd1 sh
export ETCDCTL_API=3
etcdctl --endpoints 127.0.0.1:2379 snapshot save snapshot.db


Etcd集群快照恢复
docker stop etcd1;docker rm etcd1
docker stop etcd2;docker rm etcd2
docker stop etcd3;docker rm etcd3
docker run -d --name etcd1 quay.io/coreos/etcd:v3.3.1 sleep 10000
docker run -d --name etcd2 quay.io/coreos/etcd:v3.3.1 sleep 10000
docker run -d --name etcd3 quay.io/coreos/etcd:v3.3.1 sleep 10000
docker cp snapshot.db etcd1:/
docker cp snapshot.db etcd2:/
docker cp snapshot.db etcd3:/
docker exec -it etcd1 sh
export ETCDCTL_API=3
etcdctl snapshot restore snapshot.db --name etcd1 --initial-cluster "etcd1=http://172.17.0.2:2380,etcd2=http://172.17.0.3:2380,etcd3=http://172.17.0.4:2380" --initial-cluster-token etcd-cluster --initial-advertise-peer-urls http://172.17.0.2:2380
docker exec -it etcd2 sh
export ETCDCTL_API=3
etcdctl snapshot restore snapshot.db --name etcd2 --initial-cluster "etcd1=http://172.17.0.2:2380,etcd2=http://172.17.0.3:2380,etcd3=http://172.17.0.4:2380" --initial-cluster-token etcd-cluster --initial-advertise-peer-urls http://172.17.0.3:2380
docker exec -it etcd3 sh
export ETCDCTL_API=3
etcdctl snapshot restore snapshot.db --name etcd3 --initial-cluster "etcd1=http://172.17.0.2:2380,etcd2=http://172.17.0.3:2380,etcd3=http://172.17.0.4:2380" --initial-cluster-token etcd-cluster --initial-advertise-peer-urls http://172.17.0.4:2380
docker exec -it etcd1 sh
etcd --name etcd1 --listen-client-urls http://172.17.0.2:2379 --advertise-client-urls http://172.17.0.2:2379 --listen-peer-urls http://172.17.0.2:2380 &
docker exec -it etcd2 sh
etcd --name etcd2 --listen-client-urls http://172.17.0.3:2379 --advertise-client-urls http://172.17.0.3:2379 --listen-peer-urls http://172.17.0.3:2380 &
docker exec -it etcd3 sh
etcd --name etcd3 --listen-client-urls http://172.17.0.4:2379 --advertise-client-urls http://172.17.0.4:2379 --listen-peer-urls http://172.17.0.4:2380 &
docker exec -it etcd1 sh
export ETCDCTL_API=3
etcdctl --endpoints http://172.17.0.2:2379,http://172.17.0.3:2379,http://172.17.0.4:2379 endpoint health
etcdctl --endpoints http://172.17.0.2:2379,http://172.17.0.3:2379,http://172.17.0.4:2379 endpoint status -w table

除了使用etcdctl从snapshot.db恢复数据外,还支持使用etcdutl恢复数据。
etcdutl支持直接操作etcd数据,不走网络;etcdctl走网络管理etcd。
2个工具可以从https://github.com/etcd-io/etcd/releases下载。
参考官方案例https://etcd.io/docs/v3.5/op-guide/recovery/。
etcdutl snapshot restore snapshot.db --name etcd1 --initial-cluster etcd1=http://172.17.0.2:2380,etcd2=http://172.17.0.3:2380,etcd3=http://172.17.0.4:2380 --initial-cluster-token etcd-cluster --initial-advertise-peer-urls http://172.17.0.2:2380
etcdutl snapshot restore snapshot.db --name etcd2 --initial-cluster etcd1=http://172.17.0.2:2380,etcd2=http://172.17.0.3:2380,etcd3=http://172.17.0.4:2380 --initial-cluster-token etcd-cluster --initial-advertise-peer-urls http://172.17.0.3:2380
etcdutl snapshot restore snapshot.db --name etcd3 --initial-cluster etcd1=http://172.17.0.2:2380,etcd2=http://172.17.0.3:2380,etcd3=http://172.17.0.4:2380 --initial-cluster-token etcd-cluster --initial-advertise-peer-urls http://172.17.0.4:2380
etcd --name etcd1 --listen-client-urls http://172.17.0.2:2379 --advertise-client-urls http://172.17.0.2:2379 --listen-peer-urls http://172.17.0.2:2380 &
etcd --name etcd2 --listen-client-urls http://172.17.0.3:2379 --advertise-client-urls http://172.17.0.3:2379 --listen-peer-urls http://172.17.0.3:2380 &
etcd --name etcd3 --listen-client-urls http://172.17.0.4:2379 --advertise-client-urls http://172.17.0.4:2379 --listen-peer-urls http://172.17.0.4:2380 &
浙公网安备 33010602011771号