postgresql主从切换

postgresql主从切换测试步骤:

1. 在master机器上执行

pg_controldata /data/pg_data/data/ |grep -i ‘database cluster state’
Database cluster state: in production

2. 在slave机器上执行

pg_controldata /data/pg_data/data/ |grep -i ‘database cluster state’
Database cluster state: in archive recovery

3.将只读节点提升为主节点

sudo -u postgres ./pg_ctl promote -D /data/pg_data/data/
waiting for server to promote… done
server promoted

select * from pg_stat_replication;

  • recovery.conf文件将会被改成recovery.done
  • 将丢失主从状态,变成两个独立的单点
4.在slave机器上执行,发现从库已经被提升为主库

pg_controldata /data/pg_data/data/ |grep -i ‘database cluster state’
Database cluster state: in production

5.将原来master转变成从节点

1)创建recovery.conf配置文件
standby_mode = ‘on’
primary_conninfo = ‘user=postgres password=123456 host=172.16.0.103 port=5432 sslmode=disable sslcompression=0 target_session_attrs=any’
recovery_target_timeline=‘latest’

2)授权
chown postgres. recovery.conf

3)检查原主库的时间线是否超前
##target server must be shut down cleanly
sudo -u postgres /usr/local/pgsql/bin/pg_rewind --target-pgdata=/data/pg_data/data --source-server=‘host=172.16.0.103 port=5432 user=postgres password=123456’
source and target cluster are on the same timeline
no rewind required

4)启动从库服务
sudo -u postgres /usr/local/pgsql/bin/pg_ctl -D /data/pg_data/data -l /data/pg_data/log/pg.log start

遇到问题

1)权限不够,从库添加了recovery.conf文件权限是root,需要修改用户权限为postgres
FATAL: terminating connection due to administrator command

2)原主库时间线超前于从库
DETAIL: End of WAL reached on timeline 1 at 0/301E510.
LOG: new timeline 2 forked off current database system timeline 1 before current recovery point 0/301E580

3)使用pg_rewind必须开启相关参数,可以选择开启wal_log_hints或者选择开启data_checksums。data_checksums只能在数据库初始化的时候设置,后续数据库服务建立后是无法修改的。
target server needs to use either data checksums or “wal_log_hints = on”

  • wal_log_hints:能够记录特定提示位的变化。默认为off,静态参数,修改需要重启服务
  • data_checksums:数据校验,保证从redo buffe写入redo file里面的数据是一直的,读取 的时候也会根据每个redo page的checksum检查redo page的内容是否正确。默认off,动态参数。开启checksum会增加CPU的消耗,但是开销并不是很大,对比不开启情况下增加CPU消耗不超过1%。因此,开启checksum,实际引入的开销并不大。
  • full_page_writes:默认是开启

Guess you like

Origin blog.csdn.net/weixin_44375561/article/details/121699091