作者:程潤(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:
微信群: 請(qǐng)搜索添加群助手微信號(hào) radondb
本文由博客一文多發(fā)平臺(tái) OpenWrite 發(fā)布僻弹!