14-Master-Slave_Operation
Master-Slave_Operation
Postgresql只支持简单的主从,没有自动主从切换。
环境
- 两台或多台 Linux 服务器(CentOS/Ubuntu)
- PostgreSQL 12 或更高版本(本文以 PostgreSQL 14 为例)
- 网络互通,防火墙开放相关端口
服务器规划
| 角色 | IP地址 | 主机名 | 数据目录 |
|---|---|---|---|
| 主库 | 192.168.1.100 | pg-master | /var/lib/pgsql/14/data |
| 从库 | 192.168.1.101 | pg-slave | /var/lib/pgsql/14/data |
主库配置
配置访问权限
修改/var/lib/postgre/data/pg_hba.conf,添加以下内容,保证允许复制,读取
# 允许从库连接进行流复制
host replication repuser 192.168.1.101/32 md5
# 允许应用从从库读取(可选)
host all all 192.168.1.0/24 md5
创建复制用户
# 切换到postgres用户
sudo su - postgres
# 进入psql命令行
psql
-- 创建复制专用用户
CREATE USER repuser WITH REPLICATION LOGIN ENCRYPTED PASSWORD 'RepPass123!';
-- 查看用户是否创建成功
\du
-- 退出psql
\q
然后重启主库服务
systemctl restart postgresql
从库配置
停止从库服务并清空数据目录
# 停止PostgreSQL服务
sudo systemctl stop postgresql
# 备份原有数据(如果有)
sudo mv /var/lib/pgsql/data /var/lib/pgsql/data.backup.$(date +%Y%m%d)
# 创建新数据目录
sudo mkdir -p /var/lib/pgsql/data
sudo chown postgres:postgres /var/lib/pgsql/data
使用pg_basebackup进行基础备份
# 切换到postgres用户
sudo su - postgres
# 从主库拉取基础备份
pg_basebackup -h 192.168.1.100 -D /var/lib/pgsql/14/data -U repuser -P -v -R -W
# 这里没有使用-F归档模式,直接就是源配置文件
# 输入上面设置的密码:RepPass123!
# 退出postgres用户
exit
检查生成的配置文件
备份完成后,从库的data目录下会生成standby.signal文件(表示这是备用服务器),以及postgresql.auto.conf文件包含主库连接信息:
# 查看自动生成的配置
cat /var/lib/pgsql/14/data/postgresql.auto.conf
# 输出类似:
primary_conninfo = 'user=repuser password=RepPass123! host=192.168.1.100 port=5432 sslmode=prefer sslcompression=0 gssencmode=disable krbsrvname=postgres target_session_attrs=any'
配置从库参数
编辑 /var/lib/pgsql/data/postgresql.conf:
# 设置从库为热备模式(允许只读查询)
hot_standby = on
# 从库报告给主库的最大延迟(可选)
hot_standby_feedback = on
# 从库恢复期间最大并行进程数
max_standby_archive_delay = 30s
max_standby_streaming_delay = 30s
# 其他优化参数
shared_buffers = 256MB
启动从库服务
sudo systemctl start postgresql
创建测试数据验证同步
-- 在主库上执行
CREATE TABLE test_replication (
id SERIAL PRIMARY KEY,
data VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO test_replication (data) VALUES ('测试主从同步数据');
-- 在从库上查询(应该能查到)
SELECT * FROM test_replication;
主节点查看从节点
select * from pg_stat_replication;
从节点查看主节点
select * from pg_stat_wal_r;

浙公网安备 33010602011771号