etcd php,Etcd集群备份及容灾恢复

在部署etcd集群时,建议使用基数个etcd实例,这样至少可以保证集群有(N-1)/2个实例是可以正常提供服务的。但是如果超过了(N-1)/2个实例故障。就需要使用备份的etcd数据对集群进行容灾恢复。

在我们生产环境部署的etcd集群是5节点,3个节点是本地sata盘,2个节点是ceph盘。本想使用这种方式为数据做HA的。但是由于ceph磁盘的IO很高(至少10ms以上),经常导致集群不稳定(IO满导致机器假死,etcd实例还存活,但是网络不通)。所以后期直接全部切换到本地sata盘。

etcd 证书制作

由于v3版本的etcd证书是基于IP的,所以每次新增etcd节点都需要重新制作证书。

详情https://github.com/cloudflare/cfssl

备份etcd数据

只需要在单节点etcd上执行下面的命令就可以对etcd进行数据备份。我们是每两个小时备份一次数据,并上传到S3上,并保留最近两天的数据。

1

2# mkdir -p /var/lib/etcd_backup/

# ETCDCTL_API=3 etcdctl snapshot save /var/lib/etcd_backup/etcd_$(date "+%Y%m%d%H%M%S").db

恢复etcd数据(集群不可用,灾难恢复)

下面介绍下当整个etcd集群不可用的情况下,如何快速的恢复一个etcd集群。

1.首先需要停止master节点的kube-apiserver服务:

1#systemctl stop kube-apiserver

确保kube-apiserver已经停止了,执行下列命令返回值为0

1

2# ps -ef|grep kube-api|grep -v grep |wc -l

0

2.停掉集群中的所有etcd服务

1#systemctl stop etcd

确保etcd停止成功

1

2# ps -ef|grep etcd|grep -v etcd|wc -l

0

3.移除所有etcd服务实例的数据目录

1# mv /var/lib/etcd/data.etcd /var/lib/etcd/data.etcd_bak

分别在各个节点恢复数据,首先需要拷贝数据到每个etcd节点,假设备份数据存储在/var/lib/etcd_backup/backup_20180107172459.db

1

2

3

4

5scp /var/lib/etcd_backup/backup_20180107172459.db root@etcd01:/var/lib/etcd_backup/

scp /var/lib/etcd_backup/backup_20180107172459.db root@etcd02:/var/lib/etcd_backup/

scp /var/lib/etcd_backup/backup_20180107172459.db root@etcd03:/var/lib/etcd_backup/

scp /var/lib/etcd_backup/backup_20180107172459.db root@etcd04:/var/lib/etcd_backup/

scp /var/lib/etcd_backup/backup_20180107172459.db root@etcd05:/var/lib/etcd_backup/

在需要恢复的所有etcd实例上执行恢复命令:

1# ETCDCTL_API=3 etcdctl snapshot --ca-file=/etc/etcd/ssl/ca.pem --cert-file=/etc/etcd/ssl/etcd.pem --key-file=/etc/etcd/ssl/etcd-key.pem restore --name= --data-dir= --initial-cluster= --initial-cluster-token=

4.同时启动etcd集群的所有etcd实例

1#systemctl start etcd

5.检查etcd集群member及健康状态

1# etcdctl --ca-file=/etc/etcd/ssl/ca.pem --cert-file=/etc/etcd/ssl/etcd.pem --key-file=/etc/etcd/ssl/etcd-key.pem member list

1# etcdctl --ca-file=/etc/etcd/ssl/ca.pem --cert-file=/etc/etcd/ssl/etcd.pem --key-file=/etc/etcd/ssl/etcd-key.pem cluster-health

5.启动master节点的所有kube-apiserver服务:

1

2#systemctl start kube-apiserver

#systemctl status kube-apiserver

摘除etcd节点

向我们遇到的问题,需要将ceph节点的机器换成本地sata盘的机器,就需要先将部署在ceph上的etcd实例从集群中先摘除掉,然后在增加新的etcd实例到集群中。

1.查看etcd集群member信息

1#etcdctl --ca-file=/etc/etcd/ssl/ca.pem --cert-file=/etc/etcd/ssl/etcd.pem --key-file=/etc/etcd/ssl/etcd-key.pem member list

2.根据member信息移除具体的etcd实例

1#etcdctl --ca-file=/etc/etcd/ssl/ca.pem --cert-file=/etc/etcd/ssl/etcd.pem --key-file=/etc/etcd/ssl/etcd-key.pem member remove

3.停止etcd集群中被移除的etcd实例

1

2#systemctl stop etcd

#yum remove -y etcd-xxxx

4.查看etcd实例是否从集群中被移除

1#etcdctl --ca-file=/etc/etcd/ssl/ca.pem --cert-file=/etc/etcd/ssl/etcd.pem --key-file=/etc/etcd/ssl/etcd-key.pem member list

新增etcd节点

在已经存在的etcd节点上执行如下命令,增加新的etcd节点到集群中。

1

2

3

4# etcdctl --ca-file=/etc/etcd/ssl/ca.pem --cert-file=/etc/etcd/ssl/etcd.pem --key-file=/etc/etcd/ssl/etcd-key.pem member add http://:2380

ETCD_NAME=etcd01

ETCD_INITIAL_CLUSTER="etcd01=http://ip1:2380,etcd02=http://ip2:2380,etcd03=http://ip3:2380,etcd04=http://ip4:2380,etcd05=http://ip5:2380"

ETCD_INITIAL_CLUSTER_STATE="existing"

注意:

etcd_name: etcd.conf配置文件中ETCD_NAME内容

etdc_node_address: etcd.conf配置文件中的ETCD_LISTEN_PEER_URLS内容

此时新的etcd节点已经被加到了现有的etcd集群。修改新增加的etcd节点的配置文件/etc/etcd/etcd.conf, 将ETCD_INITIAL_CLUSTER修改成上面输出的内容,并增加相关的配置。

启动新的etcd节点:

1#systemctl start etcd

并对已经存在的etcd节点的配置项ETCD_INITIAL_CLUSTER增加=http://:2380参数。并“同时”重启所有的etcd。

更新etcd节点1ETCDCTL_API=3 etcdctl member update http://:2380

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值