『叶问』#41,三节点的MGR集群,有两个节点宕机后还能正常工作吗

MGR集群故障与恢复:理解多数派投票与可用性

『叶问』#41,三节点的MGR集群,有两个节点宕机后还能正常工作吗

每周学点MGR知识。

1. 三节点的MGR集群,有两个节点宕机后还能正常工作吗

要看具体是哪种情况。

如果两个节点是正常关闭的话,则会向MGR集群发送退出信号,这种情况下,这两个节点属于正常退出,最后仅剩的节点会被提升为Primary角色,还可以正常工作,允许对其进行读写,只是此时没有可用性冗余了。当其他节点再次启动并加入集群后,又能恢复正常服务。

如果是因为网络故障,或者mysqld进程发生oom、或被误杀、或其他原因退出了,则这些节点会被标识为 UNREACHABLE 状态,等待直到 group_replication_member_expel_timeout 时长(单位:秒)后这个节点才会正式退出集群。在这种情况下,一旦超过多数派节点处于 UNREACHABLE 状态时,则整个集群不可用,无法提供读写服务。这种情况下,需要把剩下的节点重启MGR服务才能恢复。

正常情况下,不要把 group_replication_member_expel_timeout 值调整太大,并且MGR的事务一致性级别尽量不要选择 AFTER 模式,以防出现整个集群服务不可用的问题,详细参见这篇文章:为什么MGR一致性模式不推荐AFTER

2. MGR可以像主从复制那样只启动两个节点吗

MGR在初始化启动时,是可以只启动两个节点,甚至只有一个节点,但是这样就失去MGR的意义了。因为只要少于三个节点,就没办法进行多数派投票,当发生网络故障等情况时,无法投票确认哪些节点该被踢出集群。

Enjoy GreatSQL :)

文章推荐:

GreatSQL MGR FAQ https://mp.weixin.qq.com/s/J6wkUpGXw3YkyEUJXiZ9xA

万答#12,MGR整个集群挂掉后,如何才能自动选主,不用手动干预 https://mp.weixin.qq.com/s/07o1poO44zwQIvaJNKEoPA

『2021数据技术嘉年华·ON LINE』:《MySQL高可用架构演进及实践》 https://mp.weixin.qq.com/s/u7k99y6i7riq7ScYs7ySnA

一条sql语句慢在哪之抓包分析 https://mp.weixin.qq.com/s/AYibbzl860D90rOeyjB6IQ

万答#15,都有哪些情况可能导致MGR服务无法启动 https://mp.weixin.qq.com/s/inSGpd0Q_XIl2Mb-VsvNsA

技术分享 | 为什么MGR一致性模式不推荐AFTER https://mp.weixin.qq.com/s/rNeq479RNsklY1BlfKOsYg

关于 GreatSQL

GreatSQL是由万里数据库维护的MySQL分支,专注于提升MGR可靠性及性能,支持InnoDB并行查询特性,是适用于金融级应用的MySQL分支版本。

Gitee: https://gitee.com/GreatSQL/GreatSQL

GitHub: https://github.com/GreatSQL/GreatSQL

Bilibili: https://space.bilibili.com/1363850082/video

微信&QQ群: 可搜索添加GreatSQL社区助手微信好友,发送验证信息“加群”加入GreatSQL/MGR交流微信群

QQ群:533341697 微信小助手:wanlidbc

本文由博客一文多发平台 OpenWrite 发布!

