• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    postgresql 切换 log、xlog日志的实现

    os: centos 7.4

    db: postgresql 9.6

    切换log:

    select pg_rotate_logfile();

    切换xlog:

    select pg_switch_xlog();

    补充:postgresql流复制主从切换+resetxlog

    主 192.168.3.46

    从 192.168.3.47

    现象:由于46主库的xlog日志达到7T以上,磁盘空间不足,需要通过pg_resetxlog命令清日志。

    解决:

    1.修改postgresql参数

    checkpoint_timeout = 60min   # range 30s-1d
    max_wal_size = 4GB 
    min_wal_size = 1GB 
    checkpoint_completion_target = 0.9
    wal_keep_segments = 50
    

    2.pg_resetxlog命令清日志

    操作过程:

    1.停主机

    #46
    pg_ctl stop -D /data/postgresql/data

    2.从节点提升

    #47
    pg_ctl promote -D /data/postgresql/data

    以上两步操作完后,发现无法连接pgpool,有以下提示:

    11370 Apr 10 21:04:00 usvr47 pgpool[21766]: [11-1] 2019-04-10 21:04:00: pid 21766: LOG: new connection received
    11371 Apr 10 21:04:00 usvr47 pgpool[21766]: [11-2] 2019-04-10 21:04:00: pid 21766: DETAIL: connecting host=usvr47.cityre.cn port=26224
    11372 Apr 10 21:04:00 usvr47 pgpool[21766]: [12-1] 2019-04-10 21:04:00: pid 21766: LOG: failed to connect to PostgreSQL server on "192.168.3.46:5432", getsockopt() detected error "Connection refused"
    11373 Apr 10 21:04:00 usvr47 pgpool[21766]: [13-1] 2019-04-10 21:04:00: pid 21766: LOG: degenerate backend request for node_id: 0 from pid [21766] is canceled because failover is disallowed on the node
    11374 Apr 10 21:04:00 usvr47 pgpool[21766]: [14-1] 2019-04-10 21:04:00: pid 21766: FATAL: failed to create a backend connection
    11375 Apr 10 21:04:00 usvr47 pgpool[21766]: [14-2] 2019-04-10 21:04:00: pid 21766: DETAIL: executing failover on backend
    

    第3行是pgpool的健康检查health_check(配置文件没有设置定期检查),发现主库无法连接;

    第4行是pgool触发故障转移,将从库提升为主库(配置文件没有配置自动故障转移,需命令pg_ctl premote手动切换);

    但是pgpool中配置backend_flag1 = ‘DISALLOW_TO_FAILOVER' ,意思为不允许故障转移,因此通过psql -p 9999 -h 192.168.3.45 -U postgres 无法登录;将命令改为backend_flag0 = ‘ALLOW_TO_FAILOVER' 并reload后,可以登录。

    此参数导致pgpool在主库无法连接的情况下,pgpool也无法登录,导致客户端无法连库的现象。

    此时通过show pool_nodes命令可以看到主库(node id 为0)的状态为down。

    3.清除原主节点xlog

    #46
    #查看oid xid
    pg_controldata -D /data/postgresql/data
    #清日志
    pg_resetxlog -o 24579 -x 58288 -f /data/postgresql/data
    

    7T空间,清理时间大约30min。

    4.重新同步数据

    46作为47的slave,重新同步数据

    pg_basebackup -D /data/postgresql/data -Fp -Xs -v -P -h 192.168.3.47 -p 5432 -U repl

    默认会等待主库checkpoint后同步,为避免长时间等待,在主控手动checkpoint。

    同步完成后:

    mv recovery.done recovery.conf
    pg_ctl start /data/postgresql/data

    此时新的主从即可建立。

    5.查看pgpool

    [postgres@usvr-3-46 ~]$ psql -p 9999 -h 192.168.3.45 -U postgres
    Password for user postgres: 
    psql (9.6.3)
    Type "help" for help.
    postgres=# show pool_nodes;
     node_id |  hostname  | port | status | lb_weight | role  | select_cnt | load_balance_node | replication_delay 
    ---------+--------------+------+--------+-----------+---------+------------+-------------------+-------------------
     0    | 192.168.3.46 | 5432 |down   | 0.500000 | standby | 66014   | false       | 72
     1    | 192.168.3.47 | 5432 | up   | 0.500000 | primary | 66559   | true       | 0
    (2 rows)
    

    此时发现 3.46在pgpool状态仍然为down,需通过pcp命令将失效的节点重新加入集群。

    pcp_attach_node -U postgres -h 192.168.3.45 -p 9898 -n 0

    其中0为node_id。

    注意:

    pcp命令的密码读取的文件为pcp.conf,如果忘密码,可进行如下操作:

    [root@usvr47 ~]# pg_md5 postgres
    e8a48653851e28c69d0506508fb27fc5
    [root@usvr47 ~]# echo "postgres:e8a48653851e28c69d0506508fb27fc5" >> pcp.conf
    

    而不是通过命令pg_md5 -m -u postgres -p 生成密码,放在pool_passwd文件中,此文件密码为连接postgresql的密码,一定要注意。

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

    您可能感兴趣的文章:
    • PostgreSQL 打印日志信息所在的源文件和行数的实例
    • 解决PostgreSQL日志信息占用磁盘过大的问题
    • Postgresql 如何清理WAL日志
    • PostgreSQL归档配置及自动清理归档日志的操作
    • 关于PostgreSQL错误日志与慢查询日志收集
    • Postgresql的日志配置教程详解
    • PostgreSQL 日志文件的所在位置
    上一篇:postgresql 利用xlog进行热备操作
    下一篇:pgsql之create user与create role的区别介绍
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    postgresql 切换 log、xlog日志的实现 postgresql,切换,log,xlog,日志,