主从切换(不这么玩)

其实主从的本质就是从节点去主节点不停的备份新的数据。

配置文件的系统其实就是两个:

  • standby.signal文件,这个是从节点开启备份
  • postgresql.auto.conf文件,这个从节点指定主节点的地址信息

切换就是原主追加上述配置,原从删除上述配置

1、主从节点全部stop停止:………………

2、原从删除上述配置:…………

3、原从新主启动服务:………

4、原主新从去原从新主备份一次数据:pg_basebackup操作,同时做解压,然后修改postgresql.conf文件以及standby.signal配置文件

5、启动原主新从查看信息

主从故障切换

默认情况下,这里的主从备份是异步的,导致一个问题,如果主节点写入的数据还没有备份到从节点,主节点忽然宕机了,导致后面如果基于上述方式实现主从切换,数据可能丢失。

PGSQL在9.5版本后提供了一个pg_rewind的操作,基于归档日志帮咱们做一个比对,比对归档日志,是否有时间差冲突。

实现操作:

1、rewind需要开启一项配置才可以使用

修改postgresql.conf中的 wal_log_hints = 'on'

2、为了可以更方便的使用rewind,需要设置一下 /usr/pgsql-12/bin/ 的环境变量

vi /etc/profile
  追加信息
  export PATH=/usr/pgsql-12/bin/:$PATH
source /etc/profile

3、模拟主库宕机,直接对主库关机

4、从节点切换为主节点

# 因为他会去找$PGDATA,我没配置,就基于-D指定一下PGSQL的data目录
pg_ctl promote -D ~/12/data/

5、将原主节点开机,执行命令,搞定归档日志的同步

  • 启动虚拟机
  • 停止PGSQL服务
pg_ctl stop -D ~/12/data
  • 基于pg_rewind加入到集群
pg_rewind -D ~/12/data/ --source-server='host=192.168.11.66 user=postgres password=postgres'
  • 如果上述命令失败,需要启动再关闭PGSQL,并且在执行,完成归档日志的同步
pg_ctl start -D ~/12/data
pg_ctl stop -D ~/12/data
pg_rewind -D ~/12/data/ --source-server='host=192.168.11.66 user=postgres password=postgres'

6、修改新从节点的配置,然后启动

  • 构建standby.signal
standby_mode = 'on'
  • 修改postgresql.auto.conf文件
# 注意ip地址
primary_conninfo = 'user=postgres password=postgres host=192.168.11.66 port=5432 sslmode=prefer sslcompression=0 gssencmode=prefer krbsrvname=postgres target_session_attrs=any'
restore_command = 'cp /archive/%f %p'
  • 启动新的从节点
pg_ctl start -D ~/12/data/