容器化 | 在 Kubernetes 上部署 RadonDB MySQL 集群

作者:程潤(rùn)科 數(shù)據(jù)庫(kù)研發(fā)工程師

目前從事 RadonDB MySQL Kubernetes 研發(fā)棚点,熱衷于研究數(shù)據(jù)庫(kù)內(nèi)核镀赌、K8s 相關(guān)技術(shù)些楣。

RadonDB MySQL 是一款基于 MySQL 的開源续崖、高可用另伍、云原生集群解決方案鼻百。支持一主多從高可用架構(gòu),并具備安全摆尝、自動(dòng)備份温艇、監(jiān)控告警、自動(dòng)擴(kuò)容等全套管理功能结榄。目前已經(jīng)在生產(chǎn)環(huán)境中大規(guī)模的使用中贝,包含銀行、保險(xiǎn)臼朗、傳統(tǒng)大企業(yè)等邻寿。

RadonDB MySQL Kubernetes 支持在 Kubernetes 上安裝部署和管理蝎土,自動(dòng)執(zhí)行與運(yùn)行 RadonDB MySQL 集群有關(guān)的任務(wù)。

本教程主要演示如何使用 Git 和 Repo 命令行兩種方式在 Kubernetes 上部署 RadonDB MySQL 集群绣否。

部署準(zhǔn)備

已準(zhǔn)備可用 Kubernetes 集群誊涯。

方式一:通過(guò) Git 部署

執(zhí)行如下命令,將 RadonDB MySQL Chart 克隆到 Kubernetes 中蒜撮。

$ git clone https://github.com/radondb/radondb-mysql-kubernetes.git

在 radondb-mysql-kubernetes 目錄路徑下暴构,選擇如下方式,部署 release 實(shí)例段磨。

release 是運(yùn)行在 Kubernetes 集群中的 Chart 的實(shí)例取逾。通過(guò)命令方式部署,需指定 release 名稱苹支。

以下命令指定 release 名為demo砾隅,將創(chuàng)建一個(gè)名為demo-radondb-mysql的有狀態(tài)副本集。

  • 默認(rèn)部署方式
<For Helm v3>
 cd charts/helm
 helm install demo .
  • 指定參數(shù)部署方式

helm install時(shí)使用--set key=value[,key=value]债蜜,可指定參數(shù)部署晴埂。

以創(chuàng)建一個(gè)標(biāo)準(zhǔn)用戶,且創(chuàng)建指定可訪問(wèn)數(shù)據(jù)庫(kù)為例寻定。用戶名為my-user儒洛、密碼為my-password、授權(quán)數(shù)據(jù)庫(kù)為my-database狼速。

cd charts/helm
helm install demo \
 --set mysql.mysqlUser=my-user,mysql.mysqlPassword=my-password,mysql.database=my-database .
  • 配置 yaml 參數(shù)方式

執(zhí)行如下命令琅锻,可通過(guò) value.yaml 配置文件,在安裝時(shí)指定參數(shù)配置唐含。

cd charts/helm
helm install demo -f values.yaml .

方式二:通過(guò) repo 部署

添加并更新 helm 倉(cāng)庫(kù)浅浮。

$ helm repo add test https://charts.kubesphere.io/test
$ helm repo update

以下命令指定 release 名為demo,將創(chuàng)建一個(gè)名為demo-radondb-mysql的有狀態(tài)副本集捷枯。

$ helm install demo test/radondb-mysql
NAME: demo
LAST DEPLOYED: Wed Apr 28 08:08:15 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
The cluster is comprised of 3 pods: 1 leader and 2 followers. Each instance is accessible within the cluster through:
    <pod-name>.demo-radondb-mysql
To connect to your database:
1. Get mysql user `qingcloud`s password:
    kubectl get secret -n default demo-radondb-mysql -o jsonpath="{.data.mysql-password}" | base64 --decode; echo
2. Run an Ubuntu pod that you can use as a client:
    kubectl run ubuntu -n default --image=ubuntu:focal -it --rm --restart='Never' -- bash -il
3. Install the mysql client:
    apt-get update && apt-get install mysql-client -y
4. To connect to leader service in the Ubuntu pod:
    mysql -h demo-radondb-mysql-leader -u qingcloud -p
