使用 RPM 编排器创建异步复制的读取池实例

选择文档版本:

如需提高数据库集群的读取吞吐量和可用性,您可以创建异步读取池实例。读取池实例可提供数据库实例的只读克隆,以确保即使在数据库实例不可用时也可以访问数据。

您可以在数据库实例的清单文件中定义读取池实例配置。每个读取池实例都需要创建一个唯一的清单文件。您可以部署多个读取池实例,每个数据库集群最多可以有 20 个读取池节点。

每个读取池实例占用的存储空间与其复制的实例相同。

创建异步复制的读取池实例

如需创建 AlloyDB Omni 异步复制的读取池实例,请完成以下步骤:

  1. 创建数据库实例清单以定义读取池实例类型:

    DBInstance:
      metadata:
        name: READ_POOL_INSTANCE_NAME
      spec:
        instanceType: ReadPool
        nodeCount: READ_POOL_NODE_COUNT
        readPoolPort: READ_POOL_PORT
        dbcParent:
          name: DB_CLUSTER_NAME
    

    替换以下内容:

    • READ_POOL_INSTANCE_NAME:此资源的名称,例如 read-pool-instance-1。

    • DB_CLUSTER_NAME:实例所属数据库集群的名称。

    • READ_POOL_NODE_COUNT:(可选)读取池实例中的节点数。这决定了实例的总计算容量。每个数据库集群最多可以有 20 个读取池节点。

    • READ_POOL_PORT:(可选)负载均衡器 (VIP) 上的端口,用于将读取流量路由到此读取池实例。默认值为 5434。

  2. 应用 DBInstance 规范。

    alloydbctl

    alloydbctl apply -d "DEPLOYMENT_SPECIFICATION_PATH" -r "DBINSTANCE_SPECIFICATION"

    执行以下变量替换操作:

    • DEPLOYMENT_SPECIFICATION_PATH: 您在 安装 AlloyDB Omni 组件中创建的部署规范的路径。

    • DBINSTANCE_SPECIFICATION:您在上一步中创建的 DBInstance 清单文件的路径。

    Ansible

    ansible-playbook DBINSTANCE_PLAYBOOK -i "DEPLOYMENT_SPECIFICATION_PATH" \
          -e resource_spec="DBINSTANCE_SPECIFICATION"

    执行以下变量替换操作:

    • DBINSTANCE_PLAYBOOK:您为 DBInstance 规范创建的策略方案的路径。

    • DEPLOYMENT_SPECIFICATION_PATH: 您在 安装 AlloyDB Omni 组件中创建的部署规范的路径。

    • DBINSTANCE_SPECIFICATION:您在上一步中创建的 DBInstance 清单文件的路径。

验证实例状态

如需验证读取池实例的可用性,请获取 DBInstance 资源的状态:

alloydbctl

alloydbctl get -d "DEPLOYMENT_SPECIFICATION_PATH" -t DBInstance -n "READ_POOL_INSTANCE_NAME" -o yaml

执行以下变量替换操作:

  • DEPLOYMENT_SPECIFICATION_PATH: 您在 安装 AlloyDB Omni 组件中创建的部署规范的路径。

  • READ_POOL_INSTANCE_NAME:您在清单中指定的读取池实例的名称。

Ansible

运行 google.alloydbomni_orchestrator.status 策略方案。如需了解详情,请参阅获取集群状态。

ansible-playbook STATUS_PLAYBOOK_PATH -i "DEPLOYMENT_SPECIFICATION_PATH" \
      -e resource_type="DBInstance" -e resource_name="READ_POOL_INSTANCE_NAME"

执行以下变量替换操作:

  • STATUS_PLAYBOOK_PATH:您为获取集群状态而创建的策略方案的路径。

  • DEPLOYMENT_SPECIFICATION_PATH: 您在 安装 AlloyDB Omni 组件中创建的部署规范的路径。

  • READ_POOL_INSTANCE_NAME:您在清单中指定的读取池实例的名称。

检查响应的 .status.conditions 部分,了解以下内容:

  • 如果 Available 条件的状态为 true,则表示读取池实例可以处理查询,但可能不会从您的数据库实例复制数据。
  • 如果 Streaming 条件的状态为 true,则表示读取池实例已连接到您的数据库实例,并且正在主动流式传输更改。

当数据库实例无法访问时,读取池实例会继续处理查询。在这种情况下,可用性状态将为 true,而流式传输状态将为 false。

设置读取池实例后,可在读取池实例上读取对主数据库实例中的行执行的所有插入、更新和删除操作。

连接到读取池实例

读取池实例变为 Available 后,负载均衡器会自动配置一个专用只读前端,用于将流量路由到读取池节点。

如需查看连接端点,请检查 DBInstance 状态输出中的 status.endpoints。只读端点(例如 VIP_IP:5434)会将传入的只读查询分发到读取池中的所有正常节点。

如需连接到读取池实例,请使用 psql 客户端工具以及端点中的 IP 地址和端口:

psql -h VIP_IP -p READ_POOL_PORT -U postgres

替换以下内容:

  • VIP_IP:只读端点的 IP 地址。
  • READ_POOL_PORT:只读端点的端口。

如果您尝试对此端点执行写入操作,这些操作会立即失败,并显示一条错误,指出您无法在只读事务中执行插入操作。

管理读取池实例

RPM 编排器支持动态伸缩和删除读取池实例,且集群停机时间为零。

扩缩读取池实例

如需在现有读取池中添加或移除节点,请更新 DBInstance 清单文件中的 nodeCount 字段。

  1. 打开 DBInstance 清单文件,然后修改 nodeCount 值以反映所选的节点数。

  2. 使用您首选的部署方法(alloydbctl apply 命令或 Ansible 策略方案)应用更新后的清单。

RPM 编排器会自动预配或移除读取副本节点,并且负载均衡器会动态更新,以将流量路由到池中的可用节点。

删除读取池实例

如需删除读取池实例,请使用 alloydbctl delete 命令:

alloydbctl delete -t DBInstance -n READ_POOL_INSTANCE_NAME

将 READ_POOL_INSTANCE_NAME 替换为您要删除的读取池实例的名称。

删除读取池实例时,编排器会停止读取副本服务并清理节点。负载均衡器会自动移除路由,而不会导致任何提升死锁或影响主实例或备用实例的流量。