PostgreSQL高可用技术分析和实践

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
创建standby.signal文件 一定要确定standby.signal文件存在,才能启动旧主库,不然旧主库启动后,就无法与新主库进行同步 touch standby.signal pg_ctl start
④内部公开 请勿外传 15
流复制配置
JDBC连接配置
target_session_attrs
PG高可用技术分析和实践
报告日期:2020.9
④内部公开 请勿外传
提纲
Outline
WAL日志 流复制原理 流复制配置 高可用集群方案
① 绝密④信内息部严公开禁泄请勿露外传2
WAL日志
wal日志即write ahead log预写式日志
保证事务的持久性和数据完整性 避免频繁IO对性能的影响 wal记录的是数据的物理变更信息
创建流复制的角色 create role repl login password 'repl#2018' replication;
④内部公开 请勿外传 12
流复制配置
备库配置
修改pg_hba.conf文件 host replication all
172.18.0.0/16
trust
修改postgresql.conf文件 listen_addresses = '*' max_wal_senders = 5 wal_level = replica synchronous_standby_names = 'pg25' primary_conninfo = 'host=172.18.9.25 port=5432 user=repl password=xxxxxx application_name=pg27'
创建备库PGDATA目录 mkdir -p /var/postgres_5432/data chmod postgres:postgres /var/postgres_5432/data chmod 750 /var/postgres_5432/data
④内部公开 请勿外传 13
流复制配置
备库配置
④内部公开 请勿外传 20
高可用集群
pg_auto_failover 一主两从架构
PostgreSQL主节点 PostgreSQL从节点 Monitor节点 关键参数
number_sync_standbys = 1 synchronous_standby_names = 'ANY 1 (pgautofailover_standby_128,pgautofailover _standby_129)' replication quorum = true
any (default) read-write read-only primary standby prefer-standby 黄色高亮状态需要PostgreSQL14版本才能支持
配置示例: postgres://crp_user:crpkingdee@**:5432/kingdee?target_session_attrs=read-write 参考链接:
缺点: 不提供VIP支持 同步模式不能自动转换成异步模式 切换过程需要手工配置过多
④内部公开 请勿外传 19
高可用集群
pg_auto_failover 一主一从架构
PostgreSQL主节点 PostgreSQL从节点 Monitor节点 关键参数
number_sync_standbys = 0 synchronous_standby_names = '' replication quorum = true
④内部公开 请勿外传 16
高可用集群
主流的集群解决方案
pgpool-II 应用与pg数据库之前这层,pgpool-II提供连接池,基于VIP切换, Patroni pacemaker+corosync repmgr pg_auto_failover
④内部公开 请勿外传 17
高可用集群
172.18.0.0/16
trust
修改postgresql.conf文件 listen_addresses = '*' hot_standby = on max_wal_senders = 5 wal_level = replica synchronous_standby_names = 'pg27' primary_conninfo = 'host=172.18.9.27 port=5432 user=repl password=xxxxxx application_name=pg25'
注释postgresql.auto.conf文件的配置 # primary_conninfo = 'user=repl passfile=''/var/lib/pgsql/.pgpass'' host=172.18.9.25 port=5432 sslmode=prefer sslcompression=0 gssencmode=prefer krbsrvname=postgres target_session_attrs=any'
UPDATE c1 1 2 UPDATE c1 5 6 COMMIT
Wal Buffer
c1 21 c1 65
Data Buffer
wal log
data file
checkpoint
④内部公开 请勿外传 4
WAL日志
checkpoit触发时机
手动执行CHECKPOINT命令 执行需要检查点的命令(例如pg_start_backup 或pg_ctl stop | restart等等) 达到检查点配置时间(checkpoint_timeout) 达到max_wal_size阈值
流复制原理
wal日志来传送的方式有两种:基于文件的日志传送和流复制 流复制同步方式:异步流复制和同步流复制
④内部公开 请勿外传 7
流复制原理
物理流复制的特点:
延迟极低,支持大事务 支持断点续传 支持多副本 配置相对简单 备库与主库物理完全一致,并支持只读
④内部公开 请勿外传 8
流复制原理
启动备库 pg_ctl start -D /var/postgres_5432/data
④内部公开 请勿外传 14
流复制配置
主备库切换
关闭主库 pg_ctl stop -m fast
激活备库 如果standby.signal文件不存在了,表示备库已切换成为主库。 pg_ctl promote -D /var/postgres_5432/data
默认300
checkpoint_completion_target 检查点meout的百分比, 默认0.5
archive_timeout
wal文件如果在该参数值时间内切换到新的wal文件,那么会强制切换到下一个WAL文件
④内部公开 请勿外传 6
备份数据: pg_basebackup -h 172.18.9.25 -U repl -F p -P -R -D /var/postgres_5432/data/
确认standby.signal文件 # ls -l $PGDATA/standby.signal -rw------- 1 postgres postgres 0 May 6 00:15 standby.signal
主流的集群解决方案
pgpool-II Patroni repmgr pg_auto_failover
④内部公开 请勿外传 18
高可用集群
repmgr
1 Primary + 1 Standby 1 Primary + 2 Standbys 1 Primary + 3 Standbys + 1 Witness)
④内部公开 请勿外传 9
流复制原理
同步配置参数:synchronous_standby_names
语法: [FIRST] num_sync ( standby_name [, ...] ) ANY num_sync ( standby_name [, ...] ) standby_name [, ...]
④内部公开 请勿外传 10
流复制配置
流复制配置过程
PG软件安装 postgresql.conf 参数配置 pg_hba.conf 配置 pg_basebackup方式部署备库
④内部公开 请勿外传 11
流复制配置
主库配置
修改pg_hba.conf文件 host replication all
max_wal_size
检查点之间产生的WAL最大值,这只是一个软限制,在负载高或者一些其他异常情况下可能会超 过这个值
wal_keep_segments pg_wal目录中最少保留WAL文件的数量,主要用于备用服务器同步
checkpoint_timeout 设置两次自动WAL检查点事件之间需要等待的最大时间(数据库奔溃需要恢复的最长时间),
示例: synchronous_standby_names ="s1,s2,s3" synchronous_standby_names ="2 (s1,s2,s3)" synchronous_standby_names ="FIRST 2 (s1,s2,s3)" synchronous_standby_names ="ANY 2 (s1,s2,s3)" synchronous_standby_names ="*" synchronous_standby_names ="FIRST 2 (*)" synchronous_standby_names ="ANY 2 (*)"
④内部公开 请勿外传 3
WAL日志
wal日志工作原理
change发生时:先要将变更后内容写入wal buffer中,再将变更后的数据写入data buffer commit发生时:wal buffer中数据刷新到磁盘 checkpoint发生时:将所有data buffer刷新的磁盘
1> UPDATE c1 1 2 2> UPDATE c1 5 6 3> COMMIT
④内部公开 请勿外传 22
④内部公开 请勿外传 5
WAL日志
关键参数
wal_segment_size 单个WAL文件的大小,默认为16MB
min_wal_size
WAL文件保留的最小尺寸,当WAL的使用低于这个配置,那么在checkpoint时候对WAL以回收 的形式处理,而不是删除,min_wal_size至少要大于wal_keep_segments*16M
④内部公开 请勿外传 21
高可用集群
pg_auto_failover 一主多从架构
PostgreSQL主节点 PostgreSQL从节点 PostgreSQL异地从节点 Monitor节点 关键参数
number_sync_standbys = 1 synchronous_standby_names = 'ANY 1 (pgautofailover_standby_128,pgautofailover_st andby_129)' replication quorum = true
检查主库postgresql.conf文件 grep primary_conninfo postgresql.conf primary_conninfo = 'host=172.18.9.27 port=5432 user=repl password=repl#2018 application_name=pg25'
流复制同步级别
remote_apply
on remote_write
local off
事务commit或rollback时,等待redo在主备数据库持久化, 并且redo在备库已经应用 事务commit或rollback时,等待redo在主备数据库持久化,推荐双节点使用 事务commit或rollback时,等待redo在主库持久化, redo在备库已写入OS缓存,没有持久化 事务commit或rollback时,等待redo在主库持久化 事务commit或rollback时,等待redo在主库已写入wal buffer,不需要等待其持久化
相关文档
最新文档