33. MongoDB Replication Part 3. - Usage of Slaves / Read Scaling

MongoDB의 slave 노드의 역할을 정리하면 다음과 같습니다:

  • 데이터 유실 또는 master 노드의 다운타임에서의 패일오버 메커니즘 기능 수행
  • 백업을 위한 소스
  • 읽기 스케일아웃
  • 데이터 처리 수행

이 중 "읽기 스케일아웃"은 데이터를 읽을 때 PRIMARY(master)에 집중되는 부담을 SECONDARY(slave)에 분산하는 것이 목적입니다. 이 때 주의할 것은, MongoDB에서 데이터 복제는 비동기(Asynchronous)로 진행된다는 것입니다.

쓰기에 대한 연산 부담의 분산은 향후 자동샤딩(Autosharding) 부분에서 집중적으로 다루도록 하겠습니다.

읽기 스케일아웃 방법은 다음과 같습니다.

우선 Replica Set이 설정되어 있다고 가정합니다. Replica Set을 설정하는 방법은 32. MongoDB Replication Part 2. - Replica Sets를 참고하기 바랍니다.

PRIMARY 노드의 mongo 쉘에서 test db에 다음과 같이 도큐먼트가 입력되어 있다고 하면:

rs0:PRIMARY> db.tmp.find().pretty()
{
    "_id" : ObjectId("5336c12e07a320abf7b320e3"),
    "username" : "gchoi",
    "pwd" : 1234
}

rs.slaveOk() 메써드를 통해 SECONDARY 노드에서 읽기를 허용합니다:

rs0:SECONDARY> rs.slaveOk()
rs0:SECONDARY> use test
switched to db test
rs0:SECONDARY> db.tmp.find().pretty()
{
    "_id" : ObjectId("5336c12e07a320abf7b320e3"),
    "username" : "gchoi",
    "pwd" : 1234
}

위와 같이 SECONDARY 노드에서도 읽기가 가능해졌습니다.