配置 PostgreSQL
与 Keepalived
以实现高可用性通常包括以下步骤:
PostgreSQL 配置
-
安装 PostgreSQL:在两台服务器上安装相同版本的 PostgreSQL。
sudo yum install postgresql-server postgresql-contrib
-
初始化数据库:在两台服务器上初始化 PGDATA 目录。
sudo postgresql-setup initdb
-
配置主从复制:设置一台服务器为主节点,另一台为从节点。
-
在主服务器上:
- 修改
postgresql.conf
文件以允许复制。wal_level = replica max_wal_senders = 3 wal_keep_segments = 64 archive_mode = on archive_command = 'cp %p /path_to_archive/%f'
- 在
pg_hba.conf
文件中允许从服务器的连接。host replication all 192.168.9.183/32 md5
- 修改
-
在从服务器上:
- 停止 PostgreSQL 服务。
sudo systemctl stop postgresql
- 清空 PGDATA 目录。
- 从主服务器上使用
pg_basebackup
进行基础备份。pg_basebackup -h 192.168.9.195 -D /var/lib/pgsql/data -U replicator -v -P --wal-method=stream
- 创建
recovery.conf
文件以连接到主服务器。standby_mode = 'on' primary_conninfo = 'host=192.168.9.195 port=5432 user=replicator password=yourpassword' trigger_file = '/tmp/postgresql.trigger.5432'
- 停止 PostgreSQL 服务。
-
-
启动 PostgreSQL 服务:在两台服务器上启动服务。
sudo systemctl start postgresql
Keepalived 配置
-
安装 Keepalived:如前所述,在两台服务器上安装
keepalived
。
sudo yum install keepalived -y
-
配置 Keepalived:编辑
/etc/keepalived/keepalived.conf
文件,在两台服务器上配置主从。-
在主服务器上:
vrrp_instance VI_1 { state MASTER interface ens160 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.9.200 } track_script { chk_postgresql } } vrrp_script chk_postgresql { script "/usr/lib/keepalived/check_postgres.sh" interval 2 weight 2 }
-
在从服务器上:
vrrp_instance VI_1 { state BACKUP interface ens160 virtual_router_id 51 priority 50 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.9.200 } track_script { chk_postgresql } } vrrp_script chk_postgresql { script "/usr/lib/keepalived/check_postgres.sh" interval 2 weight 2 }
-
-
创建 PostgreSQL 检查脚本:在两台服务器上创建脚本
/usr/lib/keepalived/check_postgres.sh
,用于检查 PostgreSQL 服务状态。#!/bin/bash PSQL="/usr/bin/psql" PGUSER="postgres" PGDATABASE="yourdatabase" $PSQL -U $PGUSER -d $PGDATABASE -c "select 1;" >/dev/null 2>&1 if [ $? != 0 ]; then exit 1 fi exit 0
确保脚本可执行:
sudo chmod +x /usr/lib/keepalived/check_postgres.sh
-
启动 Keepalived:在两台服务器上启动 Keepalived 服务。
sudo systemctl start keepalived sudo systemctl enable keepalived
测试和
验证
- 验证主从复制:确保主从复制正确设置且在运行。
- 测试 Failover:尝试停止主服务器上的 PostgreSQL 服务,确保 Keepalived 将虚拟 IP 地址转移到从服务器。
- 监控日志:查看 Keepalived 和 PostgreSQL 日志,确保没有错误。
配置 PostgreSQL
和 Keepalived
时,一定要考虑数据一致性和故障转移的机制。这通常涉及仔细的规划和测试,以确保在生产环境中可靠地运行。