[MongoDB] Read Preference & Write Concern

Melon Coder·2024년 8월 8일

MongoDB

목록 보기
1/1

Read Preference

ReplicaSet을 통해 primary와 secondary 노드가 구성되고 각 노드의 읽기 설정을 어떻게 할 것인가에 대한 지침이다.

Read Preference에는 총 5가지의 방식을 지원한다.

1. primary

모든 read와 write 명령이 Primary 노드에서만 처리된다.
따로 read preference 설정을 하지 않았으면 primary 설정으로 처리된다.
즉 모든 명령이 Primary에서만 처리되기 때문에 부하 분산 효과는 없으며, 오로지 백업 용도로만 secondary가 사용된다.

2. primary preferred

read write 명령이 모두 Primary에서 처리된다.
하지만 Primary가 unavailable 상태인 경우 read 명령을 secondary쪽으로 전달하여 처리한다.
즉 primary 모드보다는 service availability가 조금 개선된 형태라고 보면 된다.

3. secondary

모든 read 명령을 secondary로 보내 처리하는 형태이다.
primary의 경우 write 명령만 처리하고 모든 read 명령은 secondary에서 처리하기 때문에 부하 분산 효과는 있다.
하지만 primary와 secondary 데이터는 asynchronous 하기 때문에 주의해야 한다.

4. secondary preferred

모든 read 명령을 secondary에서 처리한다는 점에서 3번과 동일하지만,
secondary의 멤버들이 모두 unavailable 한 경우 read 명령을 primary에서 처리한다는 점에서 다르다.
따라서 secondary 모드 보다는 조금 더 개선된 형태이다.

5. nearest

read 명령의 경우 primary/secondary 상관없이 network latency가 가장 적은 인스턴스로 보내 처리하는 방식이다.
write 명령은 다른 모드와 동일하게 primary에서 처리한다.
network latency는 maxStalenessSeconds의 설정 값을 확인하여 예상 지연값보다 해당 값이 큰 노드를 제외하고 나머지 노드 중 random 하게 지정하게 read 명령을 처리하게 된다.


Write Concern

MongoDB가 Client의 요청으로 데이터를 기록할 때, 해당 요청에 대한 Response를 어느 시점에 주느냐에 대한 동작 방식을 지칭함.

1. w option

w 를 설정하게 되면, ReplicaSet 에 속한 멤버 중 지정된 수 만큼의 멤버에게 데이터 쓰기가 완료되었는지 확인함.
만약 Primary/Secondary 가 총 3대로 구성된 ReplicaSet일 경우, w = 3 으로 설정 시 3대의 멤버에 데이터 쓰기가 완료된 것을 확인하고 response를 반환한다.
보통 w=1이 default이며, 이 경우에는 Primary에만 데이터 쓰기가 완료되면 response 한다.

만약 w=majority로 설정할 경우, 멤버의 과반수 이상을 자동으로 설정하게 된다.
즉, 3대의 멤버가 ReplicaSet에 속해 있을 경우 w=2와 동일한 설정이다.

2. j option

해당 값을 설정하면, 데이터 쓰기 작업이 디스크상의 journal에 기록된 후 완료로 판단하는 옵션이다.
만약 ReplicaSet의 멤버가 3대인 경우 w=majority, j=true 로 설정시 Primary 1대, Secondary 1대, 총 2대의 멤버에서 디스크의 journal 까지 기록이 완료된 후 response 하게 된다.

3. wtimeout

해당 값을 설정하면, Primary에서 Secondary로 데이터 동기화 시 timeout 값을 설정하는 옵션이다. 만약 wtimeout의 limit을 넘어가게 되면 실제로 데이터가 primary에 기록되었다고 해도 error 를 리턴한다.

profile
create new things

0개의 댓글