더북(TheBook)

클러스터에서 느슨하게 결합된 서버(혹은 노드라고 한다)는 해당 서버가 관리하는 일정 범위의 데이터 정보를 공유하며, 주기적으로 자신이 동작 중이라는 메시지를 서로에게 전송한다. 후반부에 교환된 메시지는 고장 난 노드를 감지하는 데 사용된다. 한 노드가 고장 나면 클러스터에 있는 다른 노드는 고장 난 노드의 작업을 인계 받아 작업을 계속 처리할 수 있다.

일부 클러스터에는 마스터 노드가 있다. 예를 들어 Redis에서는 마스터 노드가 읽기와 쓰기 작업을 수용하고 복사나 복제 작업을 처리하며 읽기 작업 요청에 응답하는 슬레이브 노드에 데이터를 복사한다. 마스터 노드에 이상이 생기면 클러스터에 남아있는 노드들은 새로운 마스터 노드를 선출한다. 만약 한 슬레이브 노드에 이상이 생기면 클러스터에 있는 다른 노드들은 읽기 요청에 대한 응답을 계속 처리할 수 있다.

Riak처럼 마스터 없는 클러스터는 노드가 모든 작업을 수행하여 읽기와 쓰기 작업을 지원한다. 그중 한 노드가 실패하면 다른 노드가 실패한 노드를 대신해 읽기와 쓰기 작업을 처리할 것이다.

고장 난 노드가 쓰기 작업에 책임을 지고 있었으므로 고장 난 노드의 작업을 넘겨 받은 노드들은 고장 난 노드의 데이터 복사본을 갖고 있어야만 한다. 다른 여러 노드에 있는 데이터의 복사본을 여러 개 확보하는 것은 복제 서브시스템이 처리한다. 이에 대해서는 이 장 후반부에 있는 복제 부분에서 다룰 것이다.

마스터가 없는 클러스터의 각 노드는 일부 파티션 집합을 관리하는 책임도 지고 있는데, 파티션을 구성하는 방법 중 하나가 바로 링 구조다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.