Patroni项目中的Citus分布式数据库支持详解

Patroni项目中的Citus分布式数据库支持详解

patroni A template for PostgreSQL High Availability with Etcd, Consul, ZooKeeper, or Kubernetes patroni 项目地址: https://gitcode.com/gh_mirrors/pa/patroni

概述

Patroni作为PostgreSQL高可用解决方案,为Citus分布式数据库提供了开箱即用的支持。Citus是PostgreSQL的一个扩展,能够将PostgreSQL转变为分布式数据库系统。本文将详细介绍如何在Patroni环境中部署和管理Citus集群。

基本要求

在Patroni中部署Citus集群需要满足以下条件:

  1. Citus扩展:所有节点必须安装Citus数据库扩展,最低支持版本为10.0,但建议使用11.2及以上版本以获得完整功能

  2. 集群配置

    • 所有节点的集群名称(scope)必须相同
    • 协调器(coordinator)和工作节点(worker)必须使用相同的超级用户凭据
    • pg_hba.conf必须允许所有节点间的超级用户访问
  3. 网络配置

    • 工作节点必须能够访问协调器的REST API
    • 如果配置了客户端证书,协调器必须接受来自工作节点的证书

配置指南

patroni.yaml中添加以下Citus专用配置:

citus:
  group: X  # 0表示协调器,1,2,3等表示工作节点
  database: citus  # 所有节点必须使用相同的数据库名

配置完成后,Patroni会自动处理以下事项:

  1. 自动将bootstrap.dcs.synchronous_mode设置为quorum模式(如果未显式设置)
  2. citus扩展添加到shared_preload_libraries
  3. 自动设置max_prepared_transactions2*max_connections(如果未显式设置)
  4. 调整citus.local_hostnameGUC值,确保与Patroni使用的连接地址一致
  5. 自动创建指定的Citus数据库并安装扩展
  6. pg_dist_authinfo表中添加当前超级用户凭据以支持节点间通信
  7. 协调器主节点自动发现工作节点并将其添加到pg_dist_node
  8. 在发生故障转移/切换时维护pg_dist_node

集群管理工具

Patroni的patronictl工具针对Citus集群进行了特殊适配:

  1. 列表和拓扑视图:默认显示Citus集群的所有成员(协调器和工作节点),新增"Group"列显示所属组
  2. --group选项:新增的--group选项允许针对特定组执行操作

示例输出:

+ Citus cluster: demo ----------+----------------+---------+----+-------------+-----+------------+-----+
| Group | Member  | Host        | Role           | State   | TL | Receive LSN | Lag | Replay LSN | Lag |
+-------+---------+-------------+----------------+---------+----+-------------+-----+------------+-----+
|     0 | coord1  | 172.27.0.10 | Replica        | running |  1 |   0/41C0368 |   0 |  0/41C0368 |   0 |
|     0 | coord2  | 172.27.0.6  | Quorum Standby | running |  1 |   0/41C0368 |   0 |  0/41C0368 |   0 |
|     0 | coord3  | 172.27.0.4  | Leader         | running |  1 |             |     |            |     |
|     1 | work1-1 | 172.27.0.8  | Quorum Standby | running |  1 |   0/31D3198 |   0 |  0/31D3198 |   0 |
|     1 | work1-2 | 172.27.0.2  | Leader         | running |  1 |             |     |            |     |
|     2 | work2-1 | 172.27.0.5  | Quorum Standby | running |  1 |   0/31CDFC0 |   0 |  0/31CDFC0 |   0 |
|     2 | work2-2 | 172.27.0.7  | Leader         | running |  1 |             |     |            |     |
+-------+---------+-------------+----------------+---------+----+-------------+-----+------------+-----+

工作节点切换

Citus工作节点的切换过程对应用程序几乎是透明的:

  1. 协调器会暂停对目标工作节点分片的SQL流量
  2. 切换操作在流量暂停期间进行
  3. 当新的主工作节点准备就绪后,流量自动恢复

这一过程通过Citus的citus_update_node函数实现,确保应用程序几乎不会感知到切换操作。

从节点支持

从Patroni v4.0.0开始,没有noloadbalance标签的Citus从节点也会注册到pg_dist_node表中。应用程序可以通过设置citus.use_secondary_nodesGUC来使用这些从节点处理只读查询。

Kubernetes部署

在Kubernetes环境中部署Citus集群时,Patroni会为每个Citus组创建独立的Kubernetes对象,命名模式为${scope}-${citus.group}-${type}。所有Pod、Endpoints和ConfigMaps都必须包含相应的标签。

示例协调器配置:

apiVersion: v1
kind: Pod
metadata:
  labels:
    application: patroni
    citus-group: "0"
    citus-type: coordinator
    cluster-name: citusdemo
spec:
  containers:
  - env:
    - name: PATRONI_SCOPE
      value: citusdemo
    - name: PATRONI_CITUS_GROUP
      value: "0"

Patroni会自动为创建的Kubernetes对象(如ConfigMaps和Endpoints)添加citus-group标签,确保集群组件能够正确识别所属的Citus组。

总结

Patroni为Citus分布式数据库提供了全面的高可用支持,简化了部署和管理流程。通过自动化的节点发现、配置管理和故障处理,Patroni使Citus集群的运维变得更加简单可靠。无论是在传统环境还是Kubernetes中,Patroni都能为Citus集群提供强大的高可用保障。

patroni A template for PostgreSQL High Availability with Etcd, Consul, ZooKeeper, or Kubernetes patroni 项目地址: https://gitcode.com/gh_mirrors/pa/patroni

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

田子蜜Robust

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值