主从搭建
192.168.159.101 node1 主库(读写)
192.168.159.102 node2 备库(只读)
两台机器首先安装postgrsql
主库
postgres用户操作:
修改postgresql.conf
# 在文件中修改(此配置仅用于远程访问, 流复制后续还有额外配置):
listen_addresses = '*'
port = 15432
max_connections = 1500 # 最大连接数,据说从机需要大于或等于该值
wal_level = replica
max_wal_senders = 2 #最多有2个流复制连接
wal_keep_segments = 16
wal_sender_timeout = 60s #流复制超时时间# 开启归档
....
修改pg_hba.conf,添加如下:
# 追加
# replica为postgres用户
# XX.XX.XX.XX为从节点的完整IP,如果为网段配置就不是32了,md5为允许密码验证,trust为免密
# TYPE DATABASE USER ADDRESS METHOD
host replication replica 192.168.159.102/32 trust
# 需要远程访问,记得加(还有一个监听,在后面配置)
# 0.0.0.0/0为任意IP
host all all 0.0.0.0/0 md5
root用户操作:
#授权
chown -R postgres:postgres /var/run/postgresql/
chown -R postgres:postgres /home/postgres/pgdata/
postgres用户操作:
#启动
pg_ctl start
创建流复制用户
#切换用户
su - postgres
# 连接pgsql
psql -h 192.168.159.101 -p 15432
#执行sql
create role replica login replication encrypted password '123456';
SELECT rolname from pg_roles;
从库
root用户操作
chown -R postgres:postgres /var/run/postgresql/
chown -R postgres:postgres /home/postgres/pgdata/
从主库复制数据文件到本地
# 先清空原有数据文件(如非空)
rm -rf /home/postgres/pgdata/*
# 执行复制,ip为主库ip
pg_basebackup -h 192.168.159.101 -p 15432 -U replica -Fp -Xs -Pv -R -D /home/postgres/pgdata# 输入主库中创建的replica用户密码后,开始同步
更改/home/postgres/pgdata目录权限为700
chmod -R 700 /home/postgres/pgdata/
postgres用户操作:
#启动
pg_ctl start
验证:
主库执行:
# 查看当前复制会话
select * from pg_stat_replication;
#如果返回t说明是备库,返回f说明是主库
select pg_is_in_recovery();
从库执行:
主库创建表:
CREATE TABLE "user" ("id" int4 NOT NULL,"name" varchar(255) COLLATE "pg_catalog"."default","age" int4
);
查看从库: