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
위 내용을 스크립트로 작성해두었다.
#!/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
최악의 경우 이 방법으로도 복구가 되지 않는다면 아래 참조링크의 내용으로 복구하면 된다.