Ubuntu PostgreSQL高可用方案
导读: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地址 } }
- 备节点配置(修改
state
为BACKUP
,priority
为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