일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- AWS
- S3
- 도커
- MongoEngine
- VPC
- docker
- 리워드앱
- 토스카드
- DocumentDB
- docker network
- network
- built-in
- 앱테크
- python3
- clone
- aws codecommit
- 후기
- Container
- 실사용
- mininet
- 리뷰
- namespace
- 재테크
- codecommit
- MongoDB
- Python
- 하나머니
- 커피머니불리기
- Linux
- 포인트앱
- Today
- Total
ㅍㅍㅋㄷ
AWS DocumentDB(MongoDB) Replication 과 MongoEngine 설정 (Read Preference) 본문
AWS DocumentDB(MongoDB) Replication 과 MongoEngine 설정 (Read Preference)
클쏭 2019. 5. 25. 18:04
DocumentDB 의 Replication
AWS DocumentDB 를 이용해 개발을 진행하면서,
DocumentDB의 Replication 동작 방식을 테스트하며 몇가지 정리해 본다.
DocumentDB의 Replication 은 기존 MongoDB의 Replica Set 과 동일한 구조를 갖고 있다.
따라서 기존 MongoDB 와 동일한 방식으로 이용 가능하고, SDK 또한 동일하게 사용 가능하다.
이번 포스팅에서는 AWS DocumentDB 사용시 Python SDK인 MongoEngine 에 대한 설정 방법과
Read preference 설정 방법을 알아보려 한다.
Read Preference 란 무엇인가
Read Preference 란 MongoDB의 Replica Set 설정시 Primary 와 Seconday 노드에 대한 작업 처리 분산에 대한 설정이다.
먼저 Replica Set 구조를 살펴보면, MySQL의 Replication 과 동일한 방식이다.
모든 명령은 기본적으로 Primary 에서 처리하며 Secondary 는 Primary 에 기록된 데이터를 Sync 하며 유지하게 된다.
하지만, 이러한 구조는 Client 가 Primary 하고만 데이터를 주고 받기 때문에 MongoDB 서버로 총 3대를 사용함에도 작업 분산 효과를 누리지 못하며, 오로지 Secondary 노드는 데이터 백업 용도로만 사용할 수 밖에 없다.
이러한 비효율적인 구조를 조금이나마 개선할 수 있는 방법으로, Read 작업에 대해서는 Secondary 에서 처리하도록 설정이 가능하다.
이것을 Read preference 라고 한다.
Read preference는 5가지 방식을 지원하는데,
primary / primary preferred / secondary / secondary prefferred / nearest 가 있다.
각각에 대한 자세한 설명은 아래와 같다.
1) primary
모든 read 와 write 명령이 Primary 노드에서만 처리된다.
따로 read preference 설정을 하지 않았다면, primary 설정으로 처리된다.
모든 명령이 Primary 에서만 처리하기 때문에 부하 분산 효과는 없으며, secondary 는 단지 백업 용도로 사용된다.
Multi-Document transaction 이 포함된 명령이 있는 경우는 primary 모드로만 사용 가능하다.
2) primaryPreferred
read 와 write 명령이 모두 Primary 에서 처리되는 점에서 1번의 primary 모드와 동일하다.
하지만, primary 가 unavailable 상태인 경우, read 명령을 secondary 쪽으로 전달하여 처리한다.
primary 가 장애 날 경우, write 명령은 동작하지 않지만 read 명령은 secondary 에서 동작 할 것이므로 primary 모드 보다는 service availability 가 조금 더 개선된 형태라고 보면 된다.
3) secondary
모든 read 명령은 secondary 로 보내 처리하는 형태이다.
primary 의 경우 write 작업만 처리 하고 secondary 에서 모든 read 명령을 처리하므로 부하 분산 효과가 있다.
하지만, primary 와 secondary 의 데이터는 asynchronous 하기 때문에 사용상 주의해야 한다.
4) secondaryPreferred
모든 read 명령은 secondary 로 보내 처리되는 점은 3번의 secondary 모드와 동일하다.
하지만, secondary 멤버들이 모두 unvailable 한 경우 read 명령을 primary 로 넘겨 처리하게 된다.
secondary 모드 보다는 service availability 가 조금 더 개선된 형태라고 보면 된다.
5) nearest
read 명령의 경우 primary / secondary 상관없이 network latency 가 가장 적은 인스턴스로 보내 처리하는 방식이다.
write 명령은 다른 모드와 동일하게 primary 에서 처리한다.
network latency 는 maxStalenessSeconds 의 설정 값을 확인하여 예상 지연값보다 해당 값이 큰 노드를 제외하고 나머지 노드 중 random 하게 지정하게 read 명령을 처리하게 된다.
MongoEngine 에서 read preference 설정
아래 예제는 MongoEngine SDK 사용시, read preference 모드 중 secondary preferred 로 설정한 예이다.
DocumentDB 의 경우 replicaset 의 이름이 'rs0' 로 설정된다.
# Add import read_preferences module
from mongoengine import *
from pymongo.read_preferences import ReadPreference
ssl_config = {
'ssl': True,
'ssl_ca_certs': 'rds-combined-ca-bundle.pem'
}
connect(
'test',
username='',
password='',
host='',
port=27017,
replicaset='rs0', # Set replicatset
read_preference=ReadPreference.SECONDARY_PREFERRED, # Set read_preference options
**ssl_config
)
read_preference 로 설정가능한 FLAG는 아래와 같다.
PRIMARY
PRIMARY_PREFERRED
SECONDARY
SECONDARY_PREFERRED
NEAREST
Reference
- https://docs.mongodb.com/manual/reference/read-preference/
'IT > mongoDB' 카테고리의 다른 글
AWS DocumentDB Failover 동작 방식에 대한 이해 (0) | 2019.05.29 |
---|---|
AWS DocumentDB(MongoDB) 의 Replication 구조 - Write Concern 에 대하여 (0) | 2019.05.27 |
AWS DocumentDB(MongoDB) 를 python 을 활용해 접속해 보자 (TLS 암호화) (0) | 2019.05.24 |