Day 4: Streaming Replication(流复制) – 详细安装步骤
课程概述:
PostgreSQL 的 Streaming Replication(流复制)是主从复制的一种形式,允许一个主服务器(Master)将事务日志(WAL)流式传输到一个或多个从服务器(Standby)。从服务器通过这些日志实时更新数据,提供高可用性和读负载分担。
前提要求与准备工作
硬件与软件要求:
服务器配置:
- 主服务器 (Master) 和 从服务器 (Standby) 各 1 台。
- 每台服务器至少 2 CPU 核心,4 GB 内存。
- 每台服务器至少有 20 GB 磁盘空间。
- 操作系统:建议使用 CentOS 7+ 或 Ubuntu 20.04+。
网络配置:
- 确保主服务器与从服务器在同一网络内,或通过 VPN 连接。
- 每台服务器需分配静态 IP。
- 配置 SSH 访问,并在两台服务器之间配置无密码登录。
PostgreSQL 版本:
- PostgreSQL 13 或 14,确保主从服务器的 PostgreSQL 版本一致。
安装步骤
1. 安装 PostgreSQL 及依赖库
在 主服务器 和 从服务器 上都需要安装 PostgreSQL 和相关依赖。
CentOS 7+:
安装 PostgreSQL 的 yum 仓库:
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
安装 PostgreSQL:
sudo yum install -y postgresql14 postgresql14-server
初始化数据库:
sudo /usr/pgsql-14/bin/postgresql-14-setup initdb
启动并设置 PostgreSQL 开机自启动:
sudo systemctl start postgresql-14 sudo systemctl enable postgresql-14
Ubuntu 20.04+:
安装 PostgreSQL:
sudo apt update sudo apt install -y postgresql postgresql-contrib
初始化数据库(大多数情况下会自动初始化):
sudo systemctl start postgresql sudo systemctl enable postgresql
2. 主服务器(Master)配置
修改
postgresql.conf
配置文件:- 路径:
/var/lib/pgsql/14/data/postgresql.conf
(CentOS) 或/etc/postgresql/14/main/postgresql.conf
(Ubuntu)。 - 修改以下参数:
listen_addresses = '*' wal_level = replica max_wal_senders = 3 wal_keep_segments = 64 archive_mode = on archive_command = 'cp %p /var/lib/pgsql/14/archive/%f'
- 路径:
修改
pg_hba.conf
文件,允许从服务器连接:- 路径:
/var/lib/pgsql/14/data/pg_hba.conf
或/etc/postgresql/14/main/pg_hba.conf
。 - 添加如下行,允许从服务器的 IP 访问:
host replication all 192.168.1.2/32 md5
- 路径:
重启 PostgreSQL 服务 使配置生效:
sudo systemctl restart postgresql-14
创建复制用户:
- 登录 PostgreSQL:
sudo -u postgres psql
- 创建用户并赋予复制权限:
CREATE ROLE replicator WITH REPLICATION LOGIN PASSWORD 'replicator_password';
- 登录 PostgreSQL:
配置 WAL 归档目录:
- 创建 WAL 归档目录:
sudo mkdir -p /var/lib/pgsql/14/archive sudo chown postgres:postgres /var/lib/pgsql/14/archive
- 创建 WAL 归档目录:
3. 从服务器(Standby)配置
停止 PostgreSQL 服务:
sudo systemctl stop postgresql-14
清除现有的数据库数据目录:
sudo rm -rf /var/lib/pgsql/14/data/*
从主服务器同步数据:
使用pg_basebackup
从主服务器复制数据:sudo -u postgres pg_basebackup -h 192.168.1.1 -D /var/lib/pgsql/14/data/ -P -U replicator --wal-method=stream
- 参数说明:
-h
: 主服务器的 IP 地址。-D
: 数据存放目录。-U
: 复制用户。
- 参数说明:
配置从服务器的
recovery.conf
文件:
在数据目录下创建standby.signal
文件,以指示这是一个从服务器,并编辑postgresql.auto.conf
文件:touch /var/lib/pgsql/14/data/standby.signal
编辑
postgresql.auto.conf
文件:echo "primary_conninfo = 'host=192.168.1.1 port=5432 user=replicator password=replicator_password'" >> /var/lib/pgsql/14/data/postgresql.auto.conf
启动从服务器:
sudo systemctl start postgresql-14
验证复制状态:
在主服务器上,运行以下 SQL 查看复制状态:SELECT * FROM pg_stat_replication;
应该看到从服务器的 IP 地址及其复制进度。
4. 高可用与故障转移配置(可选)
自动故障转移工具:
可以使用第三方工具(如repmgr
或Patroni
)实现自动故障转移。手动故障转移:
在主服务器发生故障时,可以将从服务器提升为主服务器,步骤如下:- 停止从服务器:
sudo systemctl stop postgresql-14
- 删除
standby.signal
文件:sudo rm /var/lib/pgsql/14/data/standby.signal
- 启动 PostgreSQL 服务:
sudo systemctl start postgresql-14
- 现在该服务器已经变为主服务器。
- 停止从服务器:
总结
通过以上步骤,您可以成功设置 PostgreSQL 的 Streaming Replication(流复制)。这种配置可以为数据库提供实时的高可用性,并且可以分担读负载,适用于各种需要高可靠性的生产环境。
最后编辑:严锋 更新时间:2025-05-09 15:48