etcd的快照和恢复
简介
etcd是一种高可用的、分布式数据库,以键值对的方式存储数据。在kubernetes环境里,用户在master所做的一切比如创建pod、删除pod等操作都记录在etcd里,所安装的flannel或者calico网络的配置也保存在etcd数据库里。
安装并配置etcd
练习环境
每台节点上安装etcd:
[root@vms8X ~]# yum install etcd -y
修改/etc/etcd/etcd.conf内容如下:
[root@vms8X ~]# cat /etc/etcd/etcd.conf
ETCD_DATA_DIR="/var/lib/etcd/cluster.etcd"
ETCD_LISTEN_PEER_URLS="http://192.168.26.8X:2380,http://localhost:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.26.8X:2379,http://localhost:2379"
ETCD_NAME="etcd-8X"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.26.8X:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379,http://192.168.26.8X:2379"
ETCD_INITIAL_CLUSTER="etcd-81=http://192.168.26.81:2380,etcd-82=http://192.168.26.82:2380,etcd-83=http://192.168.26.83:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
[root@vms8X ~]#
在所有节点上启动etcd:
[root@vms8X ~]# systemctl start etcd
[root@vms8X ~]#
测试同步性
在所有节点上执行
export ETCDCTL_API=3
在vms81上写测试数据:
[root@vms81 ~]# etcdctl put k1 vv1
OK
[root@vms81 ~]#
在其他节点测试同步性:
[root@vms82 ~]# etcdctl get k1
k1
vv1
[root@vms82 ~]#
可以看到在vms81上写的数据了。
做快照
在任何一台主机上对etcd做快照,这里选择vms81
[root@vms81 ~]# etcdctl snapshot save snap1.db
Snapshot saved at snap1.db
[root@vms81 ~]#
此快照里包含了刚刚写的数据k1=vv1,然后把快照文件到所有节点
[root@vms81 ~]# scp -p snap1.db vms82:~
[root@vms81 ~]# scp -p snap1.db vms83:~
[root@vms81 ~]#
恢复数据
在任意节点上删除刚刚创建的数据,这里在vms81上操作:
[root@vms81 ~]# etcdctl del k1
1
[root@vms81 ~]# etcdctl get k1
[root@vms81 ~]#
下面开始恢复数据:
在所有节点上关闭etcd,并删除/var/lib/etcd/里所有数据:
[root@vms8X ~]# systemctl stop etcd
[root@vms8X ~]# rm -rf /var/lib/etcd/*
[root@vms8X ~]#
在所有节点上把快照文件/root/snap1.db的所有者和所属组设置为etcd:
[root@vms8X ~]# chown etcd.etcd snap1.db
[root@vms8X ~]#
在每台节点上开始恢复数据:
[root@vms8X ~]# etcdctl snapshot restore snap1.db --name etcd-8X --initial-cluster etcd-81=http://192.168.26.81:2380,etcd-82=http://192.168.26.82:2380,etcd-83=http://192.168.26.83:2380 --initial-advertise-peer-urls http://192.168.26.8X:2380 --data-dir /var/lib/etcd/cluster.etcd
...输出...
[root@vms8X ~]#
所有节点把/var/lib/etcd及里面内容的所有者和所属组改为etcd:
[root@vms8X ~]# chown -R etcd.etcd /var/lib/etcd/
然后分别启动etcd:[root@vms8X ~]# systemctl start etcd
测试数据恢复情况:
[root@vms83 ~]# etcdctl get k1
k1
vv1
[root@vms83 ~]#
已经恢复出来了。