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 노드에서도 읽기가 가능해졌습니다.