OpenShift中etcd集群的某个etcd服务文件损坏,导致节点故障,恢复过程
问题
etcd集群中某个etcd出现故障,使用docker ps -a | grep etcd | grep -v POD
查看etcd节点,发现它异常退出。
1 | $ docker logs -f <etcd-container-id> |
恢复步骤
大方向步骤:
一、将问题etcd节点从etcd集群剥离;
二、将恢复的新的etcd节点添加到etcd集群。
具体步骤如下:
查看etcd状态
1
2
3
4$ etcdctl2 cluster-health
$ ## 获取问题节点的member ID
$ etcdctl2 member remove <member ID>
$ ## 将问题etcd服务从etcd集群中删除停止问题节点上的etcd服务
1
2mkdir -p /etc/origin/node/pods-stopped
mv /etc/origin/node/pods/* /etc/origin/node/pods-stopped/删除问题节点上的etcd数据
1
rm -rf /var/lib/etcd/*
4.更新ansible中的inventory hosts内容,设置new_etcd配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26[OSEv3:children]
masters
etcd
nodes
new_etcd
[OSEv3:vars]
openshift_is_atomic=false
[masters]
master-1
master-2
master-3
[nodes]
master-1
master-2
master-3
...
[etcd]
master-1
#master-2
master-3
[new_etcd]
master-2需要注意:
将问题节点从masters/nodes中注释掉,否则执行etcd扩容会报如下错误。TASK [Run variable sanity checks]
fatal: [master-1]: FAILED! => {"msg": "last_checked_host: master-2, last_checked_var: ansible_python;'NoneType' object has no attribute '__getitem__'"}
更新节点的node group配置
1
ansible-playbook playbooks/openshift-master/openshift_node_group.yml
执行etcd扩容脚本
1
ansible-playbook playbooks/openshift-etcd/scaleup.yml
执行完成扩容后,进行验证。
注意
:如果在hosts
中将masters对应的节点注释掉,在etcd安装时会使用本地服务的方式安装运行,这个适合独立的节点部署etcd。
etcd命令
etcd压测脚本
1 | etcdctl --write-out=table check perf |
参考文章
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Michael Blog!
评论