如果不压缩和备份etcd的数据会怎样?k8s数据存储
etcd架构图
etcd架构原理图

压缩数据的必要性:使用etcd的家伙应该会碰到这个问题:database space exceeded。从报错的字面意思来看,是超出数据库空间导致。执行etcdctl endpoint status,查看集群此时各节点的状态,发现DB SIZE为2.1GB。ETCD官方文档说明(https://etcd.io/docs/v3.3.12/dev-guide/limit/)提到ETCD默认的存储大小是2GB。超出后,集群无法进行写入。

备份数据的必要性:ETCD具有高可用的特点,但是也无法避免多个节点宕机,甚至全部宕机的情况发生。如何快速的恢复集群,就变得格外重要。为有效恢复数据,且避免猪队友误操作,需要将etcd集群内数据进行备份,供恢复时使用。

添加etcd的监控,如zabbix监控,service.conf配置获取db_size的值即可

UserParameter=get_etcd_db,etcdctl --write-out=json --endpoints=‘http://10.0.0.2:2380’ endpoint status | egrep -o ‘“dbSize”:[0-9]’ | egrep -o '[0-9]

定时压缩脚本:

先获取db_size的值,判断是否超过500M左右进行压缩
备份数据
获取reversion后进行压缩
defrag清理内存
#!/bin/bash
source /etc/profile
dbsize=$(etcdctl --write-out=json --endpoints=‘http://10.0.0.2:2380’ endpoint status | egrep -o ‘“dbSize”:[0-9]’ | egrep -o '[0-9]’)
if [ d b s i z e − g t 524288000 ] ; t h e n e t c d c t l − − e n d p o i n t s 10.0.0.2 : 2379 s n a p s h o t s a v e / u s r / l o c a l / m y d a t a / e t c d s n a p s h o t / dbsize -gt 524288000 ];then etcdctl --endpoints 10.0.0.2:2379 snapshot save /usr/local/mydata/etcdsnapshot/ dbsizegt524288000];thenetcdctlendpoints10.0.0.2:2379snapshotsave/usr/local/mydata/etcdsnapshot/(date +"%Y-%m-%d").db >> /usr/local/mydata/etcd.log
etcdctl --endpoints=‘http://10.0.0.2:2380’ compact $(etcdctl --write-out=json --endpoints=‘http://10.0.0.2:2380’ endpoint status | egrep -o ‘“revision”:[0-9]’ | egrep -o '[0-9]’) >> /usr/local/mydata/etcd.log
etcdctl defrag
echo ‘compact success’
else
echo ‘no need compact!’
fi

如果不压缩和备份etcd的数据会怎样?k8s数据存储
压缩图
压缩数据监控图

原则上etcd备份数据还原必须迁移到新的etcd集群,但是为了节省空间和金钱,需要进行本地数据备份,且集群故障后将使用本地数据进行恢复

恢复步骤命令

集群部署完成后,先不启动ETCD服务,并将原有ETCD数据目录删除
依次在三台节点上执行恢复数据的命令etcdctl --name=x.x.x.x-name-3 --endpoints=“https://x.x.x.x:2379” --initial-advertise-peer-urls=https://x.x.x.x:2380 --initial-cluster=x.x.x.x-name-1=https://x.x.x.x:2380,x.x.x.x-name-2=https://x.x.x.x:2380,x.x.x.x-name-3=https://x.x.x.x:2380 --data-dir=/usr/local/etcd/data.etcd/ snapshot restore /usr/local/mydata/etcd/snapshot/data.**.db
将指定快照恢复到etcd安装数据目录下,有证书和加密的需要考虑–cert=/var/lib/etcd/cert/etcd-client.pem --key=/var/lib/etcd/cert/etcd-client-key.pem --cacert=/var/lib/etcd/cert/ca.pem --initial-cluster-token=xxxxxxxxxx

启动ETCD服务,检查集群状态

systemctl start etcd
etcdctl member list 查看节点状态

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