您可以在数据库实例的清单文件中定义读取池实例配置。每个读取池实例都需要创建一个唯一的清单文件。您可以部署多个读取池实例,每个数据库集群最多可以有 20 个读取池节点。
每个读取池实例占用的存储空间与其复制的实例相同。
创建异步复制的读取池实例
如需创建 AlloyDB Omni 异步复制的读取池实例,请完成以下步骤:
创建数据库实例清单以定义读取池实例类型:
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。
应用
DBInstance规范。alloydbctlalloydbctl 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 字段。
打开
DBInstance清单文件,然后修改nodeCount值以反映所选的节点数。使用您首选的部署方法(
alloydbctl apply命令或 Ansible 策略方案)应用更新后的清单。
RPM 编排器会自动预配或移除读取副本节点,并且负载均衡器会动态更新,以将流量路由到池中的可用节点。
删除读取池实例
如需删除读取池实例,请使用 alloydbctl delete 命令:
alloydbctl delete -t DBInstance -n READ_POOL_INSTANCE_NAME将 READ_POOL_INSTANCE_NAME 替换为您要删除的读取池实例的名称。
删除读取池实例时,编排器会停止读取副本服务并清理节点。负载均衡器会自动移除路由,而不会导致任何提升死锁或影响主实例或备用实例的流量。