容器化 | 基于 Kubernetes 的新一代 MySQL 高可用架構(gòu)實(shí)現(xiàn)方案

作者:高日耀 資深 MySQL 內(nèi)核研發(fā)

本文源于作者在 KubeSphere & Friends 2021 杭州站 的演講內(nèi)容《基于 Kubernetes 的新一代 MySQL 高可用架構(gòu)實(shí)現(xiàn)方案》。

本文是 MySQL 容器化系列的第三篇文章,主要介紹 MySQL 容器化 Helm 版本[1] 的設(shè)計(jì)思路鸿竖。

Dockerfile 簡(jiǎn)介

首先 RadonDB MySQL 一個(gè) Pod 中的容器角色中沟启,一般包含 MySQL、Xenon皇帮、slowlog 三個(gè)容器。


Alt text

其中,MySQL 和 Xenon Dockerfile 目錄結(jié)構(gòu)如下所示:

Alt text

MySQL Dockerfile 解析

啟動(dòng) MySQL 主進(jìn)程前皇筛,需要準(zhǔn)備數(shù)據(jù)庫(kù)配置、初始化等坠七,這些工作要在最終的 MySQL 運(yùn)行之前解決水醋。在制作鏡像時(shí),通過(guò)配置 MySQL Dockerfile 中 ENTRYPOINTCMD 參數(shù)彪置,可提前準(zhǔn)備數(shù)據(jù)庫(kù)配置拄踪、初始化等進(jìn)程。

Docker 是分層的拳魁,每一條命令都會(huì)建一個(gè)鏡像層惶桐,分層太多會(huì)導(dǎo)致快速膨脹。在制作鏡像時(shí),不建議分層太多姚糊。

MySQL Dockerfile 文件中命令示例如下:

Alt text

MySQL mysql-entry.sh 文件中包含啟動(dòng)命令贿衍,其主要執(zhí)行流程如下:

Alt text

Xenon Dockerfile 解析

Xenon Dockerfile 比較簡(jiǎn)單,跟 MySQL Dockerfile 流程類似救恨。

Xenon Dockerfile 命令示例如下:

Alt text

xenon-entry.sh 主要功能:

  1. 生成 Xenon 配置文件贸辈,在 Xenon 啟動(dòng)的時(shí)候調(diào)用
  2. ping host

name 生成及環(huán)境變量

name 生成

首先我們看下 chart 目錄下功能文件列表,chart 下包含的文件如下圖所示:

Alt text

其中肠槽,_helpers.tpl 常需引用 Chart.yamlvalues.yaml 中定義的變量裙椭,繼而實(shí)現(xiàn)如下能力:

  • 生成 app 名字:helm install release <版本名,如 emo> <項(xiàng)目名署浩,如radondb-mysql>
  • 生成 serviceAccountName 名字揉燃。
  • 生成 chart 名字和版本。

通過(guò)命令 helm get all demo筋栋,可查看 demo 中所有信息炊汤。查看 service 部分 name 示例如下:

104 # Source: radondb-mysql/templates/serviceaccount.yaml
105 apiVersion: v1
106 kind: ServiceAccount
107 metadata:
108   name: demo-radondb-mysql
109   labels:
110     app: demo-radondb-mysql
111     chart: radondb-mysql-1.0.0
112     release: "demo"
113     heritage: "Helm"

環(huán)境變量

環(huán)境變量 主要目的是保存密碼和配置參數(shù)解耦。

  • secrets.yaml 功能

    • Opaque
    • base64 轉(zhuǎn)碼
    • 加密插件
  • configmap.yaml 功能

    • 將配置參數(shù)和 docker 鏡像解耦
    • 保存一些配置參數(shù)和修改 lable 的腳本
Alt text

如何識(shí)別集群中 leader弊攘、follower 角色抢腐?

識(shí)別集群節(jié)點(diǎn)角色,需創(chuàng)建一個(gè)服務(wù)賬號(hào)襟交,并授予相應(yīng)的權(quán)限迈倍。通過(guò)執(zhí)行在 config 文件中保存的腳本,調(diào)用相應(yīng)的 API 來(lái)修改對(duì)應(yīng)角色的 lable捣域。

