以前文章分享过Redis Operator容器化方案,本次介绍MySQL Operator容器化方案。与内存库的Redis数据库比起来,容器化MySQL有着更多的需求,主要有以下三个方面:
-
MySQL对存储的要求很高
-
MySQL Pod的IP需要固定
-
MySQL需要支持同城灾备
MySQL容器化拓扑结构
固定MySQL Pod IP可以在K8S上使用Calico网络插件实现。存储方面使用高性能分布式存储或者直接挂载本地盘都可达到要求,这些不在本文做重点介绍。
MySQL容器化有同城灾备需求。对于MySQL部分,我们使用MySQL MGR单主模式,将MGR节点分散在本地/同城运行,正常情况下主节点运行在本地,灾备切换时将主节点切换至同城。对于K8S集群部分,我行K8S集群没有进行跨本地/同城部署,所以MySQL MGR节点会分布在两个K8S集群运行。对于MySQL服务暴露部分,在每个K8S集群上为每个MGR集群各建立Read、Write Service,通过K8S Service机制对外暴露MySQL 服务。整体拓扑结构如下所示:

MySQL Operator功能逻辑
MySQL Operator的功能包括MGR集群创建、集群维护、CPU内存资源升级、MGR节点扩缩容、节点迁移等。由于MGR集群跨K8S部署,所以在Operator的逻辑上不能只管控本地资源,还需关注在同城运行的那一部分MGR节点的情况。
MGR集群创建
在MySQL MGR集群CR资源定义中包含以下三个字段:
-
flag字段为primary标识MGR的主应该在本地
-
ipList定义部署在本地K8S集群的MGR Pod列表,以及具体的Po

本文介绍了MySQL Operator的容器化方案,包括MGR集群的创建、维护、资源升级和灾备切换。在K8S上,通过Calico固定Pod IP,使用MySQL MGR单主模式实现同城灾备。Operator负责MGR集群的生命周期管理,确保在异常情况下服务的持续可用。灾备切换时,Operator会根据flag字段尝试将主节点切换至同城集群。
最低0.47元/天 解锁文章
351

被折叠的 条评论
为什么被折叠?



