PostgreSQL 是一款功能强大的关系型数据库管理系统,既可以运行在 Linux 系统上,也可以运行在其他操作系统上。为了提高 PostgreSQL 的可用性和性能,我们通常需要将其部署为主从服务器架构,并使用 pgpool-II 工具实现快速主从切换。下面是详细的步骤:
-
离线安装 PostgreSQL 12
1.1 下载 PostgreSQL 12 的离线安装包,可以在官网下载链接中找到:https://www.postgresql.org/download/linux/redhat/。
1.2 将安装包传输到 CentOS 服务器上,例如:/opt 目录下。
1.3 打开终端并切换到 root 用户,然后执行以下命令解压缩:
cd /opt
tar xvfz postgresql-12.*.tar.gz
1.4 安装依赖库:
yum install -y readline-devel zlib-devel openssl-devel
1.5 创建 PostgreSQL 数据目录:
mkdir /opt/pgsql/data
chown postgres:postgres /opt/pgsql/data
1.6 切换到 postgres 用户并初始化数据库:
su - postgres
/opt/postgresql-12.*/bin/initdb -D /opt/pgsql/data/
1.7 修改数据目录的权限:
chmod 700 /opt/pgsql/data
1.8 启动 PostgreSQL 服务:
/opt/postgresql-12.*/bin/pg_ctl -D /opt/pgsql/data/ start
1.9 修改 postgres 用户密码:
psql -c "ALTER USER postgres WITH PASSWORD 'your_password';"
-
配置主从服务器
2.1 在主服务器中修改 postgresql.conf 文件,设置以下参数:
listen_addresses = '*'
wal_level = replica
max_wal_senders = 10
wal_keep_segments = 64
archive_mode = on
archive_command = 'rsync -a %p user@slave:/path/to/archive/%f'
2.2 在 pg_hba.conf 文件中添加从服务器 IP 地址的访问规则:
host replication all slave_ip/32 md5
2.3 在从服务器中修改 postgresql.conf 文件,设置以下参数:
hot_standby = on
max_standby_streaming_delay = 30s
restore_command = 'cp /path/to/archive/%f "%p"'
primary_conninfo = 'host=master_ip port=5432 user=replica password=your_password'
注意:其中的 master_ip 和 your_password 分别为主服务器的 IP 地址和 postgres 用户的密码。
-
使用 pgpool-II 实现快速切换
3.1 下载 pgpool-II 工具:
wget https://www.pgpool.net/mediawiki/images/pgpool-II-4.1.4.tar.gz
tar zxvf pgpool-II-4.1.4.tar.gz
3.2 编译并安装 pgpool-II:
cd pgpool-II-4.1.4
./configure
make
sudo make install
3.3 创建 pgpool.conf 文件:
cp src/sample/pgpool.conf.sample etc/pgpool.conf
3.4 修改 pgpool.conf 文件:
listen_addresses = '*'
backend_hostname0 = 'master_ip'
backend_port0 = 5432
backend_weight0 = 1
backend_data_directory0 = '/opt/pgsql/data'
backend_flag0 = 'ALLOW_TO_FAILOVER'
backend_hostname1 = 'slave_ip'
backend_port1 = 5432
backend_weight1 = 1
backend_data_directory1 = '/opt/pgsql/data'
backend_flag1 = 'ALLOW_TO_FAILOVER'
failover_command = '/opt/failover.sh %d %H %P /opt/pgsql/data promote'
其中,failover_command 是在主服务器宕机后执行的脚本文件,该脚本用于将从服务器提升为主服务器。
3.5 创建 failover.sh 文件:
touch /opt/failover.sh
chmod +x /opt/failover.sh
3.6 编辑 failover.sh 文件,添加以下内容:
#!/bin/sh
FAILED_NODE_ID=$1
NEW_MASTER_HOST=$2
NEW_MASTER_PORT=$3
PGDATA=$4
if [ $FAILED_NODE_ID -eq 0 ]; then
echo "promote standby node"
ssh postgres@$NEW_MASTER_HOST "/usr/pgsql-12/bin/pg_ctl -D $PGDATA promote"
fi
这个脚本会在主服务器宕机后运行,并将从服务器升级为新的主服务器。如果 FAILED_NODE_ID 等于 0,则表示当前节点为从服务器,可以执行 pg_ctl promote
命令将其升级为主服务器。
-
测试主从配置和快速切换
4.1 使用以下命令检查主从配置是否正确:
psql -h master_ip -U postgres -c "SELECT * FROM pg_stat_replication;"
如果结果显示从服务器已经成功连接到主服务器并开始复制数据,则说明主从配置正确。
4.2 打开终端并连接到从服务器,运行以下命令,监听数据库变更:
tail -f /opt/pgsql/data/pg_log/postgresql-*.log
4.3 打开另一个终端并连接到主服务器,运行以下命令,模拟主服务器宕机:
pkill postgres
4.4 观察从服务器的终端窗口,可以看到它已经成为了新的主服务器。
4.5 再次连接到主服务器,运行以下命令,重新启动 PostgreSQL 服务:
/opt/postgresql-12.*/bin/pg_ctl -D /opt/pgsql/data/ start
这时,它会成为从服务器,并开始复制新的主服务器。
-
结束操作
当你完成测试后,可以按以下步骤停止 pgpool-II 和 PostgreSQL 服务:
5.1 使用以下命令停止 pgpool-II:
pcp_shutdown -h localhost -p 9898 -U your_user -w
5.2 使用以下命令停止 PostgreSQL 服务:
/opt/postgresql-12.*/bin/pg_ctl -D /opt/pgsql/data/ stop