OpenShift中etcd集羣的某個etcd服務文件損壞,導致節點故障,恢復過程

問題

etcd集羣中某個etcd出現故障,使用docker ps -a | grep etcd | grep -v POD查看etcd節點,發現它異常退出。

$ docker logs -f <etcd-container-id>
....
etcdserver : open wal error: wal: file not found 

恢復步驟

大方向步驟:
一、將問題etcd節點從etcd集羣剝離;
二、將恢復的新的etcd節點添加到etcd集羣。
具體步驟如下:

  1. 查看etcd狀態
$ etcdctl2 cluster-health
$ ## 獲取問題節點的member ID
$ etcdctl2 member remove  <member ID>
$ ## 將問題etcd服務從etcd集羣中刪除
  1. 停止問題節點上的etcd服務
$ mkdir -p /etc/origin/node/pods-stopped
$ mv /etc/origin/node/pods/* /etc/origin/node/pods-stopped/
  1. 刪除問題節點上的etcd數據
$ rm -rf /var/lib/etcd/*

4.更新ansible中的inventory hosts內容,設置new_etcd配置

[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__'"}

  1. 更新節點的node group配置
$ ansible-playbook playbooks/openshift-master/openshift_node_group.yml
  1. 執行etcd擴容腳本
$ ansible-playbook playbooks/openshift-etcd/scaleup.yml
  1. 執行完成擴容後,進行驗證。發現master-2的節點etcd是通過本地服務運行的。可執行以下命令配置etcd爲pod運行
$ systemctl stop etcd
$ systemctl disable etcd
$ cp etcd-backup/etcd.yaml /etc/origin/node/pods/etcd.yaml

etcd命令

etcd壓測腳本

$ etcdctl --write-out=table check perf

參考文章

Adding etcd Hosts to existing cluster
`

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章