galera_cluster_deadlock_split_brain_문제

Galera Cluster DeadLock, Split Brain 문제

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

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

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

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

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

  • PK가 없으면 무족건적으로 DeadLock 이건 고민없이 모든 테이블에 PK를 적용하자.
  • 노드의 수가 증가하여 부하가 커져 트랜잭션 응당 시간 증가되면 충돌 및 교착 상태 발생 확률이 높아져서 DeadLock이 발생할 확률이 매우 높아진다.
  • DB에 데이터 등록, 삭제 등 모든 것이 멈춘다.
  • 기다림의 시간과 싸움을하다보면 언젠가 DeadLock이 풀려있을 것이다.(오래걸림)
  • 서버를 강제로 off시켜 재기동 시킨다.
  • kill 명령어로 프로세스를 죽인다…
  • 방법은 독자 판단에….
  • 일반적으로 Cluster로 구성된 시스템에 node간 네트워의 일시적으로 단절현상이 발생했을때 나타나는 현상
  • 각 node들이 각자 자기 자신이 Primary라고 인식되는 현상
  • 데이터 동기화에 문제가 발생할 수 있음
  • 따라서, Galera에서는 3개이상의 node로 구성을 권장하고 있다. 2개의 node로 운영할 경우 split brain현상이 발생할 수 있기 때문이다.
  • Cluster를 구성하는 node간 통신이 단절되면 Cluster가 쪼개지면서 각 node가 자기자신이 유일한 Cluster로 생각하고 충돌을 야기한다.
로그인하면 댓글을 남길 수 있습니다.
  • galera_cluster_deadlock_split_brain_문제.txt
  • 마지막으로 수정됨: 2021/01/27 02:15
  • 저자 koov