Пересоздание проблемной ноды кластера etcd

Thank you for reading this post, don't forget to subscribe!

В опре­де­лен­ных слу­ча­ях может воз­ник­нуть ситу­а­ция когда одна из нод кла­сте­ра etcd не может под­клю­чить­ся к кла­сте­ру и ее не видят все осталь­ные ноды. Напри­мер, такое может слу­чить­ся в кла­сте­ре ВМ VirtualBox после вос­ста­нов­ле­ния вир­ту­ал­ки из снап­шо­та. Обыч­но, дан­ная про­бле­ма реша­ет­ся пере­за­пус­ком сер­ви­са etcd или рестар­том ОС на ВМ. Но если это не помо­га­ет, то мож­но пере­со­здать эту ноду кла­сте­ра etcd.

Для того что­бы пере­со­здать и пере­под­клю­чить ноду кла­сте­ра etcd, необ­хо­ди­мо выпол­нить сле­ду­ю­щие шаги:

Оста­нав­ли­ва­ем (если запу­ще­на) служ­бу etcd на про­блем­ной ноде:

$ systemctl stop etcd

На живой ноде кла­сте­ра про­ве­ря­ем состо­я­ние кла­сте­ра (видим нашу про­блем­ную ноду, и что кла­стер в ста­ту­се degraded):

$ etcdctl cluster-health
Выво­дим спи­сок нод с их дан­ны­ми под­клю­че­ния и ID

$ etcdctl member list
Уда­ля­ем про­блем­ную ноду из кла­сте­ра по ее ID (в дан­ном кон­крет­ном слу­чае: 75f844b9fc38df9f):

$ etcdctl member remove 75f844b9fc38df9f
Теперь доба­вим ноду обрат­но в кла­стер, ука­зав ее имя и URL для под­клю­че­ния. Нода будет добав­ле­на и полу­чит в кла­сте­ре новый ID (в дан­ном слу­чае: 71fbb082f6f4f045):

$ etcdctl member add postgres1 http://192.168.56.125:2380
Смот­рим спи­сок нод и видим что нода добавлена:

$ etcdctl member list
На про­блем­ной ноде редак­ти­ру­ем кон­фиг /etc/etcd/etcd.conf, про­пи­сы­вая в настрой­ке ETCD_INITIAL_CLUSTER_STATE «existing» вме­сто «new»:

ETCD_INITIAL_CLUSTER_STATE="existing"
В том же кон­фи­ге /etc/etcd/etcd.conf смот­рим где нода хра­нит дан­ные ectd в пара­мет­ре ETCD_DATA_DIR (в нашем слу­чае ETCD_DATA_DIR=»/var/lib/etcd»), пере­хо­дим в эту пап­ку и уда­ля­ем из ее под­ди­рек­то­рии member все содержимое:

$ rm -rf /var/lib/etcd/member/*
Запус­ка­ем на про­блем­ной ноде служ­бу etcd. Нода долж­на под­клю­чить­ся к суще­ству­ю­ще­му кла­сте­ру, полу­чить выдан­ный ей кла­сте­ром ID (в дан­ном слу­чае: 71fbb082f6f4f045) и син­хро­ни­зи­ро­вать­ся. Все это мож­но про­ве­рить выполнив:

$ systemctl status etcd
Теперь про­ве­ря­ем что наши ноды в кла­сте­ре и что кла­стер теперь в нор­маль­ном состоянии:

$ etcdctl member list
$ etcdctl cluster-health
При жела­нии, на быв­шей про­блем­ной ноде мож­но в кон­фи­ге /etc/etcd/etcd.conf обрат­но вер­нуть пара­метр в зна­че­ние ETCD_INITIAL_CLUSTER_STATE=»new» и после пере­за­пу­стить etcd:

$ systemctl restart etcd
На этом всё, мы уда­ли­ли и зано­во под­клю­чи­ли ноду к кла­сте­ру «с чисто­го листа».