PGSQL Offline 离线从库部署
离线从库 —— 一种不承载线上业务流量,用于ETL,只读分析查询的专用实例。
离线从库
当您的在线业务请求负载水位很大时,将数据分析/ETL/个人交互式查询,备份与数据导出等任务, 放在专用的离线只读从库上是一个更为合适的选择。
离线从库默认不承载 replica 服务,只有当所有 replica 服务中的实例均不可用时,离线实例才会用于紧急承载只读流量。
pg-test:
hosts:
10.10.10.11: { pg_seq: 1, pg_role: primary }
10.10.10.12: { pg_seq: 2, pg_role: replica }
10.10.10.13: { pg_seq: 2, pg_role: offline } # 定义一个新的Offline实例
vars:
pg_cluster: pg-test
使用 bin/createpg pg-test
,即可创建出该集群来。 那么可以使用 bin/createpg 10.10.10.13
,进行集群扩容,向集群中添加一台离线从库实例。
bin/createpg 10.10.10.13 # 向集群 pg-test 中扩容一台离线实例 10.10.10.13
bin/reloadha pg-test # 重新调整 pg-test 集群的负载均衡流量
离线从库的访问受到特殊限制,这是通过额外的HBA规则实现的。例如,用户应当使用Offline服务访问离线从库。
psql postgres://test:test@pg-test:5433/test
准离线从库
单独使用一台离线从库对于很多非核心场景过于奢侈,您可以将一台普通从库标记为准离线从库。
如果您只有一主一从,或者干脆只有一个主库,没有专用的离线实例,可以为该实例设置 pg_offline_query 标记。 带有该标记的实例仍然扮演原来的角色,但同时也承载 offline 服务的流量,可用作 准离线实例。
pg-test:
hosts:
10.10.10.11: { pg_seq: 1, pg_role: primary }
10.10.10.12: { pg_seq: 2, pg_role: replica }
10.10.10.13: { pg_seq: 2, pg_role: replica, pg_offline_query: true } # 定义一个准离线实例
vars:
pg_cluster: pg-test
无论是您将一台 replica
重新标记为 offline
,或者是为从库打上 pg_offline_query
的标记,您都需要使用以下命令调整集群 HBA:
bin/reloadha pg-test # 调整集群流量分发规则
bin/reloadhba pg-test # 调整集群黑白名单规则
然后即可生效。
最后修改 2022-06-05: add pgsql/deploy document (34a3325)