etcd的备份与还原

一、说明

etcd有两种类型的版本,一种是api版本,一种是etcd数据库版本。对于api版本,有v2和v3版本。对于etcd数据库:版本也是有v2和v3版本。在etcd数据库2.3以后的版本,etcd即可以用api的2版本,也可以用api的v3版本来操作etcd数据库。v2 与 v3 API 使用了不同的存储引擎,所以客户端命令也完全不同。而使用这两种api版本生成的数据不能混合存放。官方对v2和v3的备份有说明。support backup of v2 and v3 stores

可以通过客户端工具etcdctl查看版本信息
在这里插入图片描述
这里默认使用的api版本是v2,但是我们可以通过暴露环境变量的方式指定,使用api的版本,比如:

export ETCDCTL_API=3

二、备份

可以写成脚本,方便后面的定时备份,由于我们主要是使用的v3版本,所以我这里就以v3来说明。
cat /root/cronScript/etcd_backup_v3.sh

#!/bin/bash
source /etc/profile
date_time=`date "+%Y%m%d_%H%M%S"`
export ETCDCTL_API=3

# 替换成自己环境的etcd集群的endpoints
ETCD_ENDPOINTS="https://xx.xx.xx.xx:2379,https://xx.xx.xx.xx:2379,https://xx.xx.xx.xx:2379"

etcdctl snapshot \
--endpoints=${ETCD_ENDPOINTS} \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
save /root/backupEtcd/backup/v3/backup_${date_time}.db

find /root/backupEtcd/backup/v3/ -name "*.db" -type f -cmin +180 -print -exec rm -rf {} \; &> /dev/null

添加执行权限 chmod +x /root/cronScript/etcd_backup_v3.sh
然后的添加到定时任务里面。以防万一。
添加到crontab里面定时执行的时候,一定要注意,脚本中的etcdctl也要用绝对路径(没有注意到这个问题,害我定位了半天,泪崩)

crontab -e
0 * * * * sh/root/cronScript/etcd_backup_v3.sh > /dev/null 2&1

三、还原

在需要的恢复的节点上,首先停止所有etcd节点,并备份一下老数据,以防还原失败,好恢复

systemctl stop etcd
mv /etc/lib/etcd/  /etc/lib/etcd.bak

然后执行以下命令进行恢复

etcdctl snapshot  \
 --cacert=/etc/kubernetes/pki/etcd/ca.crt  \
 --cert=/etc/kubernetes/pki/etcd/server.crt \
 --key=/etc/kubernetes/pki/etcd/server.key  \
 restore /root/backup_20190703_153038.db  
 --name sz2-21-5-centos250  
 --data-dir /var/lib/etcd  
 --initial-cluster sz2-21-5-centos250=https://xx.xx.xx.xx:2380  
 --initial-cluster-token etcd-cluster-0 
 --initial-advertise-peer-urls https://xx.xx.xx.xx:2380

恢复完以后,重启etcd
并执行以下命令查看恢复情况

etcdctl  --endpoints=${ETCD_ENDPOINTS} \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
--prefix --keys-only=true get /

你可能感兴趣的:(技术分析)