本页面介绍了如何为 AlloyDB Omni 设置高可用性配置。本页面仅介绍如何采用高可用性配置创建新的 AlloyDB Omni 实例。它不涉及将现有实例转换为高可用性。
准备工作
阅读高可用性和数据弹性。
如果您还没有 Google Cloud 项目,请创建一个。
确保您的项目已启用结算功能。
在 Google Cloud 控制台中打开 Cloud Shell。
在 Google Cloud 控制台中,克隆以下源代码库。
git clone https://github.com/GoogleCloudPlatform/cloud-solutions.git
安装
在本指南中,我们将部署一个包含 AlloyDB Omni 的三节点 Patroni 集群,以及一个用作配置存储区的三节点 etcd 集群。在集群前端,我们在托管式实例组中使用 HAProxy 来处理浮动 IP 地址,以便故障切换对客户端是透明的。
此设置的初始配置如下图所示:
图 1. HAProxy 在其中管理客户端与主节点之间连接的配置。
如果发生服务中断,配置会更改为下图所示:
图 2. 更新后的配置,其中故障主节点已被备用节点替换。
如果连接到数据库的客户端数量成为问题,并且由于并发数据库连接数量较多而导致性能问题,我们建议您添加应用端连接池。如果您无法执行该操作,则可以使用 PgBouncer 等工具添加数据库端连接池。
部署
在 Cloud Shell 中,克隆 Cloud 解决方案代码库后,前往 terraform 目录。
cd cloud-solutions/projects/alloydbomni-ha-patroni-etcd/terraform
创建和修改
terraform.tfvars
文件。在该文件中,为以下变量设置值。project_id = "PROJECT_ID" region = "REGION" zones = "ZONES" node_count = 3 cluster_name = "CLUSTER_NAME" replication_user_password = "REPLICATION_USER_PASSWORD" postgres_super_user_password = "PG_SUPER_USER_PASSWORD"
您可以在 GitHub 上的变量配置文件中找到每个变量的说明。
运行 Terraform 脚本以创建所有资源。
terraform init && terraform apply
此脚本会创建并配置以下内容:
您的 etcd 集群的三个节点
您的 Patroni 集群的三个节点
一个用于 HAProxy 的节点
配置 Patroni 以实现同步
如需让 Patroni 仅在您的三节点集群中使用同步复制,请在 Patroni 配置文件的引导部分中添加 synchronous_mode
、synchronous_node_count
、synchronous_commit
和 synchronous_standby_names
等配置项。Patroni 配置在启动脚本模板和 Patroni 节点上的 /alloydb/config/patroni.yml
文件中定义。如需使用同步复制,您的 Patroni 引导配置应如下所示:
bootstrap:
dcs:
ttl: 30
loop_wait: 10
retry_timeout: 10
maximum_lag_on_failover: 1048576
synchronous_mode: true
synchronous_node_count: 2
postgresql:
use_pg_rewind: true
use_slots: true
parameters:
hot_standby: "on"
wal_keep_segments: 20
max_wal_senders: 8
max_replication_slots: 8
synchronous_commit: remote_apply
synchronous_standby_names: '*'
开启 synchronous_mode
后,Pastore 会在主副本和其他副本之间使用同步复制。Patroni 使用参数 synchronous_node_count
来管理同步备用副本数量。Patroni 会根据参数 synchronous_node_count
管理同步备用副本的精确数量,并在成员加入和离开时调整配置存储区和 synchronous_standby_names
中的状态。如需详细了解同步复制,请参阅 Patroni 文档中的复制模式部分。