1.通过服务器上的进程查看
ps aux |grep postgres
如出现postgres: wal receiver process说明此节点的数据库处于从服务器状态,无法进行修改。
ps aux |grep “wal sender”
-- 查看主从状态
select * from pg_stat_repilcation;
-- 查看是否是主库,false:主库;true:从库
select pg_is_in_recovery();
pg_stat_replication表信息
字段 | 描述 |
---|---|
pid | wal_sender进程id |
usesyid | 用户连接到系统的唯一标识符 |
usename | wal发送进程的数据库用户名 |
application_name | 同步复制的通常设置,可以通过连接字符串传递到master |
client_addr | 从库ip |
client_hostname | 从库域名 |
client_port | 从库端口 |
backend_start | slave创建流连接的时间 |
backend_xmin | |
state | 连接状态 |
sent_lsn | 发送到standby的最后事务日志的位置 |
write_lsn | 写到standby系统磁盘上最后的事务日志位置 |
flush_lsn | 被刷新到standby系统的最后日志位置 |
replay_lsn | slave上重放的最后事务日志位置 |
write_lag | wal日志流还没写入备库wal日志文件,还再操作系统缓存中 |
flush_lag | wal日志已写入备库wal日志文件,还没有应用wal日志 |
replay_lag | wal日志已写入备库日志文件,并且已经应用到wal日志 |
sync_priority | 同步的优先权 |
sync_state | slave处于哪个状态,async,sync,potential,quorum |
##主从延时
pg_current_wal_lsn()函数:获取当前wal log的写位置
pg_wal_lsn_diff()函数:计算两个wal日志之间的差距
##高版本(10+)复制延时
SELECT
pg_wal_lsn_diff(A .c1, replay_lsn) /(1024 * 1024) AS slave_latency_MB,
pg_wal_lsn_diff(A .c1, sent_lsn) /(1024 * 1024) AS send_latency_MB,
pg_wal_lsn_diff(A .c1, flush_lsn) /(1024 * 1024) AS flush_latency_MB,
state,
backend_start,
now()::timestamp with time zone
FROM pg_stat_replication, pg_current_wal_lsn() AS A(c1)
WHERE client_addr='从库IP' and application_name = '设置复制的名称'
ORDER BY slave_latency_MB, send_latency_MB DESC
##查看walfile name
select pg_current_wal_insert_lsn();
0/164C350
##通过lsn查看wal日志名称
select pg_walfile_name('0/164C350');
##查看wal接收lsn点
select pg_last_wal_receive_lsn();
##查看wal应用的lsn点
select pg_last_wal_replay_lsn();
##手动切换wal日志
select pg_switch_wal();
防止主库wal文件被删除,从库没有接收到,可以使用slot,配置足够大的wal keep或者wal归档
一.slot配置方法
主:max_replication_slots
备:primary_solt_name
(关闭:SELECT pg_drop_replication_slot(‘slot name’);
SELECT * FROM pg_replication_slots;
二.wal keep
wal_keep_segments
三.wal归档
主库:
archive_mode=on
archive_command=’’
备:recovery.conf
restore_command