5. To connect to follower service (read-only) in the Ubuntu pod:
    mysql -h demo-radondb-mysql-follower -u qingcloud -p    

部署校驗(yàn)

集群創(chuàng)建成功后滚秩,默認(rèn)將創(chuàng)建一個(gè)有狀態(tài)副本集(StatefulSet ),以及三個(gè)用于訪問(wèn)節(jié)點(diǎn)的服務(wù)淮捆。

以默認(rèn)部署為例郁油,可獲取如下資源信息,則集群部署成功攀痊。

$ kubectl get statefulset,svc
NAME                                  READY   AGE
statefulset.apps/demo-radondb-mysql   3/3     45m
NAME                                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
service/demo-radondb-mysql            ClusterIP   None            <none>        3306/TCP   45m
service/demo-radondb-mysql-follower   ClusterIP   10.96.84.254    <none>        3306/TCP   45m
service/demo-radondb-mysql-leader     ClusterIP   10.96.178.195   <none>        3306/TCP   45m

連接 RadonDB MySQL

您需要準(zhǔn)備一個(gè)用于連接 MySQL 的客戶端桐腌。

與客戶端在同一 NameSpace 中

當(dāng)客戶端與 RadonDB MySQL 集群在同一個(gè) NameSpace 中時(shí),可使用 leader/follower service 名稱代替具體的 IP 和端口苟径。

  • 連接主節(jié)點(diǎn)(讀寫節(jié)點(diǎn))案站。
$ mysql -h <leader service 名稱> -u <用戶名> -p
用戶名為 `radondb_mysql`,release 名為 `demo` 棘街,連接示例如下:
$ mysql -h demo-radondb-mysql-leader -u radondb_mysql -p
  • 連接從節(jié)點(diǎn)(只讀節(jié)點(diǎn))蟆盐。
$ mysql -h <follower service 名稱> -u <用戶名> -p

用戶名為 radondb_mysql承边,release 名為 demo ,連接示例如下:

$ mysql -h demo-radondb-mysql-follower -u qradondb_mysql-p  

與客戶端不在同一 NameSpace 中

當(dāng)客戶端與 RadonDB MySQL 集群不在同一個(gè) NameSpace 中時(shí)石挂,可以通過(guò) podIP或服務(wù)ClusterIP來(lái)連接對(duì)應(yīng)節(jié)點(diǎn)博助。

  • 查詢 pod 列表和服務(wù)列表,分別獲取需要連接的節(jié)點(diǎn)所在的pod 名稱或?qū)?yīng)的服務(wù)名稱痹愚。
$ kubectl get pod,svc
  • 查看 pod/服務(wù)的詳細(xì)信息富岳,獲取對(duì)應(yīng)的IP。
$ kubectl describe pod <pod 名稱>
$ kubectl describe svc <服務(wù)名稱>

注意:pod 重啟后 pod IP 會(huì)更新拯腮,每次重啟后需重新獲取 pod IP窖式。

  • 連接節(jié)點(diǎn)。
$ mysql -h <pod IP/服務(wù) ClusterIP> -u <用戶名> -p

用戶名為 radondb_mysql疾瓮,pod IP 為 10.10.128.136 脖镀,連接示例如下:

$ mysql -h 10.10.128.136 -u radondb_mysql -p

持久化

MySQL 鏡像在容器路徑/var/lib/mysql中存儲(chǔ) MySQL 數(shù)據(jù)和配置。

默認(rèn)情況下狼电,會(huì)創(chuàng)建一個(gè) PVC 并將其掛載到指定目錄中。 若想禁用此功能弦蹂,您可以更改values.yaml禁用持久化肩碟,改用 emptyDir。

當(dāng) Pod 分配給節(jié)點(diǎn)后凸椿,將首先創(chuàng)建一個(gè) emptyDir 卷削祈,只要 Pod 在節(jié)點(diǎn)上持續(xù)運(yùn)行,則存儲(chǔ)卷便持續(xù)存在脑漫;當(dāng) Pod 節(jié)點(diǎn)中刪除時(shí) 髓抑,emptyDir 中的數(shù)據(jù)也將被永久刪除。

