配置主节点
postgresql.conf
listen_addresses = '*'
max_wal_senders = 10
wal_level = logical
wal_keep_segments =9
wal_sender_timeout = 60s
max_replication_slots = 10
其中max_wal_senders 根据情况有多少要连接就用多少。具体说明参考postgresql官网
wal_level的含义参见官网说明
pg_hba.conf
host replication postgres 0.0.0.0/0 md5
上面配置的是允许postgres从任意ip连过来,如果需要限制则修改即可
重启主节点
创建复制槽
SELECT * FROM pg_create_physical_replication_slot('pg_slave');
或者shell下执行
psql -c "SELECT * FROM pg_create_physical_replication_slot('pg_slave');"
如果想删除则执行下面的(但是slave运行中是不行的)
SELECT * FROM pg_drop_replication_slot(‘pg_slave’);
从节点配置
创建从节点用户
切换至root
检查下创建过没,如果没有postgres用户则创建
more /etc/passwd
创建postgres用户
useradd postgres
安装
yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm -y
yum -y install postgresql11-server
yum -y install postgresql11-contrib
初始化数据
切换至postgres用户
pg_basebackup -h ${master_address} -U postgres -F p -P -R -D /home/postgres/pgdata
注意上面**-U**后面的postgres应该与pg_hba.conf里一致
修改recovery.conf
添加下面一行(pg_slave与上面一致)
primary_slot_name = 'pg_slave'
standby_mode = 'on'
修改postgresql.conf
vi /home/postgres/pgdata/postgresql.conf
修改作为从库的配置
配置为hot_standby
hot_standby = on
修改等待时间
max_standby_archive_delay = -1
max_standby_streaming_delay = -1
修改内存参数
shared_buffers
共享内存大小,如果时数据库专用服务器,修改为内存40%,例如24GB
work_mem
为每个进程单独分配的内存,主要用于排序,hash等操作。注意pgsql对于某些select语句会进行并行查询
maintence_work_men
也是为每个进程单独分配的内存,主要用于维护操作,例如vacuum
启动
pg_ctl start -D /home/postgres/pgdata
可以用ps -elf|grep postg看下有个postgres: startup recovering …的进程
另外查看log文件夹里的日志有
日志:正在进入备用模式 日志:redo在???开始 日志:在???上已到达一致性恢复状态 日志:数据库系统准备接受只读请求的连接 日志:在时间点:???(时间安排1)启动日志的流操作
检查
在主库执行下列sql查看连接状况
select * from pg_stat_replication;
troubleshooting
致命错误:无法从WAL流中获得数据:错误:所要求的WAL段???已经被删除
修改master节点postgresql.conf
wal_keep_segments =9
wal_sender_timeout = 60s
max_replication_slots = 10
删了之前的文件重新执行pg_basebackup
Error connecting to server :致命错误 SSL关闭的pg_hba.conf记录
这个是由于主节点的pg_hba.conf配置问题。host replication 项如果有两个可能第一项不生效,需保留一项。