Configurer la spécification de haute disponibilité
Pour configurer la haute disponibilité, renseignez les informations suivantes dans votre spécification DBCluster :
DBCluster:
metadata:
...
spec:
...
readOnlyPort: READ_ONLY_PORT
availability:
numberOfStandbys: NUMBER_OF_STANDBYS
enableStandbyAsReadReplica: true
enableAutoFailover: true
enableAutoHeal: true
replayReplicationSlotsOnStandbys: true
healthcheckPeriodSeconds: HEALTHCHECK_PERIOD
autoFailoverTriggerThreshold: AUTOFAILOVER_TRIGGER_THRESHOLD
autoHealTriggerThreshold: AUTOHEAL_TRIGGER_THRESHOLD
Remplacez les variables suivantes :
NUMBER_OF_STANDBYS: nombre de nœuds de secours à configurer. Définir cette valeur sur0désactive la haute disponibilité. La valeur maximale est5. Si vous ne savez pas de combien de nœuds de secours vous avez besoin, commencez par2pour une haute résilience.(Facultatif)
READ_ONLY_PORT: port de l'équilibreur de charge ou adresse IP virtuelle utilisée pour le point de terminaison en lecture seule de secours. La valeur par défaut est5433(port principal plus 1).(Facultatif)
HEALTHCHECK_PERIOD: nombre de secondes à attendre entre chaque vérification de l'état. La valeur par défaut est30. La valeur minimale est1. La valeur maximale est86400(un jour).(Facultatif)
AUTOFAILOVER_TRIGGER_THRESHOLD: nombre de fois où la vérification de l'état peut échouer avant qu'un basculement ne se produise. La valeur par défaut est3. La valeur minimale est0, mais si elle est définie sur0, AlloyDB Omni utilise la valeur par défaut.Un basculement automatique se produit si la vérification de l'état échoue
AUTOFAILOVER_TRIGGER_THRESHOLDfois ou pendantHEALTHCHECK_PERIOD * AUTOFAILOVER_TRIGGER_THRESHOLDsecondes (90 secondes par défaut).(Facultatif)
AUTOHEAL_TRIGGER_THRESHOLD: nombre de fois où la vérification de l'état peut échouer avant le début de la réparation automatique. La valeur par défaut est5. La valeur minimale est0, mais si elle est définie sur0, AlloyDB Omni utilise la valeur par défaut.Une récupération automatique se produit si la vérification de l'état échoue
AUTOHEAL_TRIGGER_THRESHOLDfois ou pendantHEALTHCHECK_PERIOD * AUTOHEAL_TRIGGER_THRESHOLDsecondes.
Vérifier les points de terminaison de secours en lecture seule
Lorsque vous définissez enableStandbyAsReadReplica: true, l'équilibreur de charge (adresse IP virtuelle HAProxy et Keepalived) expose automatiquement un point de terminaison en lecture seule dédié en plus du point de terminaison principal en lecture/écriture.
HAProxy achemine le trafic entre les secours actifs comme suit :
- Exécute des vérifications d'état sur tous les nœuds de secours à l'aide de
GET /isstandby. - Répartit les requêtes de lecture entre les secours actifs à l'aide de l'équilibrage de charge
leastconn. - Met automatiquement à jour le routage lors du basculement sans abandonner les connexions client à la nouvelle topologie de secours.
Pour vérifier les points de terminaison de votre cluster, exécutez l'une des commandes suivantes :
alloydbctl
alloydbctl get -d "DEPLOYMENT_SPEC" -t DBCluster -n DBCLUSTER_NAMERemplacez les variables suivantes :
DEPLOYMENT_SPEC: chemin d'accès à la spécification de déploiement que vous avez créée dans Installer les composants AlloyDB Omni.DBCLUSTER_NAME: nom de votre cluster de bases de données que vous avez défini dans Créer un cluster.
Ansible
Créez un playbook Ansible pour le rôle
google.alloydbomni_orchestrator.status. Par exemple,status.yaml:- name: STATUS_PLAYBOOK_NAME hosts: localhost vars: ansible_user: ANSIBLE_USER ansible_ssh_private_key_file: ANSIBLE_SSH_PRIVATE_KEY_FILE roles: - role: google.alloydbomni_orchestrator.statusRemplacez les variables suivantes :
STATUS_PLAYBOOK_NAME: nom de votre playbook Ansible. Par exemple,My cluster status.ANSIBLE_USER: utilisateur du système d'exploitation qu'Ansible utilise pour se connecter à vos nœuds AlloyDB Omni.ANSIBLE_SSH_PRIVATE_KEY_FILE: clé privée qu'Ansible utilise pour se connecter à vos nœuds AlloyDB Omni à l'aide de SSH.
Exécutez le playbook :
ansible-playbook status.yaml -i "DEPLOYMENT_SPEC" -e resource_type=DBCluster \ -e resource_name=DBCLUSTER_NAMERemplacez les variables suivantes :
DEPLOYMENT_SPEC: chemin d'accès à la spécification de déploiement que vous avez créée dans Installer les composants AlloyDB Omni.DBCLUSTER_NAME: nom de votre cluster de bases de données que vous avez défini dans Créer un cluster.
Les points de terminaison sont signalés sous status.primary.endpoints :
- Read-Write: VIRTUAL_IP:5432
- Read-Only: VIRTUAL_IP:5433
Appliquer votre spécification DBCluster
Pour appliquer votre spécification DBCluster configurée, exécutez l'une des commandes suivantes :
alloydbctl
alloydbctl apply -d "DEPLOYMENT_SPEC" -r "DBCLUSTER_SPECIFICATION"Remplacez les variables suivantes :
DEPLOYMENT_SPEC: chemin d'accès à la spécification de déploiement que vous avez créée dans Installer les composants AlloyDB Omni.DBCLUSTER_SPECIFICATION: chemin d'accès à la spécificationDBClusterque vous avez créée dans Créer un cluster.
Ansible
ansible-playbook DBCLUSTER_PLAYBOOK -i "DEPLOYMENT_SPEC" \
-e resource_spec="DBCLUSTER_SPECIFICATION"Remplacez les variables suivantes :
RESTORE_PLAYBOOK: chemin d'accès au playbook que vous avez créé pour votre CRDDBCluster.DEPLOYMENT_SPEC: chemin d'accès à la spécification de déploiement que vous avez créée dans Installer les composants AlloyDB Omni.DBCLUSTER_SPECIFICATION: chemin d'accès à la spécificationDBClusterque vous avez créée dans Créer un cluster.
Basculer vers une instance de secours
Vous pouvez effectuer des commutations lorsque vous devez tester votre configuration de haute disponibilité ou toute autre activité de maintenance planifiée nécessitant de permuter les répliques principale et de secours. Une fois la commutation effectuée, la direction de la réplication et les rôles des instances principale et de secours sont inversés.
Les commutations effectuent les actions suivantes :
L'orchestrateur AlloyDB Omni met l'instance principale hors connexion.
L'orchestrateur AlloyDB Omni promeut l'instance de secours en tant que nouvelle instance principale.
L'orchestrateur AlloyDB Omni convertit l'instance principale en instance de secours.
AlloyDB Omni démarre l'instance de secours nouvellement convertie.
Effectuer une commutation
Pour effectuer une commutation, procédez comme suit :
Vérifiez que vos instances principale et de secours sont opérationnelles.
Vérifiez que la
status.phasede haute disponibilité estReady.alloydbctlalloydbctl get -d "DEPLOYMENT_SPEC" -t DBCluster -n DBCLUSTER_SPECIFICATION -o yamlRemplacez les variables suivantes :
DEPLOYMENT_SPEC: chemin d'accès à la spécification de déploiement que vous avez créée dans Installer les composants AlloyDB Omni.DBCLUSTER_SPECIFICATION: nom de votreDBClusterspécification que vous avez défini dans Créer un cluster.
Ansible
ansible-playbook status.yaml -i DEPLOYMENT_SPEC -e resource_type=DBCluster \ -e resource_name=DBCLUSTER_SPECIFICATIONRemplacez les variables suivantes :
DEPLOYMENT_SPEC: chemin d'accès à la spécification de déploiement que vous avez créée dans Installer les composants AlloyDB Omni.DBCLUSTER_SPECIFICATION: nom de votreDBClusterspécification que vous avez défini dans Créer un cluster.
Créez une spécification
Switchoverau format suivant :Switchover: metadata: name: SWITCHOVER_NAME spec: dbClusterRef: DBCLUSTER_NAME newPrimary: NEW_PRIMARY_NAMERemplacez les variables suivantes :
SWITCHOVER_NAME: nom de cette spécificationSwitchover. Par exemple,my-switchover-1. Ce nom doit être unique chaque fois qu'une commutation est effectuée.DBCLUSTER_NAME: nom de votre cluster de bases de données que vous avez défini dans Créer un cluster.(Facultatif)
NEW_PRIMARY_NAME: instance de secours qui devient la nouvelle instance principale. Pour mapper le nom de l'instance à un hôte, consultez le champinstanceListdans l'état duDBClusterréférencé.
Si vous utilisez Ansible, créez un playbook pour votre spécification
Switchover.- name: SWITCHOVER_PLAYBOOK_NAME hosts: localhost vars: ansible_user: ANSIBLE_USER ansible_ssh_private_key_file: ANSIBLE_SSH_PRIVATE_KEY_FILE roles: - role: google.alloydbomni_orchestrator.switchoverRemplacez les variables suivantes :
SWITCHOVER_PLAYBOOK_NAME: nom de votre playbook Ansible. Par exemple,My Switchover.ANSIBLE_USER: utilisateur du système d'exploitation qu'Ansible utilise pour se connecter à vos nœuds AlloyDB Omni.ANSIBLE_SSH_PRIVATE_KEY_FILE: clé privée qu'Ansible utilise pour se connecter à vos nœuds AlloyDB Omni à l'aide de SSH.
Appliquez votre spécification
Switchover.alloydbctlalloydbctl apply -d "DEPLOYMENT_SPEC" -r "SWITCHOVER_SPECIFICATION"Remplacez les variables suivantes :
DEPLOYMENT_SPEC: chemin d'accès à la spécification de déploiement que vous avez créée dans Installer les composants AlloyDB Omni.SWITCHOVER_SPECIFICATION: chemin d'accès à la spécificationSwitchoverque vous avez créée à l'étape 3.
Ansible
ansible-playbook SWITCHOVER_PLAYBOOK -i "DEPLOYMENT_SPEC" \ -e resource_spec="SWITCHOVER_SPECIFICATION"Remplacez les variables suivantes :
SWITCHOVER_PLAYBOOK: chemin d'accès au playbook que vous avez créé pour votre CRDSwitchoverà l'étape 4.DEPLOYMENT_SPEC: chemin d'accès à la spécification de déploiement que vous avez créée dans Installer les composants AlloyDB Omni.SWITCHOVER_SPECIFICATION: chemin d'accès à la spécificationSwitchoverque vous avez créée à l'étape 3.
Équilibreur de charge pour la haute disponibilité
L'équilibreur de charge (HAProxy) assure une haute disponibilité en associant ses nœuds à Keepalived et à une adresse IP virtuelle. Keepalived utilise le protocole VRRP (Virtual Router Redundancy Protocol) pour contrôler une adresse IP virtuelle flottante. Les applications clientes de base de données se connectent à cette adresse IP virtuelle au lieu de l'adresse IP du nœud de base de données.
Dans les configurations où aucun équilibreur de charge dédié n'est utilisé, Keepalived est installé directement sur les nœuds de base de données. Dans ce scénario, la haute disponibilité est obtenue en attribuant dynamiquement l'adresse IP virtuelle au nœud principal actuel, ce qui garantit un basculement fluide si l'instance principale devient indisponible.
Pour établir une élection stable, Keepalived attribue des priorités VRRP aux nœuds du cluster de bases de données. Le premier nœud d'équilibreur de charge assume le rôle principal avec une priorité Keepalived plus élevée, par exemple 110. Les nœuds suivants agissent en tant que nœuds secondaires avec une priorité inférieure, par exemple 100.
Pour s'assurer que l'adresse IP virtuelle pointe vers un nœud opérationnel, Keepalived exécute des vérifications d'état continues toutes les deux secondes. Cela permet de vérifier l'état du processus systemd HAProxy. Si le service HAProxy sur l'instance principale échoue, Keepalived migre l'adresse IP virtuelle vers un nœud secondaire opérationnel.
Si l'appartenance du nœud de base de données change, HAProxy et Keepalived pointent automatiquement vers les nouveaux nœuds de base de données actifs. La configuration de routage sous-jacente est mise à jour sans abandonner les connexions client actives.
Configurer l'équilibreur de charge
Pour configurer l'adresse IP virtuelle des nœuds d'équilibreur de charge, ajoutez le champ dbLoadBalancerOptions suivant au champ primarySpec de votre spécification DBCluster :
DBCluster:
spec:
primarySpec:
...
dbLoadBalancerOptions:
onprem:
loadBalancerIP: "VIRTUAL_IP"
loadBalancerType: "internal"
loadBalancerInterface: "VIRTUAL_IP_INTERFACE"
Remplacez les variables suivantes :
VIRTUAL_IP: adresse IP statique utilisée pour l'adresse IP virtuelle flottante. Les applications clientes de base de données utilisent l'adresse IP définie ici. Pour vous assurer que Keepalived peut diffuser des ARP sans frais, cette adresse IP doit être disponible, ne pas pouvoir effectuer de bouclage et, dans le cas d'un environnement sur site, appartenir au même sous-réseau que vos interfaces de nœud principal.VIRTUAL_IP_INTERFACE: interface réseau oùVIRTUAL_IPest configuré. La valeur par défaut esteth0.