Docs Menu
Docs Home
/ /

ReplicaSets multiclústeres

Las implementaciones de MongoDB en clústeres multi-Kubernetes le permiten agregar instancias de MongoDB en clústeres globales que abarcan múltiples regiones geográficas para una mayor disponibilidad y distribución global de datos.

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

  • Instalar kubectl.

  • Instalar mongosh

  • Complete el procedimiento de clústeres de GKE o equivalente.

  • Complete el procedimiento de Certificados TLS o equivalente.

  • Complete el procedimiento de malla de servicio Istio o equivalente.

  • Complete el procedimiento Implementar el operador MongoDB.

  • Complete el procedimiento de Multi-Cluster Ops Manager. Puede omitir este paso si usa Cloud Manager en lugar de Ops Manager.

  • Establezca las variables de entorno necesarias 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"

Puede encontrar todo el código fuente incluido en el repositorio del operador Kubernetes de MongoDB.

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

spec.credentialsEstablezca,, definidospec.opsManager.configMapRef.name en el procedimiento Multi-Cluster Ops Manager; defina la configuración de seguridad e implemente el MongoDBMultiCluster recurso. En el siguiente ejemplo de código, duplicateServiceObjects se establece en false para habilitar el proxy DNS en Istio.

Nota

Para habilitar la resolución de DNS entre clústeres mediante 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

Ejecute el siguiente comando para crear un usuario y una contraseña de MongoDB. Utilice contraseñas seguras para sus 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

Ejecute el siguiente comando mongosh para asegurarse de que puede acceder a su instancia de MongoDB en ejecución.

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: 1741701953, i: 1 }),
signature: {
hash: Binary.createFromBase64('uhYReuUiWNWP6m1lZ5umgDVgO48=', 0),
keyId: Long('7480552820140146693')
}
},
operationTime: Timestamp({ t: 1741701953, i: 1 })
}

Volver

Gestor de operaciones Multi-clúster

En esta página