postgresql 切换 log、xlog日志的实现
os:centos7.4
db:postgresql9.6
切换log:
selectpg_rotate_logfile();
切换xlog:
selectpg_switch_xlog();
补充:postgresql流复制主从切换+resetxlog
主192.168.3.46
从192.168.3.47
现象:由于46主库的xlog日志达到7T以上,磁盘空间不足,需要通过pg_resetxlog命令清日志。
解决:
1.修改postgresql参数
checkpoint_timeout=60min#range30s-1d max_wal_size=4GB min_wal_size=1GB checkpoint_completion_target=0.9 wal_keep_segments=50
2.pg_resetxlog命令清日志
操作过程:
1.停主机
#46 pg_ctlstop-D/data/postgresql/data
2.从节点提升
#47 pg_ctlpromote-D/data/postgresql/data
以上两步操作完后,发现无法连接pgpool,有以下提示:
11370Apr1021:04:00usvr47pgpool[21766]:[11-1]2019-04-1021:04:00:pid21766:LOG:newconnectionreceived 11371Apr1021:04:00usvr47pgpool[21766]:[11-2]2019-04-1021:04:00:pid21766:DETAIL:connectinghost=usvr47.cityre.cnport=26224 11372Apr1021:04:00usvr47pgpool[21766]:[12-1]2019-04-1021:04:00:pid21766:LOG:failedtoconnecttoPostgreSQLserveron"192.168.3.46:5432",getsockopt()detectederror"Connectionrefused" 11373Apr1021:04:00usvr47pgpool[21766]:[13-1]2019-04-1021:04:00:pid21766:LOG:degeneratebackendrequestfornode_id:0frompid[21766]iscanceledbecausefailoverisdisallowedonthenode 11374Apr1021:04:00usvr47pgpool[21766]:[14-1]2019-04-1021:04:00:pid21766:FATAL:failedtocreateabackendconnection 11375Apr1021:04:00usvr47pgpool[21766]:[14-2]2019-04-1021:04:00:pid21766:DETAIL:executingfailoveronbackend
第3行是pgpool的健康检查health_check(配置文件没有设置定期检查),发现主库无法连接;
第4行是pgool触发故障转移,将从库提升为主库(配置文件没有配置自动故障转移,需命令pg_ctlpremote手动切换);
但是pgpool中配置backend_flag1=‘DISALLOW_TO_FAILOVER',意思为不允许故障转移,因此通过psql-p9999-h192.168.3.45-Upostgres无法登录;将命令改为backend_flag0=‘ALLOW_TO_FAILOVER'并reload后,可以登录。
此参数导致pgpool在主库无法连接的情况下,pgpool也无法登录,导致客户端无法连库的现象。
此时通过showpool_nodes命令可以看到主库(nodeid为0)的状态为down。
3.清除原主节点xlog
#46 #查看oidxid pg_controldata-D/data/postgresql/data #清日志 pg_resetxlog-o24579-x58288-f/data/postgresql/data
7T空间,清理时间大约30min。
4.重新同步数据
46作为47的slave,重新同步数据
pg_basebackup-D/data/postgresql/data-Fp-Xs-v-P-h192.168.3.47-p5432-Urepl
默认会等待主库checkpoint后同步,为避免长时间等待,在主控手动checkpoint。
同步完成后:
mvrecovery.donerecovery.conf pg_ctlstart/data/postgresql/data
此时新的主从即可建立。
5.查看pgpool
[postgres@usvr-3-46~]$psql-p9999-h192.168.3.45-Upostgres Passwordforuserpostgres: psql(9.6.3) Type"help"forhelp. postgres=#showpool_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 (2rows)
此时发现3.46在pgpool状态仍然为down,需通过pcp命令将失效的节点重新加入集群。
pcp_attach_node-Upostgres-h192.168.3.45-p9898-n0
其中0为node_id。
注意:
pcp命令的密码读取的文件为pcp.conf,如果忘密码,可进行如下操作:
[root@usvr47~]#pg_md5postgres e8a48653851e28c69d0506508fb27fc5 [root@usvr47~]#echo"postgres:e8a48653851e28c69d0506508fb27fc5">>pcp.conf
而不是通过命令pg_md5-m-upostgres-p生成密码,放在pool_passwd文件中,此文件密码为连接postgresql的密码,一定要注意。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持毛票票。如有错误或未考虑完全的地方,望不吝赐教。