MariaDB Galera Cluster -복구/운영
이전글에서 MariaDB Galera Cluster의 구성을 마쳤다면...
MariaDB/Galera Cluster의 장점(특징)
-. 모든 노드에서 데이터 변경 가능 (Active-Active 방식의 다중 마스터 구성 – 모든 노드에서 읽기/쓰기가 가능)
-. 노드 장애 시에도 데이터 유실 없이 높은 가용성 달성
-. 노드 사이의 트랜잭션 지원(클러스트 내 모든 노드 간 데이터 일관성을 보장)
-. 클러스터 내 노드 자동 컨트롤 (노드 장애 시 자동으로 해당 노드 제거, 추가 가능)
이전글에서 모든 노드에서 데이터 변경 가능 하다 는 장점을 확인했다.
이번에는
- 노드 장애 시에도 데이터 유실 없이 높은 가용성 달성
- 클러스터 내 노드 자동 컨트롤 (노드 장애 시 자동으로 해당 노드 제거, 추가 가능)
을 확인해 보도록 하자.
이제 Database 장애시, 데이터를 유실 없이 복구 할 수 있는지 확인하기 위해서 아래와 같이 단계를 밟을 것이다.
- node 3 Server을 강제로 shutdown
- node 3 Sever가 shutdown 되었을때, node1, 2에 데이터를 추가
- 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접속도 불가하다.
'IT 관련 > Database' 카테고리의 다른 글
[MySQL] 테이블 스키마 엑셀로 만들기 (0) | 2019.11.26 |
---|---|
[MySQL] general_ci vs unicode_ci 차이는? (2) | 2017.12.31 |
[MySQL] utf8 vs utf8mb4 차이는? (3) | 2017.12.31 |
MariaDB Galera Cluster- lock문제 (4) | 2017.12.30 |
MariaDB Galera Cluster-설치/셋팅 (1) | 2017.12.30 |
[MySQL] information_schema 활용하기 (0) | 2017.12.30 |
[MySQL] DB Connection close (0) | 2017.12.30 |
[MySQL] Join을 이용한 Update, Delete (0) | 2017.12.29 |
댓글