本文默认主节点和从节点的postgresql数据库已经安装好
注:postgresql11版本和12版本的主从搭建方式不一样,本文只介绍12版本的搭建方式
主机:172.16.95.22
从机:172.16.95.135
主节点配置
修改postgresql.conf
wal_level = replica # 这个是设置主为wal的主机
max_wal_senders = 5 # 这个设置了可以最多有几个流复制连接,差不多有几个从,就设置几个
wal_keep_segments = 128 # 设置流复制保留的最多的xlog数目
wal_sender_timeout = 60s # 设置流复制主机发送数据的超时时间
max_connections = 200 # 一般查多于写的应用从库的最大连接数要比较大$$$
hot_standby = on # 说明这台机器不仅仅是用于数据归档,也用于数据查询
max_standby_streaming_delay = 30s # 数据流备份的最大延迟时间
# 多久向主报告一次从的状态,当然从每次数据复制都会向主报告状态,
# 这里只是设置最长的间隔时间
wal_receiver_status_interval = 10s
hot_standby_feedback = on # 如果有错误的数据复制,是否向主进行反馈
wal_log_hints = on # also do full page writes of non-critical updates
为了方便,我不在postgresql.conf里面找对应的配置修改,因为这些配置除了max_connections,其他都是被注释掉的,一个一个找比较乱,所以我直接在postgresql.conf文件的末尾添加了这些配置
修改pg_hba.conf
在文件末尾添加
host replication replica 0.0.0.0/0 md5
0.0.0.0/0 可以换成你的从库地址 x.x.x.x/32
添加流复制用户
create role replica with replication login password ‘123456’;
alter user replica with password ‘123456’;
然后重启主节点的服务
从节点配置
提前设计好你的从库文件夹路径,我这里是 /data/pgsql/data
复制主库的数据过来
pg_basebackup -h 172.16.95.22 -p 5432 -U replica -Fp -Xs -Pv -R -D /data/pgsql/data
设置data权限
sudo chmod 750 -R /usr/local/pgsql/data
sudo chown postgres -R /usr/local/pgsql
注:这里的赋权限有点危险,因为如果不小心少打了后面的路径,更改了usr路径下其他文件夹的权限,有可能会导致整个操作系统的崩溃,linux系统对特定路径下的权限十分严格,所以后来了重新配置了从库数据路径为/data/pgsql/data
编辑standby.signal文件
# 添加
standby_mode = 'on'
修改/usr/local/pgsql/data的postgresql.conf
primary_conninfo = 'host=172.16.95.22 port=5432 user=postgres password=123456'
recovery_target_timeline = latest # 默认
#max_connections = 200 # 大于等于主节点,正式环境应当重新考虑此值的大小 $$$
hot_standby = on
max_standby_streaming_delay = 30s
wal_receiver_status_interval = 10s
hot_standby_feedback = on
max_wal_senders = 15
同样,我也是在postgresql.conf的末尾添加这些配置
最后启动从库,注意,postgresql.log也需要上面配置的权限
sudo -u postgres ./pg_ctl -D /usr/local/pgsql/data -l /usr/local/pgsql/data/postgresql.log start
查看主库以及从库的状态
ps -ef | grep postgres
主库
从库