本页介绍了如何为 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 Solutions 代码库后,前往 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
后,Patroni 会在主副本和其他副本之间使用同步复制。Patroni 使用参数 synchronous_node_count
来管理同步待机副本的数量。Patroni 会根据参数 synchronous_node_count
管理同步待机副本的确切数量,并在成员加入和离开时调整配置存储区和 synchronous_standby_names
中的状态。如需详细了解同步复制,请参阅 Patroni 文档中的复制模式部分。