创建高可用性设置

本页介绍了如何为 AlloyDB Omni 设置高可用性配置。本页仅介绍如何在高可用性配置中创建新的 AlloyDB Omni 实例。不涵盖将现有实例转换为高可用性实例。

准备工作

  1. 请参阅高可用性和数据弹性

  2. 如果您还没有项目,请创建一个 Google Cloud 项目。

  3. 确保您的项目已启用结算功能。

  4. 在 Google Cloud 控制台中打开 Cloud Shell。

  5. 在 Google Cloud 控制台中,克隆以下源代码库。

    git clone https://github.com/GoogleCloudPlatform/cloud-solutions.git
    

安装

在本指南中,我们将部署一个包含 AlloyDB Omni 的三个节点 Patroni 集群,并将三个节点集群 etcd 用作配置存储区。在集群前端,我们在托管式实例组中使用 HAProxy 来处理浮动 IP 地址,以便客户端透明地进行故障切换。

此设置的初始配置如下图所示:

配置:HAProxy 管理客户端与主节点之间的连接

图 1. 配置:HAProxy 管理客户端与主节点之间的连接。

如果发生服务中断,配置会更改为下图所示:

更新后的配置,其中失败的主节点已被备用节点取代

图 2. 更新后的配置,其中故障主节点已被备用节点取代。

如果连接到数据库的客户端数量成为问题,并且由于并发数据库连接数量过多而导致性能问题,我们建议您添加应用端连接池。如果无法执行此操作,您可以使用 PgBouncer 等工具添加数据库端连接池。

部署

  1. 在 Cloud Shell 中,克隆 Cloud Solutions 代码库后,前往 terraform 目录。

    cd cloud-solutions/projects/alloydbomni-ha-patroni-etcd/terraform
    
  2. 创建和修改 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 上的变量配置文件

  3. 运行 Terraform 脚本以创建所有资源。

    terraform init && terraform apply
    

    此脚本会创建并配置以下内容:

    • 三个 etcd 集群节点

    • 三个 Patroni 集群节点

    • 一个 HAProxy 节点

将 Patroni 配置为同步

如需让 Patroni 在三节点集群中仅使用同步复制,请在 Patroni 配置文件的引导部分中添加 synchronous_modesynchronous_node_countsynchronous_commitsynchronous_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 文档中的复制模式部分。

后续步骤