注意

  • PVC 中可以使用不同特性的持久卷(PersistentVolume优幸,PV)吨拍,其 I/O 性能會(huì)影響數(shù)據(jù)庫(kù)的初始化性能。所以當(dāng)使用 PVC 啟用持久化存儲(chǔ)時(shí)网杆,可能需要調(diào)整 livenessProbe.initialDelaySeconds 的值羹饰。
  • 數(shù)據(jù)庫(kù)初始化的默認(rèn)限制是60秒 (livenessProbe.initialDelaySeconds + livenessProbe.periodSeconds * livenessProbe.failureThreshold)。如果初始化時(shí)間超過(guò)限制碳却,kubelet 將重啟數(shù)據(jù)庫(kù)容器队秩,數(shù)據(jù)庫(kù)初始化被中斷,會(huì)導(dǎo)致持久數(shù)據(jù)不可用昼浦。

自定義 MySQL 配置

mysql.configFiles中添加/更改 MySQL 配置馍资。

configFiles:
   node.cnf: |
    [mysqld]
    default_storage_engine=InnoDB
    max_connections=65535
    
    # custom mysql configuration.
    expire_logs_days=7

參考

[1].RadonDB MySQLkubernetes:https://github.com/radondb/radondb-mysql-kubernetes
[2].MySQL 鏡像:https://hub.docker.com/repository/docker/zhyass/percona57
[3].PVC:https://kubernetes.io/zh/docs/concepts/storage/persistent-volumes/
[4].Helm Charts 配置:https://github.com/radondb/radondb-mysql-kubernetes/tree/main/charts/helm

關(guān)于 RadonDB

RadonDB 開源社區(qū)是一個(gè)面向云原生、容器化的數(shù)據(jù)庫(kù)開源社區(qū)关噪, 為數(shù)據(jù)庫(kù)技術(shù)愛好者提供圍繞主流開源數(shù)據(jù)庫(kù)(MySQL鸟蟹、PostgreSQL乌妙、Redis、MongoDB戏锹、ClickHouse 等)的技術(shù)分享平臺(tái)冠胯,并提供企業(yè)級(jí) RadonDB 開源產(chǎn)品及服務(wù)。

目前 RadonDB 開源數(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)一致性敬辣、讀寫分離雪标、一鍵安裝部署、多維指標(biāo)監(jiān)控&告警溉跃、彈性擴(kuò)容&縮容村刨、橫向自由擴(kuò)展、自動(dòng)備份&恢復(fù)撰茎、同城多活嵌牺、異地災(zāi)備 等。RadonDB 僅需企業(yè)及社區(qū)用戶專注于業(yè)務(wù)層邏輯開發(fā),無(wú)需關(guān)注集群高可用選型逆粹、管理和運(yùn)維等復(fù)雜問(wèn)題募疮,幫助企業(yè)及社區(qū)用戶大幅度提升業(yè)務(wù)開發(fā)與價(jià)值創(chuàng)新的效率!

GitHub:

https://github.com/radondb

微信群: 請(qǐng)搜索添加群助手微信號(hào) radondb

本文由博客一文多發(fā)平臺(tái) OpenWrite 發(fā)布僻弹!

?著作權(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)店門侈百,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人翰铡,你說(shuō)我怎么就攤上這事钝域。” “怎么了锭魔?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵网梢,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我赂毯,道長(zhǎng),這世上最難降的妖魔是什么拣宰? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任党涕,我火速辦了婚禮,結(jié)果婚禮上巡社,老公的妹妹穿的比我還像新娘膛堤。我一直安慰自己,他們只是感情好晌该,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布肥荔。 她就那樣靜靜地躺著,像睡著了一般朝群。 火紅的嫁衣襯著肌膚如雪燕耿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天姜胖,我揣著相機(jī)與錄音誉帅,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蚜锨,可吹牛的內(nèi)容都是我干的档插。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼亚再,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼郭膛!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起氛悬,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤则剃,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后圆雁,有當(dāng)?shù)厝嗽跇淞掷锇l(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
  • 文/蒙蒙 一般甲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鹅颊,春花似錦敷存、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至帝雇,卻和暖如春涮俄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背摊求。 一陣腳步聲響...
    開封第一講書人閱讀 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)容