Patroni项目中的Citus分布式数据库支持详解
什么是Citus与Patroni集成
Patroni作为一个高可用性解决方案,为PostgreSQL的Citus扩展提供了开箱即用的支持。Citus是一个PostgreSQL扩展,可将PostgreSQL转变为分布式数据库系统,而Patroni则负责管理这些分布式节点的自动故障转移和高可用性。
部署前的准备工作
在部署Citus集群前,需要满足以下基本条件:
-
Citus扩展安装:所有节点必须安装Citus扩展,最低支持版本为10.0,但推荐使用11.2或更高版本以获得完整的故障转移功能。
-
集群配置一致性:
- 所有节点的集群名称(scope)必须相同
- 协调器(coordinator)和工作节点(worker)必须使用相同的超级用户凭据
- pg_hba.conf需要配置允许节点间的超级用户访问
-
网络通信:工作节点必须能够通过REST API访问协调器节点。
配置Patroni支持Citus
在patroni.yaml中添加以下配置段即可启用Citus支持:
citus:
group: X # 0表示协调器,1,2,3等表示工作节点
database: citus # 所有节点上必须相同
Patroni会自动处理以下事项:
- 将citus扩展添加到shared_preload_libraries
- 自动设置max_prepared_transactions参数
- 调整citus.local_hostname参数值
- 创建citus数据库并加载扩展
- 管理pg_dist_authinfo表中的认证信息
- 自动发现并注册工作节点
- 维护pg_dist_node表以反映故障转移情况
使用patronictl管理Citus集群
由于Citus集群由多个物理上独立的PostgreSQL集群组成,patronictl工具的行为有所不同:
-
默认视图:
list
和topology
命令默认显示所有Citus组成员,新增Group列标识所属组。 -
--group选项:大多数命令支持--group选项指定操作目标组。例如:
patronictl list demo --group 0 # 仅显示协调器组 patronictl list demo --group 1 # 仅显示工作节点组1
Citus工作节点切换(switchover)
Citus提供了近乎透明的切换机制:
- 协调器会暂停目标工作节点的SQL流量
- 切换完成后,新主节点准备就绪后自动恢复流量
- 整个过程对应用几乎无感知
示例切换过程:
patronictl switchover demo --group 1
Kubernetes环境部署
在Kubernetes环境中部署Citus集群时,需要注意:
-
命名规范:所有Kubernetes对象遵循
${scope}-${citus.group}-${type}
命名模式 -
标签配置:必须正确配置以下标签:
- application: patroni
- citus-group: "X" (组号)
- citus-type: coordinator/worker
- cluster-name: 集群名称
-
环境变量:Pod中需要设置相关环境变量,如PATRONI_CITUS_GROUP等
升级注意事项
Citus版本升级
- 遵循Citus官方升级文档
- 使用
patronictl restart
而非systemctl重启服务
PostgreSQL大版本升级
- 结合Citus和Patroni的升级文档
- 需要独立升级每个Patroni集群(协调器和各工作节点组)
- 注意升级顺序和依赖关系
总结
Patroni为Citus集群提供了完整的高可用性解决方案,通过自动化配置和管理简化了分布式PostgreSQL集群的运维工作。无论是初始部署、日常管理还是版本升级,Patroni都能提供一致且可靠的支持。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考