Postgresql主从复制

环境信息

主机名 IP地址 操作系统 数据库版本 角色
master 192.168.91.145 Euler 22.10 LTS PostgreSQL 17.5 主库
slave 192.168.91.146 Euler 22.10 LTS PostgreSQL 17.5 从库

主库配置

编辑配置文件/data/postgresql-17.4/data/postgresql.conf

cat >> /data/postgresql-17.4/data/postgresql.conf <<EOF
# 主库配置
wal_level = replica # 启用WAL日志
max_wal_senders = 10 # 最大流复制连接数
synchronous_commit = remote_apply # 同步提交模式(强一致性)
wal_keep_size = 1024 # 保留的WAL日志大小(MB)
EOF

编辑pg_hba.conf文件,允许从库连接主库

cat >> /data/postgresql-17.4/data/pg_hba.conf <<EOF
# pg_hba.conf文件,允许从库连接主库
host replication repl 192.168.91.145/32 trust
host replication repl 192.168.91.146/32 trust
EOF

创建repl用户

psql -h 127.0.0.1 -U postgres -c "CREATE ROLE repl WITH REPLICATION LOGIN PASSWORD '123456';"
psql -h 127.0.0.1 -U postgres -c "SELECT * FROM pg_create_physical_replication_slot('slot_standby1');"

重启主库

systemctl restart postgresql

从库配置

停止从库服务

systemctl stop postgresql

删除data目录

mv /data/postgresql-17.4/data /data/postgresql-17.4/data_bak

从主库同步数据

su - postgres
pg_basebackup -h 192.168.91.145 -U repl -D /data/postgresql-17.4/data/ -X stream -P -R

编辑配置文件/data/postgresql-17.4/data/postgresql.conf

cat >> /data/postgresql-17.4/data/postgresql.conf <<EOF
# 从库配置
hot_standby = on # 允许只读查询
primary_conninfo = 'host=192.168.91.145 user=repl password=123456 application_name=standby1'
primary_slot_name = 'slot_standby1' # 与主库复制槽一致
EOF

启动从数据库

systemctl start postgresql

主从验证

主库查看主从状态

psql -h 127.0.0.1 -U postgres -c "SELECT client_addr, state, sync_state FROM pg_stat_replication;"
  client_addr  |   state   | sync_state
---------------+-----------+------------
172.22.16.112 | streaming | async
(1 row)

主库创建数据库插入数据

CREATE TABLE test(id SERIAL PRIMARY KEY);
INSERT INTO test VALUES (1);

从库查看数据

SELECT * FROM test;
文章作者: 慕容峻才
文章链接: https://www.acaiblog.top/Postgresql主从复制/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 阿才的博客
微信打赏
支付宝打赏