MySQL Operator 01 | 架构设计概览

高日耀 资深数据库内核研发
毕业于华中科技大学,喜欢研究主流数据库架构和源码,并长期从事分布式数据库内核研发。曾参与分布式 MPP 数据库 CirroData 内核开发(东方国信),现主要负责 MySQL 系列产品内核开发(青云科技)。

| 背景

随着云原生技术的成熟和普及,MySQL 运行在 K8s 平台提供服务的需求也越来越多。使用 MySQL on K8s 模式能够降低 MySQL 复杂的运维要求,对资源的利用也能达到更优的效果。

该系列文章将以 RadonDB MySQL Operator [1] 为例,为您介绍:如何基于成熟的 MySQL 高可用方案设计并实现编写 Operator。

什么是 RadonDB MySQL?

设计目标

让 RadonDB MySQL 使用 Operator 模式,支持在 Kubernetes 和 KubeSphere[2] 上安装部署和管理,自动执行与运行 RadonDB MySQL 集群有关的任务。

| MySQL on K8s 部署架构拓扑

MySQL Operator 01 | 架构设计概览

MySQL on K8s 架构拓扑图

拓扑图由两部分组成:

[En]

The topology diagram consists of two parts:

  1. MySQL 主从复制集群
  2. 实现 Raft 选主协议的 Xenon 管理集群

三个灰色长方形矩阵代表 Pod 角色,每个 Pod 都包含 MySQL 容器、Xenon 容器、Slowlog 容器、Metrics 容器等。每一个 Pod 里面的 Xenon 管理当前 Pod 中的 MySQL,获取并保存当前状态,获取当前执行的复制状态信息等。单个 Pod 角色图解如下(仅列出主要容器):

MySQL Operator 01 | 架构设计概览

Pod 角色图

| RadonDB MySQL Operator 架构

在 K8s 中 Operator 可以看作 CRD 和 Controller 的组合。

MySQL Operator 01 | 架构设计概览

Operator 架构

Operator 组件设计:

  • 角色管理 (RBAC) :使用 kube-rbac-proxy[3] 和 Kubernetes API 交互来做 RBAC 认证。
  • 控制器管理(Manager):包含一组自定义功能的控制器,其中包括最重要的通过自定义资源 Custom Resources 创建/更新 RadonDB MySQL 集群的控制器。
  • 自定义资源(Custom Resources):用来描述构建 RadonDB MySQL 集群基本信息。
  • Service 服务:用于实现集群读写分离服务,分别设计了 Leader Service (用于应用读写业务)和 Follower Service (用于应用只读业务)。当然也包含了集群对应的 Service Account(未列出) Headless Service(未列出,用于解决主从切换带来的 IP 漂移问题,使集群对外暴露固定读写节点的虚 IP)。

| 总结

以上就是 RadonDB MySQL Operator 架构概览和设计思路。下一篇,我们将进入源码解析部分,介绍 RadonDB MySQL Operator 脚手架选型和集群描述 Spec 和 集群状态 Status 定义。

[1]. RadonDB MySQL Kubernetes:https://github.com/radondb/radondb-mysql-kubernetes

[2]. KubeSphere:https://kubesphere.com.cn

[3]. kube-rbac-proxy:https://github.com/brancz/kube-rbac-proxy

相关阅读

