在CentOS上设计PostgreSQL的高可用性架构,可以采用多种策略和技术。以下是一个基本的设计方案,使用了Patroni和Keepalived来实现高可用性:
在所有服务器上安装PostgreSQL:
sudo yum install -y postgresql-server
初始化数据库并启动服务:
sudo postgresql-setup initdb
sudo systemctl start postgresql
sudo systemctl enable postgresql
编辑主节点的postgresql.conf
文件:
sudo vi /var/lib/pgsql/data/postgresql.conf
修改以下参数:
listen_addresses = '*' # 监听所有IP
wal_level = replica # 设置为replica级别
max_wal_senders = 10 # 允许的最大WAL发送者数量
wal_keep_segments = 64 # 保留的WAL文件数量
hot_standby = on # 启用热备
编辑pg_hba.conf
文件:
sudo vi /var/lib/pgsql/data/pg_hba.conf
添加以下行以允许从节点连接:
host replication replicator 192.168.1.0/24 md5
重启PostgreSQL服务:
sudo systemctl restart postgresql
在从节点上执行以下步骤:
停止PostgreSQL服务:
sudo systemctl stop postgresql
备份主节点数据:
sudo pg_basebackup -h <master_ip> -U replicator -D /var/lib/pgsql/data --wal-method=stream --no-password
修改从节点的postgresql.conf
文件:
sudo vi /var/lib/pgsql/data/postgresql.conf
修改以下参数:
listen_addresses = '*' # 监听所有IP
wal_level = replica # 设置为replica级别
max_wal_senders = 10 # 允许的最大WAL发送者数量
hot_standby = on # 启用热备
修改从节点的recovery.conf
文件:
sudo vi /var/lib/pgsql/data/recovery.conf
添加以下内容:
standby_mode = 'on'
primary_conninfo = 'host=<master_ip> dbname=postgres user=replicator password=<password>'
restore_command = 'cp /var/lib/pg_xlog/archive/%f %p'
trigger_file = '/tmp/postgresql.trigger.5432'
启动从节点PostgreSQL服务:
sudo systemctl start postgresql
Patroni是一个用于管理PostgreSQL高可用性的工具。
在所有服务器上安装Patroni:
sudo yum install -y python-pip
sudo pip install patroni
创建Patroni配置文件/etc/patroni.yml
:
scope: postgres
namespace: /db
name: postgres_master
restapi:
listen: 0.0.0.0:8008
connect_address: <master_ip>
etcd:
host: <etcd_ip>
port: 2379
scheme: http
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_connections: 100
shared_buffers: 25% of total RAM
work_mem: 4MB
maintenance_work_mem: 128MB
effective_cache_size: 75% of total RAM
postgresql:
listen: 0.0.0.0:5432
connect_address: <master_ip>
data_dir: /var/lib/pgsql/data
pg_hba:
- host replication replicator 0.0.0.0/0 md5
authentication:
replication:
username: replicator
password: <password>
parameters:
wal_level: replica
max_connections: 100
shared_buffers: 25% of total RAM
work_mem: 4MB
maintenance_work_mem: 128MB
effective_cache_size: 75% of total RAM
postgresql:
listen: 0.0.0.0:5433
connect_address: <slave_ip>
data_dir: /var/lib/pgsql/data
pg_hba:
- host replication replicator 0.0.0.0/0 md5
authentication:
replication:
username: replicator
password: <password>
parameters:
wal_level: replica
max_connections: 100
shared_buffers: 25% of total RAM
work_mem: 4MB
maintenance_work_mem: 128MB
effective_cache_size: 75% of total RAM
在主节点上启动Patroni:
sudo patroni /etc/patroni.yml
Patroni会自动检测并管理PostgreSQL集群。
Keepalived用于实现虚拟IP(VIP)的高可用性。
在所有服务器上安装Keepalived:
sudo yum install -y keepalived
创建Keepalived配置文件/etc/keepalived/keepalived.conf
:
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass <password>
}
virtual_ipaddress {
<vip_ip>
}
}
virtual_server <vip_ip> 5432 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP
real_server <master_ip> 5432 {
weight 1
TCP_CHECK {
connect_timeout 10
connect_port 5432
}
}
real_server <slave_ip> 5432 {
weight 1
TCP_CHECK {
connect_timeout 10
connect_port 5432
}
}
}
在所有服务器上启动Keepalived:
sudo systemctl start keepalived
<vip_ip>
,应该能够连接到PostgreSQL数据库。通过以上步骤,你可以在CentOS上实现一个基本的PostgreSQL高可用性架构。根据实际需求,可以进一步优化和扩展。