MongoDB Ops Manager는 모든 엔터프라이즈 MongoDB 배포에 필요한 구성 요소입니다. MongoDB Ops Manager는 MongoDB 데이터베이스를 자동화하고 모니터링하며 백업을 수행합니다. MongoDBOpsManager 사용자 지정 리소스는 세 가지 구성 요소를 정의합니다.
MongoDB Ops Manager 애플리케이션 은 주요 MongoDB Ops Manager 구성 요소이자 프런트엔드 UI입니다.
애플리케이션 데이터베이스 — MongoDB Ops Manager의 지원 MongoDB 데이터베이스입니다.
백업 디먼 — 백업 및 복원 프로세스에서 Ops Manager 애플리케이션을 지원합니다.
Kubernetes 연산자는 MongoDBOpsManager 리소스의 사양을 managed합니다. 사양이 변경되면 Kubernetes Operator는 변경 사항의 유효성을 검사하고 Ops Manager 구성 요소를 배포하는 각 Kubernetes 클러스터에 적절한 업데이트를 적용합니다.
다음 다이어그램은 단일 Kubernetes 클러스터에서의 MongoDB Ops Manager 배포서버 아키텍처를 보여줍니다.
애플리케이션 데이터베이스
애플리케이션 데이터베이스의 경우, Kubernetes Operator는 MongoDB 복제본 세트를 StatefulSet로 배포합니다. 각 Pod에는 다음과 같은 컨테이너가 있습니다.
mongod — 데이터베이스 프로세스.
MongoDB Agent —
mongod수명 주기를 관리합니다. MongoDB Agent 버전을$AGENT_IMAGE환경 변수 또는 Helm 차트의agent.version를 사용하여 재정의할 수 있습니다.모니터링 에이전트 — 모니터링 데이터를 Ops Manager로 보냅니다. 이 버전은 하위 호환성을 위해 자동으로 선택되며 재정의할 수 없습니다.
Kubernetes Operator는 각 팘드에 마운트된 시크릿(<om_resource_name>-db-config)을 통해 에이전트에게 애플리케이션 데이터베이스 구성을 전달합니다.
Kubernetes는 노드 당 하나의 Pod를 만듭합니다. 각 MongoDB Agent는 mongod 을 시작하고 복제본 세트에 추가합니다. Kubernetes Operator는 각 Pod에 대해 PersistentVolumeClaims를 만들고 spec.applicationDatabase.podSpec.persistence을 사용하여 사용자 지정할 수 있습니다.
Kubernetes 연산자는 내부 연결을 위해 헤드레스 서비스를 만듭니다. 다중 클러스터 배포에서 Kubernetes 연산자는 개별 mongod 주소 지정을 위해 팝(<om_resource_name>-db-N-svc)당 하나의 서비스를 만듭기도 합니다.
애플리케이션 데이터베이스 토폴로지 고려사항
프라이머리를 선출하려면 애플리케이션 데이터베이스 복제본 세트의 노드 과반수가 사용가능해야 합니다. 가능하면 홀수의 노드 Kubernetes 클러스터를 사용하고 노드를 데이터 센터, 구역 또는 클러스터에 분산합니다.
다음의 분포 예시를 고려해 보세요.
5노드 애플리케이션 데이터베이스, 2개 클러스터: 클러스터 1 에 3 노드를 노하고 클러스터 2에 2 노드를 노합니다. 클러스터 2 가 실패하면 클러스터 1 에 과반수가 있습니다. 클러스터 1 가 실패하면 클러스터 2 에는 과반수가 없습니다.
5노드 애플리케이션 데이터베이스, 3클러스터: 클러스터 1 과 2에 각 2 노드를 배치하고 클러스터 3에 1 노드를 배치합니다. 단일 클러스터 장애로 인해 과반수가 남습니다.
7노드 애플리케이션 데이터베이스, 2개 클러스터: 4 을(를) 클러스터 1 에 노하고 3 를(를) 클러스터 2에 노하세요. 클러스터 2 의 손실만이 과반수를 유지합니다.
자세한 내용은 복제본 세트 배포 아키텍처 및 MongoDB Ops Manager 및 AppDB 리소스의 재해 복구를 참조하세요.
MongoDB Ops Manager 애플리케이션 리소스
애플리케이션 데이터베이스가 Running 상태에 도달하면 Kubernetes Operator가 MongoDB Ops Manager 애플리케이션 배포를 시작합니다.
Kubernetes 연산자는 각 노드 Kubernetes 클러스터에서 StatefulSet를 구성합니다.
Kubernetes는 MongoDB Ops Manager 복제본 단위로 팝을 하나 만듭니다.
각 Pod에는 하나의 MongoDB Ops Manager 애플리케이션 프로세스가 포함되어 있습니다.
단일 클러스터 배포서버가 Pod 장애에 대해 복원력을 가지도록 spec.replicas을 늘립니다. 다중 클러스터 배포서버가 데이터 센터 장애에 대해 복원력을 가지도록 spec.topology 을 MultiCluster 로 설정하고 Kubernetes 클러스터 전역에 인스턴스를 배포합니다.
백업 디먼 리소스
spec.backup.enabled 이 true이면 Kubernetes Operator는 Ops Manager 애플리케이션이 실행 중 상태에 도달한 후 백업 데몬을 시작합니다. Kubernetes Operator는 각 노드 클러스터에 대한 백업 데몬의 StatefulSet를 배포합니다. Kubernetes는 spec.backup.members에 지정된 수만큼의 백업 디먼 Pods를 생성합니다.
백업이 활성화되면 Kubernetes Operator는 각 노드 클러스터에서 백업 데몬의 헤드 데이터베이스에 대한 PersistentVolumeClaim을 생성합니다. spec.backup.headDB을 통해 헤드 데이터베이스를 구성합니다.
Kubernetes 연산자는 Ops Manager API를 호출하여 Ops Manager 애플리케이션의 백업 구성이 사용자 지정 리소스 정의와 일치하는지 확인합니다. 클러스터 별로 구성하지 않고 글로벌 spec.backup 수준에서 oplog 저장소, 블록 저장소 또는 S3 스냅샷 저장소를 구성합니다.
백업 작업을 암호화할 수도 있지만 동일한 Kubernetes 연산자 인스턴스가 MongoDBOpsManager 및 MongoDB 사용자 지정 리소스를 모두 관리하지 않는 경우 제한 이 적용됩니다.
Ops Manager 화해
다음 다이어그램은 Kubernetes Operator가 MongoDBOpsManager CRD에 대한 변경 사항을 조정하는 방법을 설명합니다.
조정은 다음 단계로 진행됩니다.
생성 또는 업데이트
<om_resource_name>-db-configSecret containing the configuration that the MongoDB Agent uses to start the 애플리케이션 데이터베이스 복제본 세트.생성 또는 업데이트
<om_resource_name>-db애플리케이션 데이터베이스의 StatefulSet. 이 StatefulSet에는 최소 3개의 Pod가 포함되어 있습니다. 각 Pod는 해당 Pod에mongod를 시작하는 하나의 MongoDB Agent를 실행합니다. 구성 Secret은 각 Pod에 마운트됩니다.다중 클러스터 배포에서 StatefulSet의 이름은
<om_resource_name>-db-<cluster-idx>(예:om-db-1)입니다.생성 또는 업데이트
<om_resource_name>MongoDB Ops Manager 애플리케이션의**StatefulSet**입니다. 각 복제본은 애플리케이션 데이터베이스에 연결합니다. 대부분의 변경은 롤링 업그레이드를 trigger합니다. 애플리케이션 데이터베이스에 대해 TLS를 활성화하면 연결 문자열이 변경되기 때문에 롤링 재시작도 트리거합니다.spec.backup을(를) 변경해도 롤링 업그레이드가 트리거되지 않습니다.다중 클러스터 배포에서 StatefulSet의 이름은
<om_resource_name>-<cluster-idx>(예:om-1)입니다.MongoDB Ops Manager API를 통해 관리자 사용자를 생성 하고 자격 증명을
<om_resource_name>-admin-key시크릿에 저장합니다. 이 단계는 초기 배포에서만 수행됩니다.모니터링 활성화 는 애플리케이션 데이터베이스 StatefulSet의 롤링 업그레이드를 수행하여 실행됩니다. 이는 초기 배포에서만 발생합니다.
spec.backup.enabled이true인 경우 백업 디먼을 배포합니다. StatefulSet의 이름은<om_resource_name>-backup-daemon(또는 다중 클러스터 배포에서는<om_resource_name>-backup-daemon-<cluster-idx>)입니다.Ops Manager API를 통해 백업을 구성하여 백업 구성이 사용자 지정 리소스 정의와 일치하도록 합니다.