본문 바로가기

카테고리 없음

MariaDB 5.5 Galera Cluster Startup and Shutdown v1.0

MariaDB 5.5 Galera Cluster Startup and Shutdown v1.0

 

Date

Ver

Etc.

13.09.05

1.0

 

 

 

 

 

 

 

 

 

1.    Galera Cluste

이 문서에서는 Galera Cluster Startup Shutdown 절차에 대해 다루었다.

 

2.    Environments

n  3 node

n  wsrep_cluster_address

a.     1번노드 (172.18.174.161) : gcomm://172.18.174.162

b.     2번노드 (172.18.174.162) : gcomm://172.18.174.161

c.     3번노드 (172.18.174.160) : gcomm://172.18.174.162

 



 

3.    Checking Clusters health

Cluster 이상 유무의 확인은 다음의 두 status 값을 확인하여 체크할 수 있다.

n  wsrep_cluster_status = Primary

n  wsrep_ready = on

 

status 에 이상이 있는 경우 위 status 값은 다음과 같이 조회된다.

n  wsrep_cluster_status = non-Primary

n  wsrep_ready = off

 

클러스터에 이상이 있는 경우 DB 의 사용이 제한된다.

l  USE <DATABASE> 사용불가

l  SELECT, DML 사용불가

 

아래 TEST 항목에서 말하는 Cluster 상태가 정상이다 함은 위에 언급한 두 status 의 값이 정상값임을 의미한다.

 

4.    TEST (OUTLINE)

비정상 종료는 (ABORT) 를 가정한다.

OS 상에서 mysql kill 하는 것으로 진행하였다.

 

a.     NODE #1 의 비정상 종료

b.     NODE #2 의 비정상 종료

c.     NODE #3 의 비정상 종료

d.     NODE #1, #2 의 비정상 종료

e.     NODE #1, #3 의 비정상 종료

f.      NODE #2, #3 의 비정상 종료

 

5.    TEST

a.     NODE #1 의 비정상 종료

b.     NODE #2 의 비정상 종료

c.     NODE #3 의 비정상 종료

a, b, c 의 경우에 대해 Cluster 에 이상이 없음을 확인하였다.

 

비정상 종료 된 노드에는 다음과 같이 alert log 가 기록되었다.

 

130905 14:25:54 mysqld_safe Number of processes running now: 0

130905 14:25:54 mysqld_safe WSREP: not restarting wsrep node automatically

130905 14:25:54 mysqld_safe mysqld from pid file /data/galera/data/xdevmari2.pid ended

 

특이한 것은 mysql_safe mysqld 를 재기동하지 않고 shutdown 된다는 것이다.

 

살아있는 다른 노드의 alert log 에는 nonlive peers: tcp://172.18.174.162:4567 라는 메시지가 확인되었다.

위의 D 클래스는 죽어있는 노드의 IP 값이 나온다.

 

이후 죽어있는 노드를 다시 Startup 하면 클러스터에 정상적으로 복귀한다.

 

d.     NODE #1, #2 의 비정상 종료

e.     NODE #1, #3 의 비정상 종료

f.      NODE #2, #3 의 비정상 종료

 

3개 구성의 클러스터에서 2개의 노드가 비정상 종료가 되면 살아있는 한 노드는 서비스가 불가한 비정상 상태가 된다.

이 경우에 이르면 Restart 과정을 밟아야 한다.

 

비정상 상황의 살아있는 유일한 노드의 alert log 에는 wsrep_cluster_address 에 명기된 주소에 계속 접속시도를 한다.

 

130904 16:09:31 [Note] WSREP: (92009f50-1529-11e3-0800-1fb9c9bb7be0, 'tcp://0.0.0.0:4567') reconnecting to b61b2ba6-152b-11e3-0800-4eafdc6f57f5 (tcp://172.18.174.162:4567), attempt 900

 

위 상황에서 일정 시간이 지나면 비정상 상태가 된다.

그 이후에도 reconnecting 을 계속 시도를 하는데 타겟팅이 되는 addr 의 노드를 startup 해도 클러스터 구성에 들어가지 못 한다.

 

130905 16:06:22 [ERROR] WSREP: gcs/src/gcs_core.c:gcs_core_open():195: Failed to open backend connection: -110 (Connection timed out)

130905 16:06:22 [ERROR] WSREP: gcs/src/gcs.c:gcs_open():1290: Failed to open channel 'gallera_test' at 'gcomm://172.18.174.161': -110 (Connection timed out)

130905 16:06:22 [ERROR] WSREP: gcs connect failed: Connection timed out

130905 16:06:22 [ERROR] WSREP: wsrep::connect() failed: 6

130905 16:06:22 [ERROR] Aborting

 

결론은 앞서 이야기 한 것 같이 Restart 를 해 줘야 한다.

wsrep_ready = off 인 상황에서는 달리 방법이 없다.

 

6.    Restarting Cluster

MariaDB 의 정상적인 종료 방법은 순서에 상관없이 Shutdown 하면 된다.

정상적인 종료라면 클러스터 상태에 영향을 끼치지 않는다.

 

STARTUP 의 경우에는 wsrep_cluster_address = gcomm://’ 으로 초기화 기동해야 한다.

STARTUP 이후 두 번째 노드는 wsrep_cluster_address 값이 첫 번째 노드를 가리키고 있는 대상을 startup 해야 한다.

그렇지 않으면 인스턴스가 기동되지 않는다.

 

세번째 까지 기동한 이후에는 첫 번째 wsrep_cluster_address 값을 초기화 값이 아닌 값으로 원복한다.

 

만약 초기화 값 상황에서 해당 노드를 restart 하게 되면 기존의 클러스터에 참여하는 것이 아니라 새로운 클러스터 구성으로 기동하게 된다.

 

Startup 의 최대 과제는 Donor 문제이다.

Cluster 의 최초 노드 기동을 제외하고 기동을 위해서는 이미 살아있는 노드에 대해 wsrep_cluster_node 에 지정이 되어야 한다.

그리고 이 노드는 Donor 가 된다.

 

Donor node 의 최대 문제는 DML 이 불가능하다는 것이다.

3개 노드 구성의 경우 한 노드에 문제가 있어 구성에서 빠졌다가 다시 넣는 경우 살아있는 두 노드 중에 한 노드는 가용 불가능한 상황이 된다.

 

나머지 한 노드가 정상적으로 서비스를 할 수 있다는 것인데 여기서 문제가 있다.

노드를 L4 로 묶어 하나의 IP 로 서비스를 한다고 가정하면 스위치 입장에서는 두 개 노드가 다 가용 가능한 상황으로 판단할 것이다.

하지만 실제로는 Donor 역할을 수행하는 노드는 일시적으로 가용 가능하지 않다는 것이다.

 

7.    Future Challenges

A.     wsrep_cluster_address 구성방법에 대한 고민

B.     Donor node 로 인한 서비스 장애상황 회피 방안

C.     mysqld 비정상 종료에 대해 자동으로 startup 이 가능한지