|
进入10月之后一直在断断续续学习《Greenplum企业应用实战》一书,此书由何勇、陈晓峰所著,于2014年出版。这本书虽然有些老,但里面讲解的内容实践性很强,对得起书名。如果是GP初学者,建议大家购买此书用于初级阶段的学习,10年之前的书还可以购买到,不容易啊。大家可能有所疑问,Greenplum不是在2024年闭源了吗?还有学习的价值和必要吗?实际上虽然GP闭源了,但一些基于GP架构开发的一些国产分布式数据库却一直在发展优化中,比如北京四维纵横ymatrix分布式数据库和偶数科技的数据库。在10月之前,我本来是要预约参加偶数科技的数据库培训考试的,但由于和PG学习时间冲突了,无奈不得不放弃。ymatrix分布式数据库就是由灿总所在公司开发的。大家可能会问,你的标题写得是“Greenplum数据库学习的一些心得总结”,为什么要扯上另外两家国产数据库产品。
ymatrix分布式数据库是在GP的基础上研发并优化的,这样可以对比学习GP和ymatrix两种数据库,总结两者的相同点和不同点。
《Greenplum企业应用实战》一书介绍说,mirror segment有两种类型,一种是grouped mirror,一种是spared mirror。这两种方式优点和缺陷,书上的图文介绍得很清楚。同时Greenplum数据库默认使用grouped mirror,以下我是DS搜索到的两者的性能分析对比:
GP数据库 mirror segment有两种类型,一种是grouped mirror,一种是spared mirror。这两种方式优点和缺陷如下所示:
好的,这是一个非常核心的 Greenplum 数据库高可用性问题。我们来详细解析 Grouped Mirror 和 Spread Mirror(您提到的“Spared”更常见的叫法是“Spread”)这两种模式的优缺点。
首先,理解一下 Greenplum 的 Segment 镜像机制:为了防止数据丢失,每个 Primary Segment 都有一个对应的 Mirror Segment。当 Primary 宕机时,Mirror 会立刻接管工作,保证集群继续运行。
这两种模式的核心区别在于 Mirror Segment 在集群中的部署位置。
1. Grouped Mirror(分组镜像)
在这种模式下,所有 Mirror Segment 被集中部署在少数几个专用的 Segment 主机上。
架构:假设你有 8 台 Segment 主机(sdw1 ~ sdw8),你可能会指定 sdw7 和 sdw8 这两台机器专门用于存放所有 Primary Segment(在 sdw1 ~ sdw6 上)的 Mirror。
优点:
成本效益高:
主机数量少:你不需要为每个 Primary Segment 主机都配备一台对应的 Mirror 主机。可以用 N 台主机跑 Primary,用 M 台主机(M < N)跑所有 Mirror。这显著降低了硬件和软件许可成本。
资源利用率:专用的 Mirror 主机可以配置较低的硬件规格(如 CPU、内存),因为它们平时几乎不承担计算任务,只进行数据同步。
管理相对简单:
镜像节点集中在少数几台机器上,管理和监控的目标更明确。
缺陷:
单点故障风险极高(主要缺陷):
如果一台存放 Mirror 的主机(例如 sdw7)宕机,所有以它为主机的 Mirror Segment 都会失效。这意味着,此时如果任何一个对应的 Primary Segment(分布在 sdw1 ~ sdw6 上)也发生故障,整个 Greenplum 集群将因缺少可用的镜像而不可用。
这是一种“把所有鸡蛋放在一个篮子里”的策略,风险集中。
故障恢复性能瓶颈:
当一台 Primary 主机宕机需要恢复时,所有流量会涌向同一台 Mirror 主机。这台主机的网络和磁盘 I/O 会成为瓶颈,拖慢整个恢复过程。
同样,在集群初始化或大规模数据加载后,所有 Mirror 主机需要同时从众多 Primary 主机同步数据,网络和磁盘压力巨大。
资源浪费:
在正常情况下,这些专用的 Mirror 主机几乎处于闲置状态,计算资源被浪费。
适用场景:
对成本极其敏感的非核心测试、开发环境。
预算有限,且可以接受较高停机风险的准生产环境。
2. Spread Mirror(分散镜像)
在这种模式下,遵循“交叉部署”原则,每个 Segment 主机上既运行着 Primary Segment,也运行着属于其他主机的 Mirror Segment。
架构:假设有 4 台 Segment 主机(sdw1, sdw2, sdw3, sdw4)。
sdw1: 存放 P1(Primary), M2(sdw2 的 Mirror), M3(sdw3 的 Mirror)
sdw2: 存放 P2, M1, M4
sdw3: 存放 P3, M4, M1
sdw4: 存放 P4, M3, M2
优点:
高可用性和容错能力(核心优势):
这是真正的“无单点故障”设计。任何一台 Segment 主机宕机,其上面的 Primary Segment 的 Mirror 都均匀地分布在其他所有存活的主机上。集群仍然可以保持完整的功能和高可用性。
即使同时宕机多台主机(只要不是包含 Primary 和其对应 Mirror 的特定组合),集群依然有可能继续运行。
负载均衡和性能:
当一台 Primary 主机宕机后,其工作负载会由其 Mirror 接管,而这些 Mirror 分散在不同的主机上,避免了单台主机成为性能瓶颈。
故障恢复(Failover)和数据同步(Resynchronization)过程中的网络和磁盘 I/O 负载也被均匀分摊到集群中的所有节点,速度更快。
资源利用更充分:
所有主机在正常情况下都参与计算(运行 Primary),没有专门闲置的机器。
缺陷:
成本更高:
为了实现交叉部署,通常需要至少 2 台以上的 Segment 主机,并且主机数量最好能形成一个均衡的布局。为了获得良好的分散效果,主机数量不能太少。
所有主机都需要配置相同的、较高的硬件规格,因为每台机器都要承担 Primary 的计算任务。
规划和运维更复杂:
集群的扩容(例如增加新主机)需要仔细规划,以确保新的 Primary 和 Mirror 能够正确地分散开来,维持高可用性架构。
总结对比表格
特性 Grouped Mirror(分组镜像) Spread Mirror(分散镜像)
核心原则 镜像集中部署 镜像交叉分散部署
成本 低。主机和资源需求少。 高。需要更多同等规格的主机。
可用性 低。镜像主机是单点故障。 极高。真正的无单点故障。
性能 故障恢复时有性能瓶颈。 故障恢复性能好,负载均衡。
资源利用 镜像主机资源闲置,利用率低。 所有主机资源都用于计算,利用率高。
管理复杂度 相对简单 相对复杂,尤其扩容时
推荐场景 开发、测试、预算有限的非核心环境 所有生产环境和高可用性要求的环境
结论与建议
对于任何严肃的生产系统,强烈推荐使用 Spread Mirror 模式。
虽然它的初始硬件成本更高,但它提供的高可用性、卓越的故障恢复性能和数据安全性是 Grouped Mirror 无法比拟的。在生产环境中,因节省成本而选择 Grouped Mirror 所承担的停机风险,通常远远超过其节省的成本。
Greenplum 的官方最佳实践和初始化工具(如 gpinitsystem)也默认推荐并引导用户配置 Spread Mirror 模式。
对比书本和DS关于默认用哪种Mirror 模式,这个实际上与GP数据库版本是相关的,书本上用得案例是GP 3.X和4.X。
我们再看一下ymatrix分布式数据库,看看它默认是使用哪个Mirror 模式。我在ymatrix的技术群中发问,一个热心网友发了一个链接,https://ymatrix.cn/zh/doc/6.5/reference/mirror_distribution_policy。发现ymatrix数据库与众不同。内容如下:
YMatrix 默认采取环状镜像分布策略(Ring Mirroring):即在至少有两台主机的情况下,将一个主机中的 Primary 序号序列看作一个一维纸带,从中间对折,然后在另外的主机上从对折的中间序号为起点,顺时针均匀排列 Mirror 到其他主机。 扩容增加新的 Primary 不会影响之前已分布完成的镜像闭环,而是开启一个新的镜像环。
这是 YMatrix 的默认镜像分布策略。
此策略取上述两种策略利弊中和,是一个折中的方法。三种策略的对比请见下表:
散列分布 组分布 环状分布
系统稳定 不稳定 稳定 较稳定
负载均衡 均衡 不均衡 较均衡
通过对GP数据库和YMatrix数据库的对比,我们发现Ring Mirroring实际上是Grouped Mirror的优化版本,不愧是青出蓝胜于蓝。在此感谢技术群热心的网友的回答,使我茅塞顿开。
注:国内很多国产数据库和PG开源数据库同属一脉,但技术优化路径和思路却各有不同。多多学习不同家的国产数据库,发现其不同点和相同点对于个人的技术积累是很有帮助的。
合作电话:010-64087828
社区邮箱:greatsql@greatdb.com