天天看点

【PostgreSQL 创新营】第六课:PostgreSQL复制原理及高可用集群 答疑汇总

Q1:刘海清,如何在从库备份,选择什么软件或者命令

1)生产建议使用从库进行备份。数据备份的方式有:pg_dump、pg_dumpall、pg_rman、barman、pg_basebackup等

2)日志备份可以通过:从库设置archive_mode = always方式实现日志记录。linux平台下可每日定时tar + rsync备份到远端

Q2:两个数据库如何实现增量同步?有更新逻辑时如何处理?

1)增量同步的方式有:

物理同步:基于流复制协议,将增量的redo回放到从库。如有更新逻辑,会将对应的redo回放,更新对应buffer

逻辑同步:同步模式设置为:logical。可使用内置的逻辑复制方式,即发布端创建PUBLICATION,订阅端创建SUBSCRIPTION。当然也可以使用wal2json等插件

2)物理同步是整库的复制,类似oracle的DG。逻辑复制可以针对具体表等

3)使用逻辑同步时建议表均有主键,以实现更好的性能

Q3:PG如何做基于流复制的跨数据中心(跨子网)自动故障转移解决方案,要求对应用透明,不用改连接串

1)跨数据中心想实现应用透明,不改连接串。通常应用访问DNS域名,具体解析到那个数据中心由高可用去判断

2)跨数据中心的自动故障转移方案:使用partoni(推荐)、pg_auto_failover

Q4:pg 9.4有这个逻辑复制订阅功能吗?

有,从PG 9.4开始的

Q5:PG如何从WAL日志解析出具体SQL?有什么好的工具推荐吗?

可以使用wal2json、alidecode、pgoutput、decoderbufs等

Q6:PG中,业务误操作后快速闪回具体某张表的某些操作?

开源版暂时没有闪回功能。可以基于流复制搭建专门的从库用于误操作恢复(基于时间点恢复),有快照可以加快恢复速度

Q7:PG的流复制在备库应用日志时,是直接修改数据文件的物理块吗?不用翻译成SQL重跑

物理复制不需要

Q8:刚老师讲的partoni做高可用可能会丢数据是在什么场景下?

建议从数据库端实现数据的一致性保障!

Q9:ECOX开源吗?

商业系统,可自行下载测试:

https://w3.ww-it.cn/Fileud/lists/cate_id/30

Q10:siupan,pg_auto_failover是否可用于生产环境?

建议复查代码逻辑

Q11:repmgr里面的witness什么场景下必须用?没有好像也影响不大

通常用于仲裁节点,建议核查文档

Q12:pg的日志数据解析工具有么,支持kafka,或者直接到clickhouse类数仓的

1)日志解析:logical 模式plugin解析redo log

2)同步依赖CDC工具,详见:

正确的配置和使用 Debezium CDC 捕获、同步 PG 逻辑增量数据

https://github.com/digoal/blog/blob/master/202011/20201127_02.md

Q13:请问下从库的统计信息都是为零的,在从库执行计划是怎么生产的,会参考主库的统计信息吗?

1)正常情况下从库也是有统计信息的

2)可以核查是否是基于规则的,或者硬版本

Q14:PG可以用这个逻辑复制订阅功能吗?

理论上内核为PG 9.4以后的支持,详见GP文档官方文档

Q15:请问流复制一个主节点支持多少个从节点?

1)受限于max_wal_senders参数配置

2)受限于具体的硬件可用资源

Q16:个人在实现WAL逻辑复制工具时,通过创建复制槽时,获取快照,然后根据快照实现一些业务操作,但在业务操作出错时,如果获取先前的快照 名称,看文档上创建复制槽时的快照 仅在当时有效,再连接就获取不到了,请问有什么解决方案?

1)逻辑复制槽是全局的,与是否当前会话无关

2)快照可以export导出给其他会话。例如:备份数据。可当前启动事务并创建快照,然后创建逻辑复制槽,其他会话可正常使用该逻辑复制槽。当前会话导出全量数据。从而全量+增量备份

Q17:pg的从库 能支持延时从库么

支持的。可以在recovery.conf添加参数,例:recovery_min_apply_delay = '48h'

Q18:pg页内组织tuple,是不是很容易在页间移数据?

是的。如进行垃圾回收,会挪动组内tuple。详解可观看视频答疑

Q19:pg加索引可以加参数不锁表,加列可以不锁表吗

1)正常情况下(不需要rewrite table),加列是当即生效的。这个也是有区别于MySQL的

2)建议业务时间段内频繁使用的大表,选定闲时做加列操作