天天看點

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 Operator 01 | 架構設計概覽

MySQL on K8s 架構拓撲圖

該拓撲設計圖中包含兩部分:

MySQL 主從複制叢集

實作 Raft 選主協定的 Xenon 管理叢集

三個灰色長方形矩陣代表 Pod 角色,每個 Pod 都包含 MySQL 容器、Xenon 容器、Slowlog 容器、Metrics 容器等。每一個 Pod 裡面的 Xenon 管理目前 Pod 中的 MySQL,擷取并儲存目前狀态,擷取目前執行的複制狀态資訊等。單個 Pod 角色圖解如下(僅列出主要容器):

MySQL Operator 01 | 架構設計概覽

Pod 角色圖

在 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

在 Kubernetes 上部署 RadonDB MySQL 叢集

基于 K8s 的新一代 MySQL 高可用架構實作方案

RadonDB MySQL on K8s 2.1.0 釋出!