如果不压缩和备份etcd的数据会怎样?k8s数据存储
如果不压缩和备份etcd的数据会怎样?k8s数据存储etcd架构图压缩数据的必要性:使用etcd的家伙应该会碰到这个问题:database space exceeded。从报错的字面意思来看,是超出数据库空间导致。执行etcdctl endpoint status,查看集群此时各节点的状态,发现DB SIZE为2.1GB。ETCD官方文档说明(https://etcd.io/docs/v3.3.1
如果不压缩和备份etcd的数据会怎样?k8s数据存储
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/
dbsize−gt524288000];thenetcdctl−−endpoints10.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 查看节点状态
更多推荐
所有评论(0)