PostgreSQL流复制主从切换

 
 
0,前提
确保PostgreSQL主从流复制是正常状态
 
 
1从节点执行promote提升
 
   1.1 ###修改原从节点的pg_hba.conf设置复制用户的IP为主节点
   host     replication     replica_user     原始主节点IP/32         md5

   1.2 ###原从节点上创建slot
   SELECT * FROM pg_create_physical_replication_slot('pgstandby_slave01');
    
    1.3 执行promote提升为可读写
    pg_ctl promote -/usr/local/pgsql16/pg9000/data
    
    1.4 ###检查节点状态
    SELECT pg_is_in_recovery();      
 
    从节点升主切换示例

 

 
2原主节点以从节点身份加入
 
    ###2.1创建一个stand.single文件用来标识当前节点以standby模式启动
     touch standby.signal
 
    ###2.2,在postgresql.auto.conf文件写入当前节点信息确保当前主节点上复制槽已经创建,流复制默认不会同步原始主节点上的复制槽”到当前节点
    # Do not edit this file manually!
    # It will be overwritten by the ALTER SYSTEM command.
    primary_conninfo = 'user=replica_user password=''******'' channel_binding=prefer host=原始从节点IP port=9000 sslmode=prefer sslcompression=0 sslcertmode=allow sslsni=1 ssl_min_protocol_version=TLSv1.2 gssencmode=disable krbsrvname=postgres gssdelegation=0 target_session_attrs=any load_balance_hosts=disable'
    primary_slot_name = 'pgstandby_slave01'
 
    ###2.3修复当前节点的时间线
    pg_rewind --target-pgdata=/usr/local/pgsql16/pg9000/data --source-server='host=***.***.***.*** port=9000 user=postgres dbname=postgres password=postgres'
   
    ### 2.4 重新授权文件权限 
    chown -R postgres:postgres /usr/local/pgsql16/pg9000/data
    chmod 700 -R  /usr/local/pgsql16/pg9000/data
 
    ###2.5重启当前节点
    systemctl restart postgresql9000
    
    ###2.6检查复制状态
    select pg_is_in_recovery(),status from pg_stat_wal_receive;
 
    主节点以从节点重新加入复制

 

 3,总结:
  1,注意前置条件:包括新的主节点复制槽创建,pg_hba.conf配置文件修改
  2,新的从节点需要做pg_rewind修复,同时需要重新授权
  3,保持思路清晰,操作步骤规范化