背景:
我正在尝试在两台服务器之间设置流式复制。虽然postgresql在两个盒子上运行时没有任何错误,但是当我从主服务器添加或更改记录时,这些更改不会反映在辅助服务器上。
我在主数据库服务器上进行了以下设置:
(注意:我使用假的ip地址,但10.222.22.12代表主服务器而.21代表次要服务器)
主服务器 - posgresql.conf
listen_addresses = '10.222.22.12'
unix_socket_directory = '/tmp/postgresql'
wal_level = hot_standby
max_wal_senders = 5 # max number of walsender processes
# (change requires restart)
wal_keep_segments = 32 # in logfile segments, 16MB each; 0 disables
主服务器 - pg_hba.conf
host all all 10.222.22.21/32 trust
host replication postgres 10.222.22.0/32 trust
主服务器 - 防火墙
我已经检查过以确保所有传入fw的内容都已打开并且所有流量都被允许。
辅助服务器 - posgresql.conf
listen_addresses = '10.222.22.21'
wal_level = hot_standby
max_wal_senders = 5 # max number of walsender processes
# (change requires restart)
wal_keep_segments = 32 # in logfile segments, 16MB each; 0 disables
hot_standby = on
辅助服务器 - pg_hba.conf
host all all 10.222.22.12/32 trust
host all all 10.222.22.21/32 trust
host replication postgres 10.222.22.0/24 trust
辅助服务器 - recovery.conf
standby_mode='on'
primary_conninfo = 'host=10.222.22.12 port=5432 user=postgres'
辅助服务器防火墙
一切都在这里开放。
到目前为止我尝试了什么
我不确定还有什么要检查。如果您有任何建议,我会很感激。
编辑1
我已检查主人上的pg_stat_replication表,我得到以下结果:
psql -U postgres testdb -h 10.222.22.12 -c "select * from pg_stat_replication;"
pid | usesysid | usename | application_name | client_addr | client_hostname | client_port | backend_start | state | sent_location | write_location | flush_location | repl
ay_location | sync_priority | sync_state
-----+----------+---------+------------------+-------------+-----------------+-------------+---------------+-------+---------------+----------------+----------------+-----
------------+---------------+------------
(0 rows)
奴隶上的,请注意以下查询的结果:
testdb=# select now()-pg_last_xact_replay_timestamp();
?column?
----------
(1 row)
openser =#
答案 0 :(得分:1)
我更改了主服务器上的pg_hba.conf文件并添加了我的slave的确切ip地址,如下所示:
host all all 10.222.22.21/32 trust
host replication postgres 10.222.22.0/32 trust
#added the line below
host replication postgres 10.222.22.12/32 trust
然后我重新启动postgresql并且它有效。 我想我期待我添加的新线上方的线可以工作,但事实并非如此。我必须在子网上做更多的阅读。
答案 1 :(得分:0)
在主设备上,监听地址应允许从设备连接,即
listen_addresses = '10.222.22.21'
看来你的postgres日志记录配置不好。
我的猜测是,奴隶无法流式传输,因为它落后于主服务器,可能是由于网络延迟造成的。
我的建议是,你应该归档wal文件,所以如果奴隶落后于主人,它可以从档案中重播wal文件。
您也可以通过
进行检查select * from pg_stat_replication;
在主人身上。如果它没有显示任何行,则表示流式传输失败,可能是由于奴隶落后于主服务器。
您也可以通过发出:
进行检查select now()-pg_last_xact_replay_timestamp();
在奴隶身上。查询计算从站落后于主站的距离。
通常,流复制滞后不到1秒。滞后大于1秒,然后流媒体将被切断。