配置高可用性规范
如需配置高可用性,请在 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
执行以下变量替换操作:
NUMBER_OF_STANDBYS:要设置的备用节点数。将此值设置为0会停用高可用性。最大值为5。如果您不确定需要多少个备用节点,请先将值设置为2,以实现高弹性。(可选)
READ_ONLY_PORT:负载均衡器或虚拟 IP 地址上用于备用只读端点的端口。默认值为5433(主端口加 1)。(可选)
HEALTHCHECK_PERIOD:每次健康检查之间等待的秒数。默认值为30。最小值为1。最大值为86400(一天)。(可选)
AUTOFAILOVER_TRIGGER_THRESHOLD:在发生故障切换之前健康检查可以失败的次数。默认值为3。最小值为0,但如果将该值设置为0,AlloyDB Omni 会使用默认值。如果健康检查失败
AUTOFAILOVER_TRIGGER_THRESHOLD次或持续HEALTHCHECK_PERIOD * AUTOFAILOVER_TRIGGER_THRESHOLD秒(默认情况下为 90 秒),则会发生自动故障切换。(可选)
AUTOHEAL_TRIGGER_THRESHOLD:在开始自动修复之前健康检查可以失败的次数。默认值为5。最小值为0,但如果将该值设置为0,AlloyDB Omni 会使用默认值。如果健康检查失败
AUTOHEAL_TRIGGER_THRESHOLD次或持续HEALTHCHECK_PERIOD * AUTOHEAL_TRIGGER_THRESHOLD秒,则会发生自动恢复。
验证只读备用端点
当您设置 enableStandbyAsReadReplica: true 时,负载均衡器(HAProxy 和 Keepalived 虚拟 IP 地址)会自动公开一个专用只读端点,以及主读写端点。
HAProxy 会按如下方式在活跃备用实例之间路由流量:
- 使用
GET /isstandby对所有备用节点运行健康检查。 - 使用
leastconn负载均衡在活跃备用实例之间分配读取查询。 - 在发生故障切换时自动更新路由,而不会断开客户端与新备用拓扑的连接。
如需验证集群端点,请运行以下命令之一:
alloydbctl
alloydbctl get -d "DEPLOYMENT_SPEC" -t DBCluster -n DBCLUSTER_NAME执行以下变量替换操作:
DEPLOYMENT_SPEC: 您在 安装 AlloyDB Omni 组件中创建的部署规范的路径。DBCLUSTER_NAME: 您在 创建集群中定义的数据库集群的名称。
Ansible
为
google.alloydbomni_orchestrator.status角色创建 Ansible 策略方案。例如,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.status执行以下变量替换操作:
STATUS_PLAYBOOK_NAME:Ansible 策略方案的名称。例如,My cluster status。ANSIBLE_USER:Ansible 用于登录 AlloyDB Omni 节点的操作系统用户。ANSIBLE_SSH_PRIVATE_KEY_FILE:Ansible 用于使用 SSH 连接到 AlloyDB Omni 节点的私钥。
运行策略方案:
ansible-playbook status.yaml -i "DEPLOYMENT_SPEC" -e resource_type=DBCluster \ -e resource_name=DBCLUSTER_NAME执行以下变量替换操作:
DEPLOYMENT_SPEC: 您在 安装 AlloyDB Omni 组件中创建的部署规范的路径。DBCLUSTER_NAME: 您在 创建集群中定义的数据库集群的名称。
端点在 status.primary.endpoints 下报告:
- Read-Write: VIRTUAL_IP:5432
- Read-Only: VIRTUAL_IP:5433
应用 DBCluster 规范
如需应用配置的 DBCluster 规范,请运行以下命令之一:
alloydbctl
alloydbctl apply -d "DEPLOYMENT_SPEC" -r "DBCLUSTER_SPECIFICATION"执行以下变量替换操作:
DEPLOYMENT_SPEC: 您在 安装 AlloyDB Omni 组件中创建的部署规范的路径。DBCLUSTER_SPECIFICATION: 您在 创建集群中创建的DBCluster规范的路径。
Ansible
ansible-playbook DBCLUSTER_PLAYBOOK -i "DEPLOYMENT_SPEC" \
-e resource_spec="DBCLUSTER_SPECIFICATION"执行以下变量替换操作:
RESTORE_PLAYBOOK:您为DBClusterCRD 创建的策略方案的路径。DEPLOYMENT_SPEC: 您在 安装 AlloyDB Omni 组件中创建的部署规范的路径。DBCLUSTER_SPECIFICATION: 您在 创建集群中创建的DBCluster规范的路径。
切换到备用实例
当您需要测试高可用性设置或任何其他需要切换主副本和备用副本的计划维护活动时,可以执行切换。切换发生后,复制方向以及主副本和备用副本的角色会发生反转。
切换会执行以下操作:
AlloyDB Omni 编排器使主副本离线。
AlloyDB Omni 编排器将备用副本提升为新的主副本。
AlloyDB Omni 编排器将主副本转换为备用副本。
AlloyDB Omni 启动新转换的备用副本。
执行切换
如需执行切换,请完成以下步骤:
验证主实例和备用实例的运行状况是否良好。
验证高可用性
status.phase是否为Ready。alloydbctlalloydbctl get -d "DEPLOYMENT_SPEC" -t DBCluster -n DBCLUSTER_SPECIFICATION -o yaml执行以下变量替换操作:
DEPLOYMENT_SPEC: 您在 安装 AlloyDB Omni 组件中创建的部署规范的路径。DBCLUSTER_SPECIFICATION: 您在 创建集群中定义的DBCluster规范的名称。
Ansible
ansible-playbook status.yaml -i DEPLOYMENT_SPEC -e resource_type=DBCluster \ -e resource_name=DBCLUSTER_SPECIFICATION执行以下变量替换操作:
DEPLOYMENT_SPEC: 您在 安装 AlloyDB Omni 组件中创建的部署规范的路径。DBCLUSTER_SPECIFICATION: 您在 创建集群中定义的DBCluster规范的名称。
使用以下格式创建
Switchover规范:Switchover: metadata: name: SWITCHOVER_NAME spec: dbClusterRef: DBCLUSTER_NAME newPrimary: NEW_PRIMARY_NAME执行以下变量替换操作:
SWITCHOVER_NAME:此Switchover规范的名称。例如,my-switchover-1。每次执行切换时,此名称都必须是唯一的。DBCLUSTER_NAME: 您在 创建集群中定义的数据库集群的名称。(可选)
NEW_PRIMARY_NAME:是成为新主副本的备用实例。如需将实例名称映射到主机,请参阅所引用DBCluster的状态中的instanceList字段。
如果您使用的是 Ansible,请为
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.switchover执行以下变量替换操作:
SWITCHOVER_PLAYBOOK_NAME:Ansible 策略方案的名称。例如,My Switchover。ANSIBLE_USER:Ansible 用于登录 AlloyDB Omni 节点的操作系统用户。ANSIBLE_SSH_PRIVATE_KEY_FILE:Ansible 用于使用 SSH 连接到 AlloyDB Omni 节点的私钥。
应用
Switchover规范。alloydbctlalloydbctl apply -d "DEPLOYMENT_SPEC" -r "SWITCHOVER_SPECIFICATION"执行以下变量替换操作:
DEPLOYMENT_SPEC: 您在 安装 AlloyDB Omni 组件中创建的部署规范的路径。SWITCHOVER_SPECIFICATION:您在第 3 步中创建的Switchover规范的路径。
Ansible
ansible-playbook SWITCHOVER_PLAYBOOK -i "DEPLOYMENT_SPEC" \ -e resource_spec="SWITCHOVER_SPECIFICATION"执行以下变量替换操作:
SWITCHOVER_PLAYBOOK:您在第 4 步中为SwitchoverCRD 创建的策略方案的路径。DEPLOYMENT_SPEC: 您在 安装 AlloyDB Omni 组件中创建的部署规范的路径。SWITCHOVER_SPECIFICATION:您在第 3 步中创建的Switchover规范的路径。
用于实现高可用性的负载平衡器
负载均衡器 (HAProxy) 通过将其节点与 Keepalived 和虚拟 IP 配对来实现高可用性。Keepalived 利用虚拟路由器冗余协议 (VRRP) 来控制浮动虚拟 IP。数据库客户端应用连接到此虚拟 IP,而不是数据库节点的 IP 地址。
在不使用专用负载均衡器的配置中,Keepalived 直接安装在数据库节点上。在这种情况下,高可用性是通过将虚拟 IP 动态分配给当前主节点来实现的,从而确保在主节点不可用时进行无缝故障切换。
为了建立稳定的选举,Keepalived 会为数据库集群节点分配 VRRP 优先级。第一个负载均衡器节点承担主角色,Keepalived 优先级较高,例如 110。后续节点充当辅助角色,优先级较低,例如 100。
为了确保虚拟 IP 指向运行状况良好的节点,Keepalived 每两秒运行一次持续健康检查。这会验证 systemd HAProxy 进程的状态。如果主节点上的 HAProxy 服务失败,Keepalived 会将虚拟 IP 迁移到运行状况良好的辅助节点。
如果数据库节点的成员资格发生变化,HAProxy 和 Keepalived 会自动指向新的活跃数据库节点。底层路由配置会更新,而不会断开活跃客户端连接。
配置负载均衡器
如需为负载均衡器节点配置虚拟 IP,请将以下 dbLoadBalancerOptions 字段添加到 DBCluster 规范中的 primarySpec 字段:
DBCluster:
spec:
primarySpec:
...
dbLoadBalancerOptions:
onprem:
loadBalancerIP: "VIRTUAL_IP"
loadBalancerType: "internal"
loadBalancerInterface: "VIRTUAL_IP_INTERFACE"
执行以下变量替换操作:
VIRTUAL_IP:用于浮动虚拟 IP 的静态 IP 地址。数据库客户端应用使用此处定义的 IP 地址。为了确保 Keepalived 可以成功广播免费 ARP,此 IP 地址必须可用;不能回送;如果是本地部署,则属于与主节点接口相同的子网。VIRTUAL_IP_INTERFACE: 配置VIRTUAL_IP的网络接口。 默认值为eth0。