본문 바로가기
Database/MariaDB Galera Cluster

MariaDB Galera Cluster - DeadLock, Split Brain 문제

by 시스파고 2020. 6. 9.

 

Galera Cluster를 사용할 때 Deadlock 문제는 심각한 장애(?)를 나타낸다. 구축하여 사용 중인 실사레에서 발생을 했다. 전자상거래 App에서 물건을 등록하고 드랍시키는 과정에서 DB에 Insert되면서 각 node간에 맺어진 Cluster에 저장된 정보를 나머지 서버에 rsync하여 무결성을 맞춰야한다..... 그런데 이게 빠른속도로 이루어지는것이 아니라서 부하가 크다면 DeadLock이 발생할 수 있다....

 

우리가 Galera Cluster를 사용하는 이유는 모든 node를 Write/Read하여 부하분산도하고 데이터의 일관성을 유지하기 위해서 사용하는게 제일큰 이유이지 않을까한다. 그런데 Galera Cluster에서 DeadLock이라는 안전장치가 우리에게는 매우 큰 걸림돌 역할을 한다.

 

따라서, 많은 해결방안을 찾아 시도해보았지만 DeadLock의 문제를 해결할 방법은 많지 않았다.

 

0. DeadLock 해결방안

1개의 node를 Write 전용으로 사용하고 나머지 node-n개는 Read 전용으로 구성하면 이상없이 DeadLock을 해결할 수 있다.... 만약 2개 이상의 node에서 Write를 진행하면 또 문제가 생기니 꼭 1대만 Write로 해야한다.

 

이게 무슨해결방안이냐? 생각할 수 있지만.... 어쩔 수 없다고 본다.. 이럴거면 기존의 Replication 방법으로 DB을 구축하는게 더 나을 수 있다고 생각을 한다.

 

1. Galera Cluster 사용 시 DeadLock 고려사항

1.1 Primary Key가 모든 테이블에 있어야 한다.

- PK가 없으면 무족건적으로 DeadLock 이건 고민없이 모든 테이블에 PK를 적용하자.

1.2 부하가 큰 서비스에는 사용을 고려해야한다.

- 노드의 수가 증가하여 부하가 커져 트랜잭션 응당 시간 증가되면 충돌 및 교착 상태 발생 확률이 높아져서 DeadLock이 발생할 확률이 매우 높아진다.

1.3 Lock이 걸리면?

- DB에 데이터 등록, 삭제 등 모든 것이 멈춘다.

- 기다림의 시간과 싸움을하다보면 언젠가 DeadLock이 풀려있을 것이다.(오래걸림)

- 서버를 강제로 off시켜 재기동 시킨다.

- kill 명령어로 프로세스를 죽인다... 

- 방법은 독자 판단에....

1.4 update, mysqldump 등 SQL문 사용 시 주의하자.. 너무많아서 어디서 DeadLock 걸릴지 추릴 수가 없다

 

3. Galera Cluster Split Brain

- 일반적으로 Cluster로 구성된 시스템에 node간 네트워의 일시적으로 단절현상이 발생했을때 나타나는 현상

- 각 node들이 각자 자기 자신이 Primary라고 인식되는 현상

- 데이터 동기화에 문제가 발생할 수 있음

- 따라서, Galera에서는 3개이상의 node로 구성을 권장하고 있다. 2개의 node로 운영할 경우 split brain현상이 발생할 수 있기 때문이다.

- Cluster를 구성하는 node간 통신이 단절되면 Cluster가 쪼개지면서 각 node가 자기자신이 유일한 Cluster로 생각하고 충돌을 야기한다.

댓글