Alt text

節(jié)點(diǎn)角色修改后啼染,相應(yīng) lable 效果如下。此時(shí)焕梅,通過(guò)服務(wù)標(biāo)簽后綴迹鹅,即可輕松辨別 Leader 和 Follower 角色的節(jié)點(diǎn)。


Alt text

在 KubeSphere[2] 管理控制臺(tái)贞言,可查看到角色修改后示例如下:

Alt text

如何實(shí)現(xiàn)讀寫(xiě)分離斜棚?

RadonDB MySQL 讀寫(xiě)分離,通過(guò) Headless service for stable DNS [3] 來(lái)實(shí)現(xiàn)该窗。

Alt text

分配一個(gè)集群內(nèi)部可以訪問(wèn)的虛擬 IP (VIP)弟蚀,VIP 是固定的,而節(jié)點(diǎn)所綁定的 Pod 的 IP 是可以變化的酗失,每個(gè) Node 上分配一個(gè)端口作為外部訪問(wèn)入口义钉。以此特點(diǎn),可以設(shè)定一個(gè)讀 IP 和一個(gè)寫(xiě) IP级零,來(lái)達(dá)到讀寫(xiě)分離的目的断医,而無(wú)需擔(dān)心新綁定 Pod 致使 IP 發(fā)生變化滞乙。

以 Leader 節(jié)點(diǎn)為例,下圖所示的 ClusterIP 對(duì)應(yīng)寫(xiě) IP(10.111.92.63)鉴嗤, 其綁定當(dāng)前的 Pod(主)IP 為 172.17.0.10斩启。

Alt text

邂逅 KubeShpere

RadonDB MySQL 已經(jīng)登錄 KubeSphere 應(yīng)用商店(3.1.0 版本推出),可以通過(guò) KubeSphere 來(lái)實(shí)現(xiàn)對(duì)集群的查看和管理醉锅。

1兔簇、通過(guò)終端查看集群正常時(shí) gtid 和對(duì)應(yīng)的狀態(tài)

Alt text

2、模擬 Follower 節(jié)點(diǎn)掛掉場(chǎng)景

kill 掉名為 demo-radondb-mysql-2 的 follower:

Alt text

從另外一個(gè)節(jié)點(diǎn)登入終端再次查看集群狀態(tài)硬耍,該 follower 節(jié)點(diǎn) MySQL 和 IO/SQL 狀態(tài)都不正常垄琐。

Alt text

從 KubeSphere 界面查看:

Alt text

掛掉的節(jié)點(diǎn)重新拉起,集群開(kāi)始重新發(fā)起選舉:

Alt text

3经柴、Leader (demo-radondb-mysql-0) 節(jié)點(diǎn)掛掉場(chǎng)景

leader 降級(jí)為 follower狸窘,原來(lái)另外兩個(gè)從節(jié)點(diǎn)進(jìn)入候選者狀態(tài):

Alt text

從 KubeSphere 界面查看,這時(shí)已經(jīng)查不到 leader pod:

Alt text

等待一段時(shí)間坯认,集群選出新主(demo-radondb-mysql-2):

Alt text

從 KubeSphere 看到原來(lái)的主(demo-radondb-mysql-0)變?yōu)?follower:

Alt text

4翻擒、網(wǎng)絡(luò)隔離

將新主(demo-radondb-mysql-2) 隔離。

Alt text

等待一段時(shí)間牛哺,可以看到新主(demo-radondb-mysql-0)重新被選出:

Alt text

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

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

[3]. Headless service:https://kubesphere.com.cnhttps://kubernetes.io/docs/concepts/services-networking/service/

關(guān)于 RadonDB

