PGSQL Offline 离线从库部署

离线从库 —— 一种不承载线上业务流量,用于ETL,只读分析查询的专用实例。

离线从库

当您的在线业务请求负载水位很大时,将数据分析/ETL/个人交互式查询,备份与数据导出等任务, 放在专用的离线只读从库上是一个更为合适的选择。

离线从库默认不承载 replica 服务,只有当所有 replica 服务中的实例均不可用时,离线实例才会用于紧急承载只读流量。

  1. pg-test:
  2. hosts:
  3. 10.10.10.11: { pg_seq: 1, pg_role: primary }
  4. 10.10.10.12: { pg_seq: 2, pg_role: replica }
  5. 10.10.10.13: { pg_seq: 2, pg_role: offline } # 定义一个新的Offline实例
  6. vars:
  7. pg_cluster: pg-test

使用 bin/createpg pg-test,即可创建出该集群来。 那么可以使用 bin/createpg 10.10.10.13,进行集群扩容,向集群中添加一台离线从库实例。

  1. bin/createpg 10.10.10.13 # 向集群 pg-test 中扩容一台离线实例 10.10.10.13
  2. bin/reloadha pg-test # 重新调整 pg-test 集群的负载均衡流量

离线从库的访问受到特殊限制,这是通过额外的HBA规则实现的。例如,用户应当使用Offline服务访问离线从库。

  1. psql postgres://test:test@pg-test:5433/test

准离线从库

单独使用一台离线从库对于很多非核心场景过于奢侈,您可以将一台普通从库标记为准离线从库。

如果您只有一主一从,或者干脆只有一个主库,没有专用的离线实例,可以为该实例设置 pg_offline_query 标记。 带有该标记的实例仍然扮演原来的角色,但同时也承载 offline 服务的流量,可用作 准离线实例

  1. pg-test:
  2. hosts:
  3. 10.10.10.11: { pg_seq: 1, pg_role: primary }
  4. 10.10.10.12: { pg_seq: 2, pg_role: replica }
  5. 10.10.10.13: { pg_seq: 2, pg_role: replica, pg_offline_query: true } # 定义一个准离线实例
  6. vars:
  7. pg_cluster: pg-test

无论是您将一台 replica 重新标记为 offline,或者是为从库打上 pg_offline_query 的标记,您都需要使用以下命令调整集群 HBA:

  1. bin/reloadha pg-test # 调整集群流量分发规则
  2. bin/reloadhba pg-test # 调整集群黑白名单规则

然后即可生效。

最后修改 2022-06-05: add pgsql/deploy document (34a3325)