流复制
postgres的主从的postgres的版本,环境,等最好保持一致。
主配置(192.168.1.100):
1、添加用户standby:
# create user standby REPLICATION LOGIN;
# alter user standby password '123456';
2、在pg_hba.conf文件中添加:
host replication standby 192.168.101/32 md5
3、修改postgresql.conf 文件:
max_connections = 300 # 从库的max_connections必须要大于主库的
wal_level = hot_standby # 设置主为wal的主机
max_wal_senders = 3 #设置最多有几个流复制连接,有几个从,就设置几个
wal_keep_segments = 512 # 设置流复制保留的最多的xlog数目
wal_sender_timeout = 60s # 设置流复制主机发送数据的超时时间
logging_collector = on #日志
log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
4、重启主pg
#pg_ctl restart
从配置:
1、从主pgsql服务器上同步data目录:
#pg_basebackup -F p --progress -D /data/pgsql/data -h 192.168.1.100 -p 5432 -U standby --password
2、在/data/pgsql/data/下新建recovery.conf文件,内容如下:
standby_mode = on # 这个说明这台机器为从库
recovery_target_timeline = 'latest' # 这个说明这个流复制同步到最新的数据
primary_conninfo = 'host=192.168.1.100 port=5432 user=standby password=123456'
# 这个说明这台机器对应主库的信息
3、修改postgresql.conf文件:
max_connections = 500 # 一般查多于写的应用从库的最大连接数要比较大
hot_standby = on #说明这台机器不仅仅是用于数据归档,也用于数据查询
max_standby_streaming_delay = 30s # 数据流备份的最大延迟时间
wal_receiver_status_interval = 1s # 多久向主报告一次从的状态,当然从每次数据复制都会向主报告状态,这里只是设置最长的间隔时间
hot_standby_feedback = on # 如果有错误的数据复制,是否向主进行反馈
4、 启动从pgsql
查看同步
1、在主上:
# select * from pg_stat_replication;
2、 在主从上:
# pg_controldata /data/pgsql/data/