AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.
Docs Menu

외부 애플리케이션 데이터베이스를 Ops Manager 로 반환

MongoDB Ops Manager 리소스를 통해 외부 애플리케이션 데이터베이스를 내부 관리로 전환할 수 있습니다. MongoDB Ops Manager 리소스가 기존 애플리케이션 데이터베이스 StatefulSet를 회수합니다. 그리고 당신은 이를 managed한 MongoDB 리소스를 삭제합니다. Kubernetes 연산자는 사용자 데이터를 이동하거나 다시 만들지 않으며 MongoDB Ops Manager Pod를 다시 시작하지 않습니다.

MongoDB Ops Manager 리소스는 외부 애플리케이션 데이터베이스로 시작합니다. 이 데이터베이스는 spec.role이 AppDB로 설정되고 <primary-om-name>-db로 이름 지정된 MongoDB 리소스이며, 애플리케이션 데이터베이스 StatefulSet의 소유자입니다. 마이그레이션은 다음과 같이 진행됩니다.

  1. MongoDB Ops Manager 리소스에서 spec.externalApplicationDatabaseRef를 제거하고 spec.applicationDatabase.를 추가합니다.

  2. Kubernetes Operator는 MongoDB 리소스 StatefulSet를 출시하다 하도록 요청합니다. MongoDB 리소스 Ops Manager 리소스 이를 회수할 때까지 기다리는 동안 Pending 단계를 보고합니다.

  3. Kubernetes 연산자는 StatefulSet을 회수하고 이를 내부 애플리케이션 데이터베이스로 관리합니다. 연결 문자열이 변경되지 않기 때문에 Ops Manager pod는 재시작되지 않습니다.

  4. 더 이상 아무것도 소유하지 않는 MongoDB 리소스 삭제 .

경고

Ops Manager 리소스 내부 애플리케이션 데이터베이스를 다시 관리한 후에만 MongoDB 리소스 삭제합니다. MongoDB 리소스 여전히 StatefulSet를 소유하고 있는 동안 삭제 하면 Kubernetes 애플리케이션 데이터베이스를 가비지 수집합니다. 해당 상태 에서 복구하려면 보존된 영구 볼륨 클레임에서 애플리케이션 데이터베이스를 다시 생성해야 하며, 이로 인해 다운타임이 발생하고 애플리케이션 데이터베이스 자격 증명 순환됩니다.

시작하기 전에 다음 작업을 완료하세요.

  • Kubernetes 연산자를 설치하고 kubectl. 자세한 내용은 Kubernetes로 설치를 참조하세요.

  • 프라이머리 MongoDB Ops Manager 리소스가 외부 애플리케이션 데이터베이스를 사용하는지 확인합니다. spec.externalApplicationDatabaseRef를 <primary-om-name>-db이라는 이름의 MongoDB 리소스로 설정하고, spec.applicationDatabase는 설정하지 않으며, status.applicationDatabase.phase 에서는 Disabled을 보고합니다.

  • MongoDB 리소스가 Running 단계에 있고 애플리케이션 데이터베이스 StatefulSet을 소유하는지 확인합니다.

마이그레이션하기 전에 다음 고려 사항을 검토합니다.

  • 애플리케이션 데이터베이스가 이미 실행 중인 버전으로 spec.applicationDatabase.version를 설정하세요. 동일한 버전을 재사용하면 동일한 바이너리와 데이터가 그대로 유지됩니다. 다른 버전은 핸드오버와 동시에 애플리케이션 데이터베이스 업그레이드를 시작합니다.

  • Kubernetes Operator는 외부 애플리케이션 데이터베이스용으로 생성한 Ops Manager 프로젝트 삭제 하지 않습니다. 해당 프로젝트 제거하면 애플리케이션 데이터베이스의 기록 지표 읽을 수 없게 되므로 프로젝트를 정리하는 것은 사용자의 결정입니다.

1
export K8S_CTX="<your-kube-context>"
export MDB_NS="mongodb"
export PRIMARY_OM_NAME="primary-om"
export APPDB_NAME="${PRIMARY_OM_NAME}-db"
export APPDB_VERSION="8.0.5-ent"
2
  1. Ops Manager 리소스 외부 애플리케이션 데이터베이스를 참조하고 해당 애플리케이션 데이터베이스를 Disabled(으)로 보고하는지 확인합니다.

    kubectl get om "${PRIMARY_OM_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" \
    -o jsonpath='ref={.spec.externalApplicationDatabaseRef.name} appdb={.status.applicationDatabase.phase}{"\n"}'
  2. MongoDB 리소스 애플리케이션 데이터베이스 StatefulSet를 소유하고 있는지 확인합니다.

    kubectl get statefulset "${APPDB_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" \
    -o jsonpath='{range .metadata.ownerReferences[*]}{.kind}/{.name}{"\n"}{end}'

    이 명령은 MongoDB/${APPDB_NAME}을(를) 반환합니다.

3

이 패치는 spec.externalApplicationDatabaseRef를 제거하고 spec.applicationDatabase.를 추가합니다.

kubectl patch om "${PRIMARY_OM_NAME}" \
--context "${K8S_CTX}" -n "${MDB_NS}" \
--type merge \
-p "{\"spec\":{\"externalApplicationDatabaseRef\":null,\"applicationDatabase\":{\"members\":3,\"version\":\"${APPDB_VERSION}\"}}}"
4
  1. MongoDB 리소스 StatefulSet를 해제하는지 확인합니다. 리소스 Ops Manager 리소스 로 역방향 마이그레이션 중이라는 메시지와 함께 Pending 단계를 보고합니다.

    kubectl wait --for=jsonpath='{.status.phase}'=Pending \
    mdb/"${APPDB_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" --timeout=300s
    kubectl get mdb "${APPDB_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" \
    -o jsonpath='{.status.message}{"\n"}'
  2. Ops Manager 리소스 내부 애플리케이션 데이터베이스를 다시 관리 할 때까지 기다립니다.

    kubectl wait --for=jsonpath='{.status.applicationDatabase.phase}'=Running \
    om/"${PRIMARY_OM_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" --timeout=1200s
    kubectl wait --for=jsonpath='{.status.opsManager.phase}'=Running \
    om/"${PRIMARY_OM_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" --timeout=1800s
5

이전 단계에서 applicationDatabase.phase=Running를 보고한 후에만 이 단계를 완료합니다.

kubectl delete mdb "${APPDB_NAME}" \
--context "${K8S_CTX}" -n "${MDB_NS}" --wait=true --timeout=300s
6
  1. MongoDB Ops Manager 리소스가 애플리케이션 데이터베이스 StatefulSet을 소유하고 있는지 확인합니다.

    kubectl get statefulset "${APPDB_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" \
    -o jsonpath='{range .metadata.ownerReferences[*]}{.kind}/{.name}{"\n"}{end}'

    이 명령은 MongoDBOpsManager/${PRIMARY_OM_NAME}을(를) 반환합니다.

  2. Ops Manager 리소스 해당 애플리케이션 데이터베이스를 Running(으)로 보고하고 MongoDB 리소스 더 이상 존재하지 않는지 확인합니다.

    kubectl get om "${PRIMARY_OM_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" \
    -o jsonpath='{.status.applicationDatabase.phase}{"\n"}'
    kubectl get mdb --context "${K8S_CTX}" -n "${MDB_NS}"
  3. 기간 및 재시작 횟수를 확인하여 Ops Manager pod가 다시 시작되지 않았는지 확인합니다.

    kubectl get pods --context "${K8S_CTX}" -n "${MDB_NS}"

MongoDB 리소스 Running 단계에 남아 있고 여전히 StatefulSet를 소유하고 있다면, Ops Manager 리소스 출시하다 요청하지 않은 것입니다. 패치가 spec.externalApplicationDatabaseRef를 null로 설정하다 하고 spec.applicationDatabase을 추가했는지 확인합니다.

회수된 StatefulSet가 동일한 바이너리를 유지하도록 spec.applicationDatabase.version를 애플리케이션 데이터베이스가 이미 실행 중인 버전으로 설정합니다.

MongoDB 리소스 StatefulSet를 여전히 소유하고 있는 동안 삭제 하면 Kubernetes StatefulSet와 Ops Manager 리소스 와 공유하는 시크릿을 가비지 수집합니다. 복구하려면 보존된 영구 볼륨 클레임에서 애플리케이션 데이터베이스를 다시 생성합니다. 이 경로는 다운타임을 유발하고 애플리케이션 데이터베이스 자격 증명 순환시킵니다. 자세한 학습 은 Ops Manager 의 재해 복구 및 AppDB 리소스를 참조하세요.

외부 애플리케이션 데이터베이스를 다시 사용하려면 애플리케이션 데이터베이스를 외부 배포로 마이그레이션을 참조하세요.