IT 관련/Database

MariaDB Galera Cluster - 복구/운영

nullzone 2017. 12. 30.
반응형


MariaDB Galera Cluster -복구/운영



이전글에서 MariaDB Galera Cluster의 구성을 마쳤다면...

MariaDB/Galera Cluster의 장점(특징)

-. 모든 노드에서 데이터 변경 가능 (Active-Active 방식의 다중 마스터 구성 – 모든 노드에서 읽기/쓰기가 가능)

-. 노드 장애 시에도 데이터 유실 없이 높은 가용성 달성

-. 노드 사이의 트랜잭션 지원(클러스트 내 모든 노드 간 데이터 일관성을 보장)

-. 클러스터 내 노드 자동 컨트롤 (노드 장애 시 자동으로 해당 노드 제거, 추가 가능)


이전글에서 모든 노드에서 데이터 변경 가능 하다 는 장점을 확인했다. 


이번에는 

  • 노드 장애 시에도 데이터 유실 없이 높은 가용성 달성
  •  클러스터 내 노드 자동 컨트롤 (노드 장애 시 자동으로 해당 노드 제거, 추가 가능)

을 확인해 보도록 하자. 


이제 Database 장애시, 데이터를 유실 없이 복구 할 수 있는지 확인하기 위해서 아래와 같이 단계를 밟을 것이다. 

  1. node 3 Server을 강제로 shutdown 
  2. node 3 Sever가 shutdown 되었을때, node1, 2에 데이터를 추가
  3. node 3  복구(Start) 하였을때 node 1, 2, 3 server 에 데이터의 유실없이 기동하는지 확인해보자.  


[DB3] 에서 서버를 강제로 shutdown 시킨다.

[root@192.168.0.3]$  service mysql stop
Shutting down MySQL....                                    [  OK  ]
[root@192.168.0.3]$ 



node3 의 DB3 에 문제가 생기면 DB1, 2에서 incoming_addresses에서 node3(192.168.0.3) 이 사라지는걸 확인 할수 있다. (시간이 약간 걸린다)

[DB1]

SHOW STATUS LIKE 'wsrep_incoming_addresses'
Variable_name             Value                                  
------------------------  ---------------------------------------
wsrep_incoming_addresses  192.168.0.1:3306,192.168.0.2:3306  

[DB2]

SHOW STATUS LIKE 'wsrep_incoming_addresses'

Variable_name             Value                                  
------------------------  ---------------------------------------
wsrep_incoming_addresses  192.168.0.1:3306,192.168.0.2:3306    


이제 node3(DB3)이 없는 상태에서 node1 혹은 node2에 데이터를 생성해 보자. 

테스트에서는 node2(DB2)에 데이터를 삽입하고, 이를 확인하자. 

[DB2]

 SELECT * FROM cluster_test;
    id  test               
------  -------------------
     2  node1 insert data  
     6  node2 insert data  


 INSERT INTO cluster_test(test)VALUES(CONCAT('node2', NOW())); 
 INSERT INTO cluster_test(test)VALUES(CONCAT('node2', NOW())); 
 INSERT INTO cluster_test(test)VALUES(CONCAT('node2', NOW())); 

 SELECT * FROM cluster_test;
    id  test                      
------  --------------------------
     2  node1 insert data         
     6  node2 insert data         
    12  node22017-12-31 12:07:50  
    14  node22017-12-31 12:07:54  
    16  node22017-12-31 12:07:57  


이제 node3(DB3)이 없는 상태에서 node1, node2는 데이터가 잘 싱크되는지 확인한다. 

[DB1]


SELECT * FROM cluster_test;
    id  test                      
------  --------------------------
     2  node1 insert data         
     6  node2 insert data         
    12  node22017-12-31 12:07:50  
    14  node22017-12-31 12:07:54  
    16  node22017-12-31 12:07:57  


최종적으로  node3(DB3)이 없는 상태에서 node1, node2는 데이터가 잘 싱크되었다.


[DB3]  서버를 start 하여 cluster에 참여 시킨다.

이미 3개의 서버에는 node3(192.168.0.3)이  cluster에 설정되어 있으므로 별도의 추가 설정은 필요 없다. 


[root@192.168.0.3]$  service mysql start
 * Starting MariaDB database server mysqld...                              [ OK ] 
[root@192.168.0.3]$ 


실제 node3을 cluster에 추가 하면 Galera가 데이터 싱크를 하는 메세지가 잠시 보일 것이다.

잠시후,  이제 node3(DB3)에  node1, node2와  데이터가 잘 싱크되는지 확인한다. 

[DB3]

 SELECT * FROM cluster_test;
    id  test                      
------  --------------------------
     2  node1 insert data         
     6  node2 insert data         
    12  node22017-12-31 12:07:50  
    14  node22017-12-31 12:07:54  
    16  node22017-12-31 12:07:57  


이제 node3(DB3)도 node1, node2와 데이터가 잘 싱크되어 있다.  


실제로 데이터 3개만을 축가 한 것이라 실전에서 사용 할만큼 충분한 테스트는 아니였고, 단지 Galera Cluster의 동작 여부를 확인한 정도이다.


실무에서 주의점

실무에서 DB Server 에 문제가 생기면 이를 처리 하는데 일정시간이 걸린다. 이 글에서 설명한 것처럼 몇 분만에 처리 할수 있는 상황은 거의 없다. 

  • 복구 하고자 하는 node (여기서는 node3) 의 data에 절대로 수정을 가하지 말아야 한다. 

  • 복구까지 시간이 꽤 흘렀다면 그 동안 node1, node2의 데이터 변경이 많았다면 node3를 cluster에 직접 참여 시키기 전에 node1혹은 node2 의 데이터를 백업 받아 복구 하고 참여 시키는 것이 좋다. 

  • 복구 되어서 cluster에 재 참여 할때 데이터 싱크 작업시에는 DB접속도 불가하다. 





반응형

댓글