首页主机资讯Ubuntu PostgreSQL高可用方案

Ubuntu PostgreSQL高可用方案

时间2025-10-23 10:04:04发布访客分类主机资讯浏览862
导读:Ubuntu环境下PostgreSQL高可用方案设计与实现 PostgreSQL作为企业级开源数据库,其高可用性是保障业务连续性的核心需求。在Ubuntu系统中,可通过原生流复制构建基础高可用架构,并结合集群管理工具(如Patroni、re...

Ubuntu环境下PostgreSQL高可用方案设计与实现

PostgreSQL作为企业级开源数据库,其高可用性是保障业务连续性的核心需求。在Ubuntu系统中,可通过原生流复制构建基础高可用架构,并结合集群管理工具(如Patroni、repmgr)实现自动化故障转移,或通过VIP+中间件(如Keepalived+HAProxy)提升访问可靠性。以下是具体方案的详细设计:

一、基础架构:原生流复制(Master-Slave Replication)

原生流复制是PostgreSQL内置的高可用解决方案,通过WAL(Write-Ahead Logging)日志实现主从数据同步,适用于读多写少的场景。

1. 主节点配置

  • 安装PostgreSQL:在Ubuntu上通过官方仓库安装指定版本(如15.x):
    sudo apt update &
        &
         sudo apt install postgresql postgresql-contrib -y
    
  • 修改postgresql.conf:调整WAL和复制参数,启用热备:
    wal_level = replica                # WAL级别设为replica(支持复制)
    max_wal_senders = 10               # 允许最多10个复制连接
    wal_keep_size = 128MB              # 保留WAL日志大小(避免被删除)
    hot_standby = on                   # 允许从库进入热备模式
    listen_addresses = '*'             # 监听所有IP(便于从库连接)
    
  • 修改pg_hba.conf:允许从库IP连接复制:
    host    replication     all             从库IP/32         md5
    
  • 创建复制用户:在主库中创建专用于复制的用户(如repl):
    CREATE ROLE repl WITH REPLICATION LOGIN PASSWORD '强密码';
        
    
  • 重启服务:使配置生效:
    sudo systemctl restart postgresql
    

2. 从节点配置

  • 停止服务并清空数据目录
    sudo systemctl stop postgresql
    sudo rm -rf /var/lib/postgresql/15/main/*
    
  • 使用pg_basebackup拉取主库数据:自动同步主库数据并生成standby信号文件:
    sudo -u postgres pg_basebackup -h 主库IP -U repl -D /var/lib/postgresql/15/main -P -R
    
  • 启动从库:从库会自动进入热备模式,读取主库WAL日志同步数据:
    sudo systemctl start postgresql
    

3. 验证同步状态

  • 主库查看复制进程
    SELECT * FROM pg_stat_replication;
        
    
  • 从库确认恢复状态
    SELECT pg_is_in_recovery();
      -- 返回true表示从库处于恢复模式(正常)
    

二、进阶方案:集群管理工具(Patroni + Etcd)

原生流复制需手动处理故障转移,而Patroni是基于Python的集群管理工具,结合Etcd(分布式键值存储)可实现自动故障检测与主从切换,适用于生产环境。

1. 环境准备

  • 所有节点安装依赖和Patroni:
    sudo apt install python3-pip etcd -y
    sudo pip3 install patroni[etcd]
    
  • 配置Etcd集群(至少3节点),确保节点间通信正常。

2. 配置Patroni

  • 在主节点创建/etc/patroni.yml(示例):
    scope: postgres_cluster
    namespace: /db/
    name: pg01  # 节点名称(需唯一)
    restapi:
      listen: 0.0.0.0:8008
      connect_address: 主库IP:8008
    etcd:
      hosts:
        - etcd1IP:2379
        - etcd2IP:2379
        - etcd3IP:2379
    bootstrap:
      dcs:
        ttl: 30
        loop_wait: 10
        retry_timeout: 10
        maximum_lag_on_failover: 1048576
        postgresql:
          use_pg_rewind: true
          use_slots: true
          parameters:
            wal_level: replica
            max_wal_senders: 10
            wal_keep_size: 128
            hot_standby: on
      initdb:
        - encoding: UTF8
        - locale: en_US.UTF-8
      pg_hba:
        - host replication repl 从库IP/32 md5
        - host all all 0.0.0.0/0 md5
    postgresql:
      listen: 0.0.0.0:5432
      connect_address: 主库IP:5432
      data_dir: /var/lib/postgresql/15/main
      pg_hba:  # 同bootstrap.pg_hba
      authentication:
        replication:
          username: repl
          password: 强密码
        superuser:
          username: postgres
          password: 强密码
    
  • 启动Patroni服务:
    sudo patroni /etc/patroni.yml
    

3. 验证集群状态

  • 访问Patroni REST API查看集群状态:
    curl http://主库IP:8008/patroni
    
    返回结果中role字段显示主节点(master),其他节点为replica

4. 故障转移测试

  • 手动停止主库Patroni服务:
    sudo systemctl stop patroni
    
  • 观察Etcd中的集群状态,Patroni会自动选举新的主节点(通常为优先级最高的从节点)。

三、高可用访问:VIP + Keepalived + HAProxy

为解决单点故障问题,可通过VIP(虚拟IP)将流量导向可用节点,结合Keepalived实现VIP漂移,HAProxy实现读写分离。

1. Keepalived配置(主备节点)

  • 安装Keepalived:
    sudo apt install keepalived -y
    
  • 主节点配置/etc/keepalived/keepalived.conf
    vrrp_instance VI_1 {
    
      state MASTER
      interface eth0  # 网卡名称(通过ip a查看)
      virtual_router_id 51  # 虚拟路由ID(集群内唯一)
      priority 100  # 优先级(主节点高于备节点)
      advert_int 1
      authentication {
    
        auth_type PASS
        auth_pass 1234
      }
    
      virtual_ipaddress {
    
        10.24.57.101  # VIP地址
      }
    
    }
        
    
  • 备节点配置(修改stateBACKUPpriority为90)。

2. HAProxy配置(负载均衡)

  • 安装HAProxy:
    sudo apt install haproxy -y
    
  • 配置/etc/haproxy/haproxy.cfg
    frontend postgres_frontend
      bind *:5432
      mode tcp
      default_backend postgres_backend
    
    backend postgres_backend
      mode tcp
      balance roundrobin
      option pgsql-check user=postgres  # 健康检查(需PostgreSQL允许)
      server pg01 主库IP:5432 check inter 2000 rise 2 fall 3
      server pg02 从库IP:5432 check inter 2000 rise 2 fall 3 backup  # 从库设为backup
    

3. 启动服务

  • 启动Keepalived和HAProxy:
    sudo systemctl start keepalived &
        &
         sudo systemctl start haproxy
    
  • 通过VIP(10.24.57.101)访问PostgreSQL,HAProxy会自动将写请求导向主节点,读请求分发到从节点。

四、监控与维护

高可用系统的稳定性依赖于持续的监控,建议使用以下工具:

  • pg_stat_activity:监控数据库连接和查询状态。
  • pg_stat_replication:查看主从复制延迟。
  • Prometheus + Grafana:可视化集群状态(如Patroni节点健康、HAProxy负载)。
  • 日志分析:收集PostgreSQL、Patroni、Keepalived日志,及时发现故障隐患。

以上方案覆盖了Ubuntu环境下PostgreSQL从基础到进阶的高可用需求,可根据业务规模(如数据量、并发量)和容灾要求(如RTO、RPO)选择合适的架构。例如,中小规模业务可采用原生流复制+Keepalived,大规模分布式业务则推荐Patroni+Etcd+HAProxy组合。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Ubuntu PostgreSQL高可用方案
本文地址: https://pptw.com/jishu/733165.html
Ubuntu PostgreSQL定时任务设置 Ubuntu PostgreSQL数据同步策略

游客 回复需填写必要信息