Cet article décrit un déploiement multirégional pour Apigee hybrid sur GKE et Anthos GKE déployés sur site.
Voici quelques exemple de topologies pour le déploiement multirégional :
- Actif/Actif : lorsque des applications sont déployées dans plusieurs emplacements géographiques et que vous avez besoin d'une réponse d'API à faible latence pour vos déploiements. Vous avez la possibilité de déployer un environnement hybride dans plusieurs emplacements géographiques les plus proches de vos clients. Par exemple : la côte ouest des États-Unis, la côte est des États-Unis, l'Europe, l'Asie-Pacifique.
- Actif/Passif : lorsque vous disposez d'une région principale et d'une région de basculement ou de reprise après sinistre.
Les régions d'un déploiement hybride multirégional communiquent via Cassandra, comme le montre l'image suivante :
Équilibrer la charge de la connexion MART
Chaque cluster régional doit avoir ses propres adresse IP et nom d'hôte MART. Cependant, il vous suffit de connecter le plan de gestion à l'un d'entre eux. Cassandra propage les informations à tous les clusters. La meilleure option en termes de haute disponibilité pour MART consiste à équilibrer la charge des adresses IP MART individuelles et à configurer votre organisation pour qu'elle communique avec l'URL MART à équilibrage de charge.
Prérequis
Avant de configurer un environnement hybride pour plusieurs régions, vous devez remplir les conditions préalables suivantes :
- Configurez des clusters Kubernetes dans plusieurs régions avec des blocs CIDR différents
- Configurez la communication interrégionale
- Exigences multirégionales Cassandra :
- Assurez-vous que l'espace de noms du réseau du pod dispose d'une connectivité entre les régions, y compris les pare-feu, les VPN, l'appairage VPC et l'appairage vNet. C'est le cas de la plupart des installations GKE.
- Si l'espace de noms du réseau du pod n'a pas de connectivité entre les pods de différents clusters (les clusters s'exécutent en mode réseau île, par exemple dans la plupart des installations GKE On-Prem), activez la fonctionnalité
hostNetwork
Kubernetes en définissantcassandra.hostNetwork: true
dans le fichier de remplacement pour toutes les régions de votre installation multirégionale Apigee hybrid.Pour plus d'informations sur la fonctionnalité Kubernetes
hostNetwork
, consultez la section Espaces de noms d'hôte dans la documentation de Kubernetes. - Activez
hostNetwork
sur les clusters existants avant d'étendre votre configuration multirégionale à de nouvelles régions. - Lorsque
hostNetwork
est activé, assurez-vous que les nœuds de calcul peuvent effectuer une résolution DNS inverse. Apigee Cassandra utilise la recherche DNS à la fois directe et inverse pour obtenir l'adresse IP de l'hôte au démarrage. - Ouvrez les ports Cassandra 7 000 et 7 001 entre les clusters Kubernetes dans toutes les régions pour permettre aux nœuds de calcul des régions et des centres de données de communiquer. Consultez la section Configurer les ports.
Pour en savoir plus, consultez la documentation concernant Kubernetes.
Configurer l'hôte source multirégional
Cette section décrit comment étendre le cluster Cassandra existant à une nouvelle région. Cette configuration permet à la nouvelle région d'amorcer le cluster et de rejoindre le centre de données existant. Sans cette configuration, les clusters Kubernetes multirégionaux ne se connaîtraient pas les uns les autres.
Exécutez la commande
kubectl
suivante pour identifier une adresse d'hôte source pour Cassandra dans la région actuelle.Une adresse hôte source permet à une nouvelle instance régionale de trouver le cluster d'origine lors du premier démarrage pour apprendre la topologie du cluster. L'adresse hôte source est désignée comme point de contact dans le cluster.
kubectl get pods -o wide -n apigee NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE apigee-cassandra-default-0 1/1 Running 0 5d 10.0.0.11 gke-k8s-dc-2-default-pool-a2206492-p55d apigee-cassandra-default-1 1/1 Running 0 5d 10.0.2.4 gke-k8s-dc-2-default-pool-e9daaab3-tjmz apigee-cassandra-default-2 1/1 Running 0 5d 10.0.3.5 gke-k8s-dc-2-default-pool-e589awq3-kjch
- Déterminez laquelle des adresses IP renvoyées par la commande précédente sera l'hôte source multirégional.
La configuration à cette étape dépend de l'utilisation de GKE ou GKE On-Prem :
GKE uniquement : dans le centre de données 2, configurez
cassandra.multiRegionSeedHost
etcassandra.datacenter
sur la page Gérer les composants du plan d'exécution, oùmultiRegionSeedHost
est l'une des adresses IP renvoyées par la commande précédente :cassandra: multiRegionSeedHost: seed_host_IP datacenter: data_center_name rack: rack_name hostNetwork: false # Set this to true for Non GKE platforms.
Exemple :
cassandra: multiRegionSeedHost: 10.0.0.11 datacenter: "dc-2" rack: "ra-1" hostNetwork: false
GKE On-Prem uniquement : dans le centre de données 2, configurez
cassandra.multiRegionSeedHost
dans le fichier de remplacement, oùmultiRegionSeedHost
est l'une des adresses IP renvoyées par la commande précédente :cassandra: hostNetwork: true multiRegionSeedHost: seed_host_IP datacenter: data_center_name
Exemple :
cassandra: hostNetwork: true multiRegionSeedHost: 10.0.0.11 datacenter: "dc-2"
- Dans le nouveau centre de données/région, avant d'installer un environnement hybride, définissez les mêmes certificats et identifiants TLS dans
overrides.yaml
que ceux définis dans la première région.
Configurer la nouvelle région
Après avoir configuré l'hôte source, vous pouvez configurer la nouvelle région.
Pour configurer la nouvelle région, procédez comme suit :
- Copiez votre certificat à partir du cluster existant vers le nouveau cluster. Le nouveau certificat racine CA est utilisé par Cassandra et d'autres composants hybrides pour mTLS. Par conséquent, il est essentiel de disposer de certificats cohérents dans l'ensemble du cluster.
- Définissez le contexte sur l'espace de noms d'origine :
kubectl config use-context original-cluster-name
- Exportez la configuration actuelle de l'espace de noms dans un fichier :
kubectl get namespace namespace -o yaml > apigee-namespace.yaml
- Exportez le secret
apigee-ca
vers un fichier :kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
- Définissez le contexte sur le nom du cluster de la nouvelle région :
kubectl config use-context new-cluster-name
- Importez la configuration de l'espace de noms dans le nouveau cluster. Veillez à mettre à jour l'espace de noms dans le fichier si vous utilisez un espace de noms différent dans la nouvelle région :
kubectl apply -f apigee-namespace.yaml
Importez le secret dans le nouveau cluster :
kubectl -n cert-manager apply -f apigee-ca.yaml
- Définissez le contexte sur l'espace de noms d'origine :
- Installez la version hybride dans la nouvelle région. Assurez-vous que le fichier
overrides-DC_name.yaml
inclut les mêmes certificats TLS que ceux configurés dans la première région, comme expliqué dans la section précédente.Exécutez les deux commandes suivantes pour installer un environnement hybride dans la nouvelle région :
apigeectl init -f overrides/overrides-DC_name.yaml
apigeectl apply -f overrides/overrides-DC_name.yaml
- Vérifiez que l'installation hybride a réussi en exécutant la commande suivante :
apigeectl check-ready -f overrides_your_cluster_name.yaml
- Vérifiez la configuration du cluster Cassandra en exécutant la commande suivante. La sortie doit afficher les centres de données existants et nouveaux.
kubectl exec apigee-cassandra-default-0 -n apigee \ -- nodetool -u JMX_user -pw JMX_password status
Exemple illustrant une configuration réussie :
Datacenter: dc-1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.87.93 68.07 GiB 256 ? fb51465c-167a-42f7-98c9-b6eba1de34de c UN 10.132.84.94 69.9 GiB 256 ? f621a5ac-e7ee-48a9-9a14-73d69477c642 b UN 10.132.84.105 76.95 GiB 256 ? 0561086f-e95b-4232-ba6c-ad519ff30336 d Datacenter: dc-2 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.0.8 71.61 GiB 256 ? 8894a98b-8406-45de-99e2-f404ab10b5d6 c UN 10.132.9.204 75.1 GiB 256 ? afa0ffa3-630b-4f1e-b46f-fc3df988092e a UN 10.132.3.133 68.08 GiB 256 ? 25ae39ab-b39e-4d4f-9cb7-de095ab873db b
- Configurez Cassandra sur tous les pods des nouveaux centres de données.
- Obtenez
apigeeorg
à partir du cluster à l'aide de la commande suivante :kubectl get apigeeorg -n apigee -o json | jq .items[].metadata.name
Exemple :
Ex: kubectl get apigeeorg -n apigee -o json | jq .items[].metadata.name "rg-hybrid-b7d3b9c"
- Créez un fichier de ressource personnalisée pour la réplication de données Cassandra (
YAML
). Le fichier peut porter n'importe quel nom. Dans les exemples suivants, le fichier sera nommédatareplication.yaml
.Le fichier doit contenir les éléments suivants :
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: REGION_EXPANSION namespace: NAMESPACE spec: organizationRef: APIGEEORG_VALUE force: false source: region: SOURCE_REGION
Où :
- REGION_EXPANSION est le nom que vous attribuez à ces métadonnées. Vous pouvez utiliser n'importe quel nom.
- NAMESPACE est le même espace de noms que celui fourni dans
overrides.yaml
. Il s'agit généralement de "apigee
". - APIGEEORG_VALUE correspond à la valeur renvoyée par la commande
kubectl get apigeeorg -n apigee -o json | jq .items[].metadata.name
à l'étape précédente. Par exemple,rg-hybrid-b7d3b9c
. - SOURCE_REGION est le nom du centre de données dans la région source. Il s'agit de la valeur définie pour
cassandra:datacenter:
dans votreoverrides.yaml
.
Exemple :
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: region-expansion namespace: apigee spec: organizationRef: rg-hybrid-b7d3b9c force: false source: region: "dc-1"
- Appliquez la fonction
CassandraDataReplication
avec la commande suivante :kubectl apply -f datareplication.yaml
- Vérifiez l'état de la recompilation à l'aide de la commande suivante.
kubectl -n apigee get apigeeds -o json | jq .items[].status.cassandraDataReplication
Les résultats doivent ressembler à ceci :
{ "rebuildDetails": { "apigee-cassandra-default-0": { "state": "complete", "updated": 1623105760 }, "apigee-cassandra-default-1": { "state": "complete", "updated": 1623105765 }, "apigee-cassandra-default-2": { "state": "complete", "updated": 1623105770 } }, "state": "complete", "updated": 1623105770 }
- Obtenez
- Vérifiez les processus de recompilation des journaux. Vérifiez également la taille des données à l'aide de la commande
nodetool status
:kubectl logs apigee-cassandra-default-0 -f -n apigee
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u JMX_user -pw JMX_password status
L'exemple suivant montre des entrées de journal :
INFO 01:42:24 rebuild from dc: dc-1, (All keyspaces), (All tokens) INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Executing streaming plan for Rebuild INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.432KiB), sending 0 files(0.000KiB) INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.1.45 is complete INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.693KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.4.36 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 3 files(0.720KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.5.22 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] All sessions completed
- Mettez à jour les hôtes sources. Supprimez
multiRegionSeedHost: 10.0.0.11
deoverrides-DC_name.yaml
, puis recommencez la même opération.apigeectl apply -f overrides/overrides-DC_name.yaml
Vérifier l'état du cluster Cassandra
La commande suivante permet de voir si la configuration du cluster a réussi dans deux centres de données. La commande vérifie l'état de nodetool pour les deux régions.
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u JMX_user -pw JMX_password status Datacenter: dc-1 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.12.1.45 112.09 KiB 256 100.0% 3c98c816-3f4d-48f0-9717-03d0c998637f ra-1 UN 10.12.4.36 95.27 KiB 256 100.0% 0a36383d-1d9e-41e2-924c-7b62be12d6cc ra-1 UN 10.12.5.22 88.7 KiB 256 100.0% 3561f4fa-af3d-4ea4-93b2-79ac7e938201 ra-1 Datacenter: dc-2 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.0.4.33 78.69 KiB 256 0.0% a200217d-260b-45cd-b83c-182b27ff4c99 ra-1 UN 10.0.0.21 78.68 KiB 256 0.0% 9f3364b9-a7a1-409c-9356-b7d1d312e52b ra-1 UN 10.0.1.26 15.46 KiB 256 0.0% 1666df0f-702e-4c5b-8b6e-086d0f2e47fa ra-1
Dépannage
Consultez la section Échec de la réplication de données Cassandra.