<think>好的,我现在需要帮助用户解答关于在1个master和2个worker节点的Kubernetes集群上使用Rook部署Ceph集群的问题,用户还提到想要部署3个MON、2个MGR和3个OSD。首先,我需要回忆Ceph和Rook的相关知识,特别是关于节点数量和组件部署的要求。 首先,用户的问题是关于在这样的集群架构下是否可行。用户可能是在自己的测试环境中尝试搭建Ceph,可能遇到了问题,或者想确认是否可行。用户提到的是三个MON、两个MGR和三个OSD,但节点数量只有三个(1 master + 2 worker)。需要分析每个组件的需求。 Ceph的MON(Monitor)需要奇数个来维持仲裁,通常至少三个。但如果在三个节点的情况下,每个节点部署一个MON,理论上是可以的。不过问题在于,如果master节点是否也作为工作节点使用。通常,Kubernetes的master节点默认有污点,不允许普通Pod调度,除非用户手动去掉污点。所以用户需要确认master节点是否可以作为MON、MGR或OSD的节点。如果master节点不可调度,那么只有两个worker节点,这时候部署三个MON可能有问题,因为需要三个节点,而用户只有两个可用。这时候可能需要调整MON的数量为1个,但这会牺牲高可用性。 接下来是MGR(Manager),Ceph要求至少两个MGR以实现高可用。用户想要部署两个,这在两个节点上是可行的,每个节点一个MGR。但同样需要考虑节点调度的问题。 然后是OSD,每个OSD对应一个磁盘。用户想要三个OSD,但只有两个worker节点的话,可能需要每个节点部署多个OSD,这取决于每个节点上的可用磁盘数量。Rook会自动在每个节点上为每个可用磁盘创建OSD,所以如果每个worker节点有多个磁盘,可以部署多个OSD。但如果每个节点只能有一个OSD,那么总共只能有两个,无法满足三个OSD的需求。所以用户需要检查每个worker节点是否有足够的磁盘。 另外,还需要考虑资源限制。如果master节点也被用来部署Ceph组件,需要确保有足够的CPU、内存和存储资源。否则可能导致性能问题或Pod无法调度。 总结一下,用户的问题主要在于节点数量和组件部署的匹配。可能的解决方案包括调整MON数量,确保节点可调度,检查磁盘数量,以及资源分配是否足够。需要将这些点详细解释给用户,并给出具体的配置建议和注意事项。</think>--- ### **一、核心结论** **可以部署**,但需要满足以下条件: 1. **Master节点需解除污点(Taint)**,允许调度Ceph Pod(默认Master节点不允许部署工作负载) 2. **至少3个节点均具备存储设备**(每个节点至少1块可用磁盘用于OSD) 3. **合理规划资源配额**,避免资源争抢 --- ### **二、关键组件部署规则分析** | 组件 | 最小数量 | 节点分布要求 | 注意事项 | |-------|----------|----------------------------------|--------------------------------------------------------------------------| | **MON** | 3 | **必须部署在不同节点** | 若节点数不足3,需强制调整`mon.count=1`(牺牲高可用性) | | **MGR** | 2 | 可部署在任意节点 | 建议分散到不同节点以提高可用性 | | **OSD** | 3 | 每个OSD对应一个独立磁盘 | 若节点数不足,需在部分节点挂载多块磁盘(例如:2节点各挂载2块磁盘) | --- ### **三、具体场景验证** #### **场景1:Master节点参与调度** - **步骤1:解除Master节点的污点** ```bash kubectl taint nodes <master-node-name> node-role.kubernetes.io/control-plane- ``` - **步骤2:部署Rook Ceph** ```yaml # cephcluster.yaml 示例片段 spec: mon: count: 3 # 强制要求3个节点可用 allowMultiplePerNode: false # 禁止单节点部署多个MON mgr: count: 2 storage: nodes: - name: "master-node" devices: - name: "sdb" # 必须存在实际磁盘 - name: "worker-node-1" devices: - name: "sdb" - name: "worker-node-2" devices: - name: "sdb" ``` **风险**:Master节点承担Ceph负载可能导致稳定性下降 #### **场景2:仅使用2个Worker节点** - **调整MON数量为1**(不推荐生产环境) ```yaml spec: mon: count: 1 # 失去高可用性 allowMultiplePerNode: false ``` - **OSD解决方案**:每个Worker节点挂载2块磁盘 ```yaml storage: nodes: - name: "worker-node-1" devices: - name: "sdb" - name: "sdc" # 第二块磁盘 - name: "worker-node-2" devices: - name: "sdb" - name: "sdc" ``` --- ### **四、生产环境建议** 1. **最小集群规模**:3个Worker节点(每个节点部署1MON+1OSD) 2. **Master节点隔离**:仅用于控制平面,不参与Ceph数据存储 3. **硬件配置**: - 每个节点至少2核4GB内存 - 磁盘类型:SSD优先(HDD需增加OSD数量补偿性能) 4. **网络要求**: - 万兆网络(至少千兆) - 分离公共网络与集群网络(通过`network`配置实现) --- ### **五、部署验证命令** ```bash # 检查MON分布 kubectl -n rook-ceph get pods -l app=rook-ceph-mon -o wide # 检查OSD状态 kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- ceph osd tree # 查看资源使用 kubectl -n rook-ceph top pod ``` --- ### **六、故障模拟与恢复** - **单节点故障测试**: ```bash # 关闭一个Worker节点 kubectl cordon <node-name> && kubectl drain <node-name> # 观察Ceph健康状态(预期出现HEALTH_WARN,但数据仍可访问) ``` - **恢复策略**: - 自动:Rook默认启用故障转移(需确保资源充足) - 手动:替换故障磁盘后执行`kubectl uncordon <node-name>` --- 通过合理规划,即使在小规模集群中也能部署Rook Ceph,但需明确**牺牲高可用性带来的风险**。建议测试环境验证通过后再投入生产使用。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值