背景
懂PostgreSQL, 学PolarDB不难, 就好像有九阳神功护体, 可以快速融会贯通.
对于DBA只要学会PolarDB精髓即可.
对于开发者来说不需要学习, 使用PolarDB和PostgreSQL一样.
为什么增加RO节点动则数小时?
https://www.bilibili.com/video/BV18F411v77H/
社区版本:
如何创建只读(RO)实例?
- 准备好RO节点所需的硬件(主要包括存储、主机, 存储必须大于或等于主节点的存储空间.)
- 配置主实例: 确保wal_level不是minimal级别, 配置pg_hba.conf, 创建流复制的数据库角色, 配置足够多的wal sender process. 确保主、只读实例的网络可达.
- 拷贝数据文件: 通过pg_basebackup, 或者使用操作系统的拷贝命令(start backup, copy, stop backup).
- 配置只读实例: recovery.conf (高版本这个文件被放到了postgresql.conf里, 配合 standby.signal 文件使用).
- 启动只读实例: 启动后, 自动从主实例接收wal, 在只读实例回放wal.
耗时公式可以简化为:
- 主实例数据文件/网络传输速度
问题:
如果数据文件很多, 拷贝过程可能持续很久, 由于wal日志不断产生, 主实例在checkpoint后可能删除掉一些旧的wal文件. 如果这些被删掉的wal文件是只读实例恢复依赖的wal, 那么只读实例就无法启动.
对于这样的问题, 通常的解决办法:
- 开启wal归档、
- 配置wal_keep_segments,
- 或者备份时使用slot记录接收wal的位置避免清除未被pg_basebackup接收的wal.
实例大了之后(一般来讲 SSD+万兆网 这种配置好的环境TB以上算大实例, 配置差的环境几百GB就算大实例了.), 创建只读实例确实有一些挑战. 动则数小时, 甚至可能由于WAL已被删除而功亏于溃.
如果正好是HA节点的standby节点挂了, 会有一个较长的时间窗口这个集群将处于单点状态.
PolarDB:
PolarDB 计算存储分离架构版本.
- PolarDB 创建RO(只读实例)还需要拷贝文件吗? 不需要. 只需要增加计算节点, 挂载共同的存储设备即可.
- 所以不管实例的存储多大, 增加RO节点都非常快.
- 对RO节点的配置有要求吗? 几乎没有要求, 可以采用低配置. 但是如果想用RO来做计算节点的HA备机, 推荐同等配置.
本期问题1:
请问给较大的PostgreSQL实例创建RO(只读)实例可能存在哪些问题?
- a. 拷贝时间过长, 主节点wal文件可能被清理, 只读实例可能无法启动
- b. 拷贝文件时可能导致网络带宽打满.
- c. 需要停主库才能创建只读实例
- d. 拷贝文件过程中可能耗费主实例的存储资源, 影响业务
答案:
- abd
解释:
- 参考文章内容, 建议的配置, 建议的限速方法pg_basebackup.
本期问题2:
请问PolarDB创建RO(只读)实例时需要拷贝数据文件吗?
- a. 需要
- b. 不需要
答案:
- b
解释:
- PolarDB 是计算存储分离架构, 计算节点共享同一份存储, 所以创建RO(只读)实例时不需要拷贝数据文件.
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




