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的密码,一定要注意。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]