RadonDB 開(kāi)源社區(qū)是一個(gè)面向云原生陋气、容器化的數(shù)據(jù)庫(kù)開(kāi)源社區(qū), 為數(shù)據(jù)庫(kù)技術(shù)愛(ài)好者提供圍繞主流開(kāi)源數(shù)據(jù)庫(kù)(MySQL引润、PostgreSQL巩趁、Redis、MongoDB淳附、ClickHouse 等)的技術(shù)分享平臺(tái)议慰,并提供企業(yè)級(jí) RadonDB 開(kāi)源產(chǎn)品及服務(wù)。

目前 RadonDB 開(kāi)源數(shù)據(jù)庫(kù)系列產(chǎn)品已被 光大銀行燃观、浦發(fā)硅谷銀行褒脯、哈密銀行、泰康保險(xiǎn)缆毁、太平保險(xiǎn)、安盛保險(xiǎn)到涂、陽(yáng)光保險(xiǎn)脊框、百年人壽、安吉物流践啄、安暢物流浇雹、藍(lán)月亮、天財(cái)商龍屿讽、羅克佳華昭灵、升哲科技吠裆、無(wú)錫匯跑體育、北京電信烂完、江蘇交通控股试疙、四川航空、昆明航空抠蚣、國(guó)控生物 等上千家企業(yè)及社區(qū)用戶采用祝旷。

RadonDB 可基于云平臺(tái)與 Kubernetes 容器平臺(tái)交付,不僅提供覆蓋多場(chǎng)景的數(shù)據(jù)庫(kù)產(chǎn)品解決方案嘶窄,而且提供專業(yè)的集群管理和自動(dòng)化運(yùn)維能力怀跛,主要功能特性包括:高可用主從切換、數(shù)據(jù)強(qiáng)一致性柄冲、讀寫(xiě)分離吻谋、一鍵安裝部署、多維指標(biāo)監(jiān)控&告警现横、彈性擴(kuò)容&縮容漓拾、橫向自由擴(kuò)展、自動(dòng)備份&恢復(fù)长赞、同城多活晦攒、異地災(zāi)備 等。RadonDB 僅需企業(yè)及社區(qū)用戶專注于業(yè)務(wù)層邏輯開(kāi)發(fā)得哆,無(wú)需關(guān)注集群高可用選型脯颜、管理和運(yùn)維等復(fù)雜問(wèn)題,幫助企業(yè)及社區(qū)用戶大幅度提升業(yè)務(wù)開(kāi)發(fā)與價(jià)值創(chuàng)新的效率贩据!

GitHub:

https://github.com/radondb

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末栋操,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子饱亮,更是在濱河造成了極大的恐慌矾芙,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件近上,死亡現(xiàn)場(chǎng)離奇詭異剔宪,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)壹无,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)葱绒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人斗锭,你說(shuō)我怎么就攤上這事地淀。” “怎么了岖是?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵帮毁,是天一觀的道長(zhǎng)实苞。 經(jīng)常有香客問(wèn)我,道長(zhǎng)烈疚,這世上最難降的妖魔是什么黔牵? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮胞得,結(jié)果婚禮上荧止,老公的妹妹穿的比我還像新娘。我一直安慰自己阶剑,他們只是感情好跃巡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著牧愁,像睡著了一般素邪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上猪半,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天兔朦,我揣著相機(jī)與錄音,去河邊找鬼磨确。 笑死沽甥,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的乏奥。 我是一名探鬼主播摆舟,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼邓了!你這毒婦竟也來(lái)了恨诱?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤骗炉,失蹤者是張志新(化名)和其女友劉穎照宝,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體句葵,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡厕鹃,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了乍丈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片熊响。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖诗赌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情秸弛,我是刑警寧澤铭若,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布洪碳,位于F島的核電站,受9級(jí)特大地震影響叼屠,放射性物質(zhì)發(fā)生泄漏瞳腌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一镜雨、第九天 我趴在偏房一處隱蔽的房頂上張望嫂侍。 院中可真熱鬧,春花似錦荚坞、人聲如沸挑宠。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)各淀。三九已至,卻和暖如春诡挂,著一層夾襖步出監(jiān)牢的瞬間碎浇,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工璃俗, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留奴璃,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓城豁,卻偏偏與公主長(zhǎng)得像苟穆,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子钮蛛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容