mariadb start error
kolla-ansible
을 통한 오픈스택 배포 이후 시스템 전체 재기동 등을 수행했을경우 mariadb
컨테이너가 정상적으로 올라오지 않는 경우가 있다.
2021-09-07 19:20:10 0 [ERROR] WSREP: failed to open gcomm backend connection: 110: failed to reach primary view: 110 (Connection timed out) at gcomm/src/pc.cpp:connect():160 2021-09-07 19:20:10 0 [ERROR] WSREP: gcs/src/gcs_core.cpp:gcs_core_open():209: Failed to open backend connection: -110 (Connection timed out) 2021-09-07 19:20:10 0 [ERROR] WSREP: gcs/src/gcs.cpp:gcs_open():1475: Failed to open channel 'openstack' at 'gcomm://10.0.0.21:4567,10.0.0.22:4567,10.0.0.23:4567': -110 (Connection timed out) 2021-09-07 19:20:10 0 [ERROR] WSREP: gcs connect failed: Connection timed out 2021-09-07 19:20:10 0 [ERROR] WSREP: wsrep::connect(gcomm://10.0.0.21:4567,10.0.0.22:4567,10.0.0.23:4567) failed: 7 2021-09-07 19:20:10 0 [ERROR] Aborting
controller
의 /var/log/kolla/mariadb/mariadb.log
내용에 위와같은 메세지가 출력된다.
이것은 mariadb gallera cluster
가 정상적으로 종료되지 않고 기동되는경우 발생하는 오류 메세지이다. 관련 키워드는 wsrep-new-cluster
로 검색해도 알수가 있다.
kolla-ansible
로 배포한 오픈스택 플랫폼에서는 아래 방법으로 복구가 가능하다.
- 먼저 모든 컨트롤러 노드에서
mariadb
컨테이너를 종료한다.
$ docker stop mariadb
- 이후
kolla-ansible
스크립트를 사용하여 gallera cluster를 복구한다.
$ kolla-ansible -i inventory/<clustername> mariadb_recovery
Script
위 내용을 스크립트로 작성해두었다.
#!/bin/bash ############## # recovery 시작하기 전에 control1~3 에서 mariadb container를 종료하여야 한다. # docker stop mariadb echo "#################################################################################" echo "###### Mariadb Recovery 전에 controller에서 mariadb container를 종료하십시오." echo "###### mariadb container MUST STOP on all contoller node before run this script." echo "command: docker stop mariadb" echo "" echo "진행하시겠습니까?" echo "Do you wish to run MariaDB Recovery?" select yn in "Yes" "No"; do case $yn in Yes ) cd ~; echo 'stop control1 mariadb container...'; ansible -m shell -a 'docker stop mariadb' -i multinode control; if [ $? -eq 0 ]; then echo "mariadb stop successfully" kolla-ansible -i multinode mariadb_recovery; else echo "mariadb stop failed" fi break;; No ) exit;; * ) exit;; esac done
최악의 경우 이 방법으로도 복구가 되지 않는다면 아래 참조링크의 내용으로 복구하면 된다.
참조링크
로그인하면 댓글을 남길 수 있습니다.