问题
etcd集群中某个etcd出现故障,使用docker ps -a | grep etcd | grep -v POD查看etcd节点,发现它异常退出。
1 2 3
| $ docker logs -f <etcd-container-id> .... etcdserver : open wal error: wal: file not found
|
恢复步骤
大方向步骤:
一、将问题etcd节点从etcd集群剥离;
二、将恢复的新的etcd节点添加到etcd集群。
具体步骤如下:
- 查看etcd状态
1 2 3 4
| $ etcdctl2 cluster-health $ ## 获取问题节点的member ID $ etcdctl2 member remove <member ID> $ ## 将问题etcd服务从etcd集群中删除
|
- 停止问题节点上的etcd服务
1 2
| $ mkdir -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
|
参考文章
Adding etcd Hosts to existing cluster
`