3.4.6. MongoDB 복제
데이터베이스 이미지에 대한 클러스터링을 활성화하기 위한 구성은 예제로 제공되며 프로덕션용이 아닙니다.
Red Hat은 StatefulSet를 사용하여 MongoDB 복제(클러스터링)에 대한 개념 증명 템플릿 을 제공합니다. GitHub에서 예제 템플릿 을 가져올 수 있습니다.
예를 들어 현재 프로젝트의 템플릿 라이브러리에 예제 템플릿을 업로드하려면 다음을 수행합니다.
$ oc create -f \ https://raw.githubusercontent.com/sclorg/mongodb-container/master/examples/petset/mongodb-petset-persistent.yaml
예제 템플릿은 영구 스토리지를 사용합니다. 이 템플릿을 사용하려면 클러스터에서 영구 볼륨을 사용할 수 있어야 합니다.
OpenShift Container Platform에서 비정상 Pod(containers)를 자동으로 재시작하면 이러한 멤버 중 하나 이상이 충돌하거나 실패하는 경우 복제본 세트 멤버를 재시작합니다.
복제본 세트 멤버가 다운되거나 다시 시작되는 동안 다음 시나리오 중 하나일 수 있습니다.
basic member가 다운된 경우:
이 경우 나머지 두 멤버가 새 primary를 선택합니다. 지금까지 읽기는 영향을 받지 않지만 쓰기가 실패합니다. 성공적인 선택을 마친 후 일반적으로 쓰기 및 읽기 프로세스가 수행됩니다.
SECONDARY 멤버 중 한 명은 다음과 같습니다.
읽기 및 쓰기는 영향을 받지 않습니다.
oplogSize
구성 및 쓰기 비율에 따라 세 번째 멤버는 복제본 세트를 다시 참여하지 못하여 데이터베이스 복사본을 다시 동기화해야 할 수 있습니다.두 멤버가 모두 다운되었습니다.
3개 멤버의 복제본 세트 멤버가 다른 멤버에 도달할 수 없는 경우 nfsnobody 역할이 있으면 해당 멤버가 됩니다. 이 경우 reads는SECONDARY 멤버에 의해 제공될 수 있으며 쓰기가 실패할 수 있습니다. 하나 이상의 멤버가 백업되는 즉시 선택 작업에서 새 VDDK 멤버를 선택하고 정상적으로 읽고 쓰기 프로세스를 수행합니다.
모든 멤버가 다운됨:
이 경우 읽기 및 쓰기가 모두 실패합니다. 두 개 이상의 멤버가 백업되면, 선택에서 프로세스를 정상적으로 읽고 쓰는 후ary 및SECONDARY 멤버를 갖도록 복제본 세트를 다시 설정합니다.
이는 MongoDB에 권장되는 복제 전략입니다.
프로덕션 환경의 경우 가능한 한 멤버를 분리해야 합니다. 하나 이상의 노드 선택 기능을 사용하여 StatefulSet Pod를 다른 노드에 예약하고 독립적인 볼륨에서 지원하는 스토리지를 제공하는 것이 좋습니다.
3.4.6.1. 제한 사항
- MongoDB 3.2만 지원됩니다.
- 축소하는 경우 복제본 세트 구성을 수동으로 업데이트해야 합니다.
사용자 및 관리자 암호를 변경하는 작업은 수동 프로세스입니다. 필요한 것은 다음과 같습니다.
- StatefulSet 구성에서 환경 변수 값 업데이트
- 데이터베이스의 암호 변경 및
- 다른 모든 Pod를 재시작합니다.