在Debian上实现PostgreSQL的高可用性,可以采用多种方法,其中最常见的是使用Patroni和Keepalived或者使用Pgpool-II。以下是使用Patroni和Keepalived实现高可用性的基本步骤:
-
安装PostgreSQL:
在所有节点上安装PostgreSQL。sudo apt-get update sudo apt-get install postgresql postgresql-contrib -
配置PostgreSQL:
在每个节点上编辑postgresql.conf和pg_hba.conf文件,确保它们配置正确,允许节点间的通信。 -
安装Patroni:
Patroni是一个用于管理PostgreSQL高可用性的工具。首先,你需要安装Patroni。sudo apt-get install python3-pip sudo pip3 install patroni -
配置Patroni:
创建一个Patroni配置文件(例如/etc/patroni.yml),并为每个节点指定配置。以下是一个基本的配置示例:scope: postgresql namespace: /db/ name: postgresql restapi: listen: 0.0.0.0 connect_address: 192.168.1.100 # 替换为实际的IP地址 etcd: host: 192.168.1.101 # 替换为实际的IP地址 port: 2379 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 hot_standby: on postgresql: listen: 0.0.0.0 connect_address: 192.168.1.100 # 替换为实际的IP地址 data_dir: /var/lib/postgresql/12/main pg_hba: - host replication replicator 192.168.1.0/24 md5 - host all all 0.0.0.0/0 md5 authentication: replication: username: replicator password: yourpassword # 替换为实际的密码 superuser: username: postgres password: yourpassword # 替换为实际的密码 tags: - nofailover - noloadbalance - clonefrom - nosync # 其他节点的配置...为每个节点创建一个配置文件,并确保
name和connect_address是唯一的。 -
启动Patroni:
在每个节点上启动Patroni服务。sudo patroni /etc/patroni.yml -
安装和配置Keepalived:
Keepalived用于提供虚拟IP地址,以便在主节点故障时自动切换到备用节点。sudo apt-get install keepalived编辑Keepalived配置文件(例如
/etc/keepalived/keepalived.conf),添加以下内容:vrrp_instance VI_1 { state MASTER # 在备用节点上设置为BACKUP interface eth0 # 替换为实际的网络接口 virtual_router_id 51 priority 100 # 在备用节点上设置为99 advert_int 1 authentication { auth_type PASS auth_pass yourpassword # 替换为实际的密码 } virtual_ipaddress { 192.168.1.200 # 替换为实际的虚拟IP地址 } }启动Keepalived服务:
sudo systemctl start keepalived sudo systemctl enable keepalived -
验证配置:
确保所有节点都正常运行,并且虚拟IP地址已经分配给主节点。你可以通过以下命令检查Patroni的状态:sudo patroni --config /etc/patroni.yml status检查Keepalived的状态:
sudo systemctl status keepalived
通过以上步骤,你可以在Debian上实现PostgreSQL的高可用性。请根据实际的网络环境和需求调整配置。