基于PGPool的1主2从PostgreSQL流复制HA的搭建

本文介绍了如何使用PGPool搭建1主2从的PostgreSQL流复制高可用(HA)集群。通过PGPool的监控和故障切换功能,确保在主节点故障时能自动切换到从节点,同时讨论了配置、故障测试及错误处理等环节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于PGPool的1主2从PostgreSQL流复制HA的搭建

PostgreSQL的流复制为HA提供了很好的支持,但是部署HA集群还需要专门的HA组件, 比如通用的Pacemaker+Corosync。pgpool作为PostgreSQL的中间件,也提供HA功能。

pgpool可以监视后端PostgreSQL的健康并实施failover,由于应用的所有流量都经过pgpool,可以很容易对故障节点进行隔离, 但,同时必须为pgpool配置备机,防止pgpool本身成为单点。pgpool自身带watchdog组件通过quorum机制防止脑裂, 因此建议pgpool节点至少是3个,并且是奇数。在失去quorum后watchdog会自动摘除VIP,并阻塞客户端连接。

下面利用pgpool搭建3节点PostgreSQL流复制的HA集群。 集群的目标为强数据一致HA,实现思路如下:

  • 基于PostgreSQL的1主2从同步复制
  • Slave的复制连接字符串使用固定的pgsql_primary作为Master的主机名,在/etc/hosts中将Master的ip映射到pgsql_primary上,通过/etc/hosts的修改实现Slave对复制源(Master)的切换。 之所以采取这种方式是为了避免直接修改recovery.conf后重启postgres进程时会被pgpool检测到并设置postgres后端为down状态。
  • pgpool分别部署在3个节点上,pgpool的Master和PostgreSQL的Primary最好不在同一个节点上,这样在PostgreSQL的Primary down时可以干净的隔离故障机器。

环境

软件

  • CentOS 7.0
  • PGPool 3.5
  • PostgreSQL9.5

节点

  • node1 192.168.0.211
  • node2 192.168.0.212
  • node3 192.168.0.213
  • vip 192.168.0.220

配置

  • PostgreSQL Port:5433
  • 复制账号:replication/replication
  • 管理账号:admin/admin

前提

  • 3个节点建立ssh互信。
  • 3个节点配置好主机名解析(/etc/hosts)
    将pgsql_primary解析为主节点的IP

    [postgres@node3 ~]$ cat /etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    192.168.0.211 node1
    192.168.0.212 node2
    192.168.0.213 node3
    192.168.0.211 pgsql_primary 
  • 3个节点事先装好PostgreSQL,并配置1主2从同步流复制,node1是主节点。
    在2个Slave节点node2和node3上设置recovery.conf中的复制源的主机名为pgsql_primary

    [postgres@node3 ~]$ cat /data/postgresql/data/recovery.conf 
    standby_mode = 'on'
    primary_conninfo = 'host=pgsql_primary port=5433 application_name=node3 user=replication password=replication keepalives_idle=60 keepalives_interval=5 keepalives_count=5'
    restore_command
### PostgreSQL 中间件的使用场景及推荐 #### 使用场景 PostgreSQL 中间件通常被用来实现数据同步、分片管理、读写分离等功能。以下是常见的使用场景: 1. **数据同步** 当多个数据库实例之间需要保持致性时,中间件可以帮助完成实时或近实时的数据同步。例如,在分布式环境中,通过中间件将库中的更新操作复制到从库中[^4]。 2. **读写分离** 对于高并发访问的应用程序,可以通过中间件来分配读请求和写请求至不同的节点,从而提高系统的整体吞吐量并降低单个节点的压力[^2]。 3. **负载均衡** 在多副本架构下,利用中间件可以动态调整客户端连接的目标服务器,确保各节点之间的负载均匀分布[^3]。 4. **跨平台迁移** 如果存在异构数据库环境下的数据交换需求,则可借助某些特定类型的中间件来进行格式转换与传输控制[^1]。 5. **监控与审计** 借助专门设计用于捕捉SQL执行计划变更或者记录慢查询日志等功能模块化的解决方案, 实现对企业内部敏感信息流动路径的有效追踪。 #### 推荐工具/框架 基于上述提到的需求方向及相关特性描述如下几种适合不同任务目标的技术选项: 1. **PgBouncer** - 功能简介:专注于连接池管理服务端口监听模式支持两种工作方式即会话级(Session pooling) 和语句级(Statement pooling),能够显著减少频繁建立销毁TCP链接所带来的资源消耗问题。 - 应用领域:适用于那些短生命周期但高频次调用API接口的服务单元部署方案之中。 2. **Slony-I / Bucardo** - 功能简介:两者均属于老牌开源项目范畴内的逻辑复制引擎类别产品;其中前者更强调细粒度分区策略定制能力而后者则突出灵活性强适应范围广的特点。 - 应用领域:当面临复杂的业务流程重组或是地理距离较远站点间的协同作业挑战之时尤为有用。 3. **pgpool-II** - 功能简介:综合型多功能组件集合体不仅具备基本的联机事务处理优化手段还包括自动故障切换机制以及只读扩展属性设定等等附加价值要素在里面。 - 应用领域:特别适合作为企业级生产环境下核心支撑角色参与进来负责协调整个集群运作秩序维持稳定可靠运行状态。 4. **Patroni & Zalando’s Spilo (HA组合套件)** - 功能简介:围绕着高度可用性的题展开讨论提出了完整的自动化运维治理体系覆盖了选举领导者算法定义健康状况探测标准直至最终实施灾难恢复预案全过程环节无遗漏。 - 应用领域:针对金融支付类对安全性要求极高的行业客户群体而言无疑是最佳实践范本之。 5. **Debezium Connector for PostgreSQL** - 功能简介:依托Apache Kafka Connect API打造而成的款增量捕获(CDC)专用插件形式存在的软件资产,擅长捕捉源表结构元数据变动事件流并通过标准化消息队列传递给下游消费者消费掉。 - 应用领域:非常适合搭建ETL流水线工程助力大数据分析挖掘潜力无限释放出来。 --- ```python import psycopg2 from pgproto3 import ProtocolV3 def connect_to_postgresql(): """示例函数展示如何创建个简单的PostgreSQL连接""" try: connection = psycopg2.connect( dbname="your_db", user="your_user", password="your_password", host="localhost" ) cursor = connection.cursor() cursor.execute("SELECT version();") db_version = cursor.fetchone()[0] print(f"Connected to {db_version}") except Exception as e: print(e) connect_to_postgresql() # 下面是个关于pgproto3使用的简单例子 protocol_instance = ProtocolV3() message = protocol_instance.encode_message({"type": "query", "string": "SELECT * FROM users;"}) print(message) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值