踩了一堆坑,终于掌握了postgreSQL主从流的精髓
作者:mmseoamin日期:2024-04-29

📢📢📢📣📣📣

哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验

一位上进心十足的【大数据领域博主】!😜😜😜

中国DBA联盟(ACDU)成员,目前服务于工业互联网

擅长主流Oracle、MySQL、PG、高斯及Greenplum运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。

✨ 如果有对【数据库】感兴趣的【小可爱】,欢迎关注【IT邦德】💞💞💞

❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️

文章目录

  • 前言
    • 📣 1.主从流复制
    • 📣 2.sync_state
    • 📣 3.主从Switchover切换
      • ✨ 3.1 主库操作
      • ✨ 3.2 前备库操作
      • 📣 4.主从Failover切换
      • 📣 5.节点扩容
      • 📣 6.异步改同步
      • 📣 7.总结

        同步流复制在9.1版中实现。它是一种单主多从复制类型

        文章目录

        • 前言
          • 📣 1.主从流复制
          • 📣 2.sync_state
          • 📣 3.主从Switchover切换
            • ✨ 3.1 主库操作
            • ✨ 3.2 前备库操作
            • 📣 4.主从Failover切换
            • 📣 5.节点扩容
            • 📣 6.异步改同步
            • 📣 7.总结

              前言

              同步流复制在9.1版中实现。它是一种单主多从复制类型

              📣 1.主从流复制

              此本机复制功能基于日志传送,这是一种通用的复制技术,其中主服务器不断向备用服务器发送WAL(预写日志)数据,然后备用服务器立即重放接收到的数据。流复制同步方式有同步、异步两种

              踩了一堆坑,终于掌握了postgreSQL主从流的精髓,第1张

              📣 2.sync_state

              sync_state是备用服务器的状态。

              sync_state属性指示备用服务器的状态。

              它可以是以下值之一:

              1.sync:备用服务器处于同步模式,

              是当前正在工作的优先级最高的备用服务器。

              2.potential:备用服务器处于同步模式,

              是当前正在工作的优先级较低的备用服务器。

              如果当前同步备用服务器失败,

              则此备用服务器将升级为同步状态。

              3.async:备用服务器处于异步模式。

              (它永远不会处于“同步”或“潜在”模式。)

              通过发出以下查询,可以显示备用服务器的优先级和状态:

              踩了一堆坑,终于掌握了postgreSQL主从流的精髓,第2张

              📣 3.主从Switchover切换

              在保证主从数据一致的情况下,做如下操作

              ✨ 3.1 主库操作

              1、停止PG服务

              [root@primary ~]# su - postgres

              [postgres@primary ~]$pg_ctl stop

              2、以“postgres”用户创建创建standby.signal文件

              touch /pgccc/pgdata/standby.signal

              3、配置参数文件

              cat >> KaTeX parse error: Expected 'EOF', got '#' at position 140: …root@primary ~]#̲ su - postgres … pg_ctl start

              踩了一堆坑,终于掌握了postgreSQL主从流的精髓,第3张

              ✨ 3.2 前备库操作

              1、停止PG服务

              [root@standby01 ~]# su - postgres

              [postgres@standby01 ~]$ pg_ctl stop

              2、删除“standby.signal”文件

              rm -rf /pgccc/pgdata/standby.signal

              3、修改参数文件,注释primary_conninfo

              sed -i ‘s/primary_conninfo/#primary_conninfo/g’ /pgccc/pgdata/postgresql.conf

              4、启动PG服务

              [root@primary ~]# su - postgres

              [postgres@primary ~]$ pg_ctl start

              踩了一堆坑,终于掌握了postgreSQL主从流的精髓,第4张

              📣 4.主从Failover切换

              主数据库是读写的,备数据库是只读的。当主库出现故障时,我们需要将备库提升为主库进行读写操作。

              1)主库操作:关闭主库,模拟主库故障

              [postgres@standby01 ~]$pg_ctl stop

              waiting for server to shut down… done

              server stopped

              2)备库操作:激活备库为主库:

              不关闭主库,也可以执行该命令强制切换为主库角色,切换完成后,主从关系断开

              3)原主库修复后降为备库

              过程类似于重建备库,操作主从搭建

              rm -rf /backup

              mkdir -p /backup

              chown postgres:postgres /backup

              su - postgres

              pg_basebackup -h 192.168.6.20 -p 5432 -U repladm -l bk20240411 -F p -P -R -D /backup

              -- 关闭从库,并且将备份文件覆盖从库的数据文件
              [postgres@standby01 ~]$echo $PGDATA
              /pgccc/pgdata
              [postgres@standby01 ~]$ rm -rf /pgccc/pgdata/*
              [postgres@standby01 ~]$ cp -r /backup/* /pgccc/pgdata/
              

              4)修改配置参数

              vi /pgccc/pgdata/postgresql.conf

              primary_conninfo = ‘host=192.168.6.20 port=5432 user=repladm password=replica’

              5)启动PG服务

              [root@standby01 ~]# su - postgres

              [postgres@standby01 ~]$ pg_ctl start

              踩了一堆坑,终于掌握了postgreSQL主从流的精髓,第5张

              📣 5.节点扩容

              –在从库对主库进行备份

              mkdir -p /backup

              chown postgres:postgres /backup

              su - postgres

              pg_basebackup -h 192.168.6.20 -p 5432 -U

              repladm -l bk20240411 -F p -P -R -D /backup

              踩了一堆坑,终于掌握了postgreSQL主从流的精髓,第6张

              关闭从库,删除从库的数据文件,并且将备份文件覆盖从库的数据文件
              [postgres@standby02 ~]$echo $PGDATA
              /pgccc/pgdata
              [postgres@standby02 ~]$ rm -rf /pgccc/pgdata/*
              [postgres@standby02 ~]$ cp -r /backup/* /pgccc/pgdata/
              

              修改从库primary_conninfo参数

              cat >> $PGDATA/postgresql.conf <<“EOF”

              primary_conninfo = ‘host=192.168.6.20 port=5432 user=repladm password=replica’

              EOF

              重启备库

              [postgres@standby02 ~]$ pg_ctl start

              📣 6.异步改同步

              –在3个节点都修改如下参数

              cat >> /pgccc/pgdata/postgresql.conf <<“EOF”

              synchronous_commit=‘on’

              synchronous_standby_names=‘*’

              EOF

              synchronous_commit说明:

              1.on或local当数据库提交事务时,wal先写入到wal buffer在写入到wal日志文件,当写入到wal日志文件后才向客户端返回成功。

              优点:非常安全

              缺点:数据库性能有损耗

              2.off表示不等待本地wal buffer写入到wal日志就向客户端返回成功,设置此参数可以提升数据库性能。

              优点:提升数据库性能

              缺点:数据库宕机是最新提交的少量事务可能丢失

              踩了一堆坑,终于掌握了postgreSQL主从流的精髓,第7张

              📣 7.总结

              本文详细介绍了物理复制(流复制)的日常管理及避坑要要点