• postgresql Streaming Replication监控与注意事项


    一监控Streaming Replication集群

    1 pg_stat_replication视图(主库端执行)

    pid

    Wal sender process的进程ID

    usesysid

    执行流复制的用户的OID

    usename

    执行流复制的用户名

    application_name

    连接到master的Application name

    client_addr

    standby的ip地址

    client_hostname

    Standby主机名

    client_port

    standby上连接端口

    backend_start

    Wal sender process启动时间。

    state

    WAL sender process状态

    sent_location

    WAL发送位置

    write_location

    Standby端写WAL位置

    flush_location

    Standby端写WAL刷新到磁盘的位置

    replay_location

    Standby端应用WAL位置

    sync_priority

    standby的优先级

    sync_state

    standby的同步类型

    主库上通过执行函数把WAL位置转换成WAL文件名与偏移量

    select  *   from pg_xlogfile_name_offset('XXX');

    查看备库落后主库多少个字节的wal日志

    select pg_xlog_location_diff(pg_current_xlog_location(),replay_location)  from pg_stat_replication;

    2pg_is_in_recovery()查看数据库状态

    3pg_controldata查看数据库信息

    4hot standby查看备库接收wal日志和应用wal日志的状态信息(standby上执行)

    pg_last_xlog_receive_location()//standby最后接收到的事务日志。

    pg_last_xlog_replay_location()//standby最后应用到的事务日志位置。

    pg_last_xact_replay_timestamp()//recovery过程中最后一个事务执行的时间。

    select pg_last_xlog_receive_location(),pg_last_xlog_replay_location(),pg_last_xact_replay_timestamp();

    二Streaming Replication集群常见问题

    2.1备库查询限制

    DML,DDL限制

    select * from  table for update;

    比row exclusivemode级别高的表锁不能执行等。

    2.2备库查询冲突与处理

    Ø  冲突如下:

    1主库上运行的vacuum清理掉了备库上查询还需要的多版本数据。

    2主库上执行lock命令或各种DDL语句会在表上产生exclusive锁,而在备库上对这些表进行查询时,就会产生冲突。

    3在主库上删除一个表空间,而备库上的查询需要存放的一些工作临时文件在此表空间中。

    4主库上删除了一个数据库,而备库上还有还多session还在连接在这个数据库上。

    Ø  处理方法:

    1备库延迟应用wal日志

    参数用于控制应用wal日志最多等多久,超过这个时间,将应用wal日志,取消备库上正在执行的查询(在视图pg_stat_database_conflicts中查询取消执行的sql)。

    Max_standby_archive_delay备库从归档中读取的最大延迟,默认是30s,如果设置是-1,则一直等下去。

    Max_standby_streaming_delay备库从流复制中读取wal时的最大延迟,默认是30s,如果设置是-1,则一直等下去。

    2主库上运行的vacuum清理掉了备库上查询还需要的多版本数据,

    解决方法1

    在备库上设置参数hot_standby_feedback为true来解决,设置该参数为true后,备库会通知主库,那些多版本的数据在备库上还需要,这样主库上的autovacuum就不会清理掉这些数据,从而减少冲突。

    解决方法2.

    在主库增大vacuum_defer_cleanup_age值,让数据库延迟清理多版本数据。

    在备库recovery.conf中参数recovery_min_apply_delay。

    2.3流复制注意事项

    1wal_keep_segments:为备库保留多少个日志文件

    主库还没有来得及把wal日志传送到备库,可能被覆盖,如果没有被归档,那么日志文件不连续了。

    2vacuum_defer_cleanup_age:延迟清理多少个事务

    原因:主库清理的数据,有可能备库正在查询使用,会导致查询失败。

    3关于主备库archive_mode、archive_command

    (1)在主库postgresql.conf配置文件配置如下

    archive_mode = on 

    archive_command = 'cp  %p  /pgdb/archlog/%f'

     主库开启归档模式,事务日志写入.. /data/pg_xlog目录,archive_command把归档日志复制到/ pgdb /archlog

    (2)在备库archive_mode、archive_command值对备库没有任何影响,备库不会加载该配置。主库事务提交后,备库接收日志流,写入../data/pg_xlog目录并应用,但不执行archive_command归档命令。

    新特性:PostgreSQL9.5.1:archive_mode = always  支持备节点应用日志流后,归档。

  • 相关阅读:
    Java compiler level does not match the version of the installed Java Project facet.
    Project configuration is not up-to-date with pom.xml. Select: Maven->Update Project... from the project context menu or use Quick Fix.
    JavaScript
    JavaScript
    Eclipse
    Eclipse
    Oracle
    Java
    Ext JS 4.2
    Eclipse
  • 原文地址:https://www.cnblogs.com/gmhappy/p/9472452.html
Copyright © 2020-2023  润新知