Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

ReplicaSets multiclústeres

Las implementaciones de MongoDB multinube en clústeres de Kubernetes permiten añadir instancias de MongoDB en clústeres globales que abarcan varias regiones geográficas para aumentar la disponibilidad y la distribución global de los datos.

Antes de comenzar el siguiente procedimiento, tome las siguientes acciones:

  • Instalar kubectl.

  • Instalar Mongosh

  • Completar el Procedimiento de clústeres de GKE o equivalente.

  • Completar el procedimiento de certificados TLS o el equivalente.

  • Completa el procedimiento de Istio Service mesh o el equivalente.

  • Complete el procedimiento Implementar el operador MongoDB.

  • Completa el procedimiento de Multi-clúster Ops Manager. Puedes omitir este paso si usas Cloud Manager en lugar de Ops Manager.

  • Configura las variables de entorno requeridas de la siguiente manera:

# This script builds on top of the environment configured in the setup guides.
# It depends (uses) the following env variables defined there to work correctly.
# If you don't use the setup guide to bootstrap the environment, then define them here.
# ${K8S_CLUSTER_0_CONTEXT_NAME}
# ${K8S_CLUSTER_1_CONTEXT_NAME}
# ${K8S_CLUSTER_2_CONTEXT_NAME}
# ${MDB_NAMESPACE}
export RS_RESOURCE_NAME=mdb
export MONGODB_VERSION="8.0.5-ent"

Se puede encontrar todo el código fuente incluido en el repositorio de MongoDB Kubernetes operador.

1

Ejecute el siguiente script para crear el certificado CA requerido con su emisor de certificados.

1kubectl apply --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${MDB_NAMESPACE}" -f - <<EOF
2apiVersion: cert-manager.io/v1
3kind: Certificate
4metadata:
5 name: mdb-cert
6spec:
7 dnsNames:
8 - "*.${MDB_NAMESPACE}.svc.cluster.local"
9 duration: 240h0m0s
10 issuerRef:
11 name: my-ca-issuer
12 kind: ClusterIssuer
13 renewBefore: 120h0m0s
14 secretName: cert-prefix-mdb-cert
15 usages:
16 - server auth
17 - client auth
18EOF
2

Configure spec.credentials, spec.opsManager.configMapRef.name, que definió en el procedimiento de Multi-Cluster Ops Manager; defina sus configuraciones de seguridad e implemente el recurso MongoDBMultiCluster. En la siguiente muestra de código, duplicateServiceObjects se establece en false para habilitar el proxy de DNS en Istio.

Nota

Para habilitar la resolución DNS entre clústeres a través de la malla de servicios Istio, este tutorial crea objetos de servicio con una única dirección ClusterIP por cada Pod de Kubernetes.

1kubectl apply --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${MDB_NAMESPACE}" -f - <<EOF
2apiVersion: mongodb.com/v1
3kind: MongoDBMultiCluster
4metadata:
5 name: ${RS_RESOURCE_NAME}
6spec:
7 type: ReplicaSet
8 version: ${MONGODB_VERSION}
9 opsManager:
10 configMapRef:
11 name: mdb-org-project-config
12 credentials: mdb-org-owner-credentials
13 duplicateServiceObjects: false
14 persistent: true
15 backup:
16 mode: enabled
17 externalAccess: {}
18 security:
19 certsSecretPrefix: cert-prefix
20 tls:
21 ca: ca-issuer
22 authentication:
23 enabled: true
24 modes: ["SCRAM"]
25 clusterSpecList:
26 - clusterName: ${K8S_CLUSTER_0_CONTEXT_NAME}
27 members: 2
28 - clusterName: ${K8S_CLUSTER_1_CONTEXT_NAME}
29 members: 1
30 - clusterName: ${K8S_CLUSTER_2_CONTEXT_NAME}
31 members: 2
32EOF
3

Ejecute el siguiente comando para confirmar que el recurso MongoDBMultiCluster se está ejecutando.

1echo; echo "Waiting for MongoDB to reach Running phase..."
2kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${MDB_NAMESPACE}" wait --for=jsonpath='{.status.phase}'=Running "mdbmc/${RS_RESOURCE_NAME}" --timeout=900s
3echo; echo "Pods running in cluster ${K8S_CLUSTER_0_CONTEXT_NAME}"
4kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${MDB_NAMESPACE}" get pods
5echo; echo "Pods running in cluster ${K8S_CLUSTER_1_CONTEXT_NAME}"
6kubectl --context "${K8S_CLUSTER_1_CONTEXT_NAME}" -n "${MDB_NAMESPACE}" get pods
7echo; echo "Pods running in cluster ${K8S_CLUSTER_2_CONTEXT_NAME}"
8kubectl --context "${K8S_CLUSTER_2_CONTEXT_NAME}" -n "${MDB_NAMESPACE}" get pods
4

Ejecuta el siguiente comando para crear un usuario y una contraseña de MongoDB. Utiliza contraseñas seguras para tus implementaciones.

1kubectl apply --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${MDB_NAMESPACE}" -f - <<EOF
2apiVersion: v1
3kind: Secret
4metadata:
5 name: rs-user-password
6type: Opaque
7stringData:
8 password: password
9---
10apiVersion: mongodb.com/v1
11kind: MongoDBUser
12metadata:
13 name: rs-user
14spec:
15 passwordSecretKeyRef:
16 name: rs-user-password
17 key: password
18 username: "rs-user"
19 db: "admin"
20 mongodbResourceRef:
21 name: ${RS_RESOURCE_NAME}
22 roles:
23 - db: "admin"
24 name: "root"
25EOF
26
27kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" wait --for=jsonpath='{.status.phase}'=Updated -n "${MDB_NAMESPACE}" mdbu/rs-user --timeout=300s
5

Ejecuta el siguiente comando mongosh para asegurarte de que puedes acceder a la instancia en ejecución de MongoDB.

1external_ip="$(kubectl get --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${MDB_NAMESPACE}" svc "${RS_RESOURCE_NAME}-0-0-svc-external" -o=jsonpath="{.status.loadBalancer.ingress[0].ip}")"
2
3mkdir -p certs
4kubectl get --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${MDB_NAMESPACE}" cm/ca-issuer -o=jsonpath='{.data.ca-pem}' > certs/ca.crt
5
6mongosh --host "${external_ip}" --username rs-user --password password --tls --tlsCAFile certs/ca.crt --tlsAllowInvalidHostnames --eval "db.runCommand({connectionStatus : 1})"
{
authInfo: {
authenticatedUsers: [ { user: 'rs-user', db: 'admin' } ],
authenticatedUserRoles: [ { role: 'root', db: 'admin' } ]
},
ok: 1,
'$clusterTime': {
clusterTime: Timestamp({ t: 1747925179, i: 1 }),
signature: {
hash: Binary.createFromBase64('T1ZP+QUFgBXayfOsRI6XFdEmjKI=', 0),
keyId: Long('7507281432415305733')
}
},
operationTime: Timestamp({ t: 1747925179, i: 1 })
}

Volver

Gestor de operaciones Multi-clúster

En esta página