Original: https://www.cnblogs.com/radondb/p/15528770.html
Author: RadonDB
Title: MySQL Operator 01 | 架构设计概览

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/508058/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Mybatis完整版详解

    一、简介 1.什么是MyBatis MyBatis 是一款优秀的持久层框架 它支持自定义 SQL、存储过程以及高级映射。 MyBatis 免除了几乎所有的 JDBC 代码以及设置参…

    数据库 2023年6月16日
    090
  • mybatis批量操作

    List类型 Mapper.java public int updateAccount(List<orderjob> orderJobs);</orderjob&…

    数据库 2023年6月16日
    091
  • Django REST framework JWT

    我们在验证完用户的身份后(检验用户名和密码),需要向用户签发JWT,在需要用到用户身份信息的时候,还需核验用户的JWT。 关于签发和核验JWT,我们可以使用Django REST …

    数据库 2023年6月14日
    092
  • Linux–>组管理和权限管理

    在Linux中的每一个用户必须属于一个组,不能独立于组外。 在Linux中每个文件有, 所有者, 所在组, 其他组的概念 查看文件的所有者 ls -ahl 举例: 改变文件所有者 …

    数据库 2023年6月14日
    0137
  • JUC学习

    如何正确停止线程? 停止线程应该是一种通知协作的方式,比如interrupt,但是它仅仅是通知线程,线程拥有完全的自主权,根据自身业务来判断什么时候停止,因为如果选择立即停止就可能…

    数据库 2023年6月16日
    099
  • 小米路由器3刷x-wrt分享

    准备工作 刷机有风险,操作需谨慎,建议使用备用路由器,以免与世隔绝。原文教程较为详细,因此本文就文件分享,及操作经验,具体请观看原文。 小米路由器3官方降级固件: http://b…

    数据库 2023年6月11日
    093
  • IntelliJ IDEA community 安装教程

    jetbrains官网下载 IntelliJ IDEA安装包 此处选择社区版的zip文件 下载完成后解压安装包,此处解压目录为 E:\IntelliJ IDEA\ 开始安装首先添加…

    数据库 2023年6月11日
    0104
  • Shell第四章《正则表达式》

    1.1、名词解释 正则表达式(regular expression, RE)是一种字符模式,用于在查找过程中匹配指定的字符。在大多数程序里,正则表达式都被置于两个正斜杠之间;例如/…

    数据库 2023年6月14日
    092
  • Failed to write to mysql.slow_log

    最近将一MySQL数据库的系统变量log_output从file调整为table后,偶尔会收到告警邮件,告警邮件内容为: Failed to write to mysql.slow…

    数据库 2023年5月24日
    085
  • mysql解压版简洁式本地配置方式

    1. 设置全局变量 解压mysql压缩包到指定位置, 然后配置全局变量, 在 path 中添加全局变量, 值为 mysql 根目录下 bin 目录路径, 比如: D:\code_s…

    数据库 2023年5月24日
    0129
  • 使用Ant从零开始搭建tomcat源码环境

    使用Ant从零开始搭建tomcat源码环境 视频教程 准备工作 编辑 Idea,且装上Checkstyle插件(或者其他开发工具) 编译依赖的Jar包. 开始搭建 搭建编译环境 安…

    数据库 2023年6月11日
    0100
  • MySQL实战45讲 15

    15 | 答疑文章(一):日志和索引相关问题 日志相关 binlog(归档日志)和redo log(重做日志)配合崩溃恢复,在两阶段提交的不同瞬间,MySQL如果发生异常重启,是怎…

    数据库 2023年6月16日
    0133
  • day03-MySQL基础知识02

    MySQL基础知识02 4.CRUD 数据库CRUD语句:增(create)、删(delete)、改(update)、查(Retrieve) Insert 语句 (添加数据) Up…

    数据库 2023年6月11日
    076
  • 新买的百度云服务器随便玩玩之部署简单页面

    新买的百度云服务器随便玩玩之部署简单页面 1.vscode 连接百度云服务器 vscode下载拓展 2.在远程资源管理器中添加新的远程资源管理 3.输入云服务器公网ip地址;输入密…

    数据库 2023年6月16日
    0114
  • Mysql_事务_存储过程_触发器

    一、什么是事务? 事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库…

    数据库 2023年6月11日
    092
  • 500 ZuulException: Forwarding error

    com.netflix.zuul.exception.ZuulException: Forwarding error at org.springframework.cloud.ne…

    数据库 2023年6月16日
    086
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球