如何通過 OpenShfit 運行高可用 MySQL數(shù)據(jù)庫


Portworx通過RedHat技術認證
我們的文章包括了MySQL on Kubernetes在不同平臺不同場景下的情況。相關文章的列表如下:
Running HA MySQL on Amazon Elastic Container Service for Kubernetes (EKS) (https://portworx.com/ha-mysql-amazon-eks/)
Running HA MySQL on Azure Kubernetes Service (AKS) ?(https://portworx.com/run-ha-mysql-azure-kubernetes-service/)
Running HA MySQL on Google Kubernetes Engine (GKE) (https://portworx.com/run-ha-mysql-google-kubernetes-engine/)
How to Backup and Restore MySQL on Red Hat OpenShift (https://portworx.com/backup-restore-mysql-red-hat-openshift/)
Running HA MySQL on IBM Cloud Kubernetes Service (IKS) (https://portworx.com/run-ha-mysql-ibm-cloud-kubernetes-service/)
Running HA MySQL on Rancher Kubernetes Engine (RKE) (https://portworx.com/run-ha-mysql-rancher-kubernetes-engine/)
Running HA MySQL on IBM Cloud Private (https://portworx.com/run-ha-mysql-ibm-cloud-private/)
OpenShift Container Platform是Red Hat在私有云/本地部署的應用部署平臺。許多用戶使用OpenShift來運行無狀態(tài)應用。但是通過OpenShift來運行類似數(shù)據(jù)庫的有狀態(tài)應用仍然是一個很大的挑戰(zhàn)。Red Hat提供了一系列的企業(yè)級存儲解決方案。但不論是GlusterFS (RedHat稱之為容器原生存儲),還是Ceph,都并不是被設計來運行高性能/低延遲數(shù)據(jù)庫的。GlusterFS和Ceph是很不錯的項目,但對于運行數(shù)據(jù)庫來說都存在較多問題。這些問題使得OpenShift的用戶不得不放棄通過OpenShift來運行數(shù)據(jù)服務。
但這些問題實際上是可以解決的。本篇文章中,我們將通過使用開源數(shù)據(jù)庫MySQL為例,來演示,如何通過OpenShift來運行數(shù)據(jù)庫。
在Openshift上運行數(shù)據(jù)庫的關鍵,需要一個專為高性能數(shù)據(jù)庫或其他有狀態(tài)應用設計的,云原生存儲解決方案。
Portworx是根據(jù)DevOps的原則,專為在容器中運行有狀態(tài)應用和生產系統(tǒng)設計的解決方案。使用Portworx,用戶可以使用任何容器排程器,在任何基礎架構上,管理任何數(shù)據(jù)庫或有狀態(tài)服務。包括:
OpenShift (https://docs.portworx.com/scheduler/kubernetes/openshift-install.html)
Kubernetes (https://portworx.com/use-case/kubernetes-storage/)
Mesosphere DC/OS (https://portworx.com/use-case/persistent-storage-dcos/)
Docker Swarm (https://portworx.com/use-case/docker-persistent-storage/)
OpenShift發(fā)布的3.7版本支持外部的卷插件,從而用戶能夠使用Portworx的企業(yè)級存儲功能來加密、快照、備份、確保高可用,來保護關鍵應用數(shù)據(jù)庫。
在本篇文章中,我們會演示如何通過5個步驟,在OpenShift上運行高可用的MySQL數(shù)據(jù)庫。
1.?? 為OpenShift安裝外部卷插件,這樣用戶就可以使用快照、備份、高可用、以及加密功能
2. ? 創(chuàng)建一個Kubernetes存儲類,含有復制因子=2,IO優(yōu)先級=High,快照間隔=60。這些值也可以根據(jù)用戶實際需要來配置
3. ? 在OpenShift里創(chuàng)建一個MySQL模板:導入JSON,配置OpenShift MySQL持久卷,包含內存上限、MySQL的參數(shù)、以及存儲類的大小
4. ? 從這個模板創(chuàng)建一個MySQL 持久卷,部署OpenShift的Pods來使用這個卷
5. ? 驗證MySQL高可用:通過關閉節(jié)點,刪除Pod來看MySQL已經(jīng)被自動重新排程了
如果你希望了解更多如何在OpenShift上運行高性能數(shù)據(jù)庫,可以查看Portworx網(wǎng)站上的相關文檔和視頻。
在OpenShift 3.7上安裝Portworx
安裝Portworx
Portworx在OpenShift上作為一個Daemonset被安裝。訪問?https://install.portworx.com來創(chuàng)建你的px-spec.yaml文件,并且運行oc apply –f px-spec.yaml。
在OpenShift上安裝Portworx的詳細操作文檔在這里:(https://docs.portworx.com/scheduler/kubernetes/openshift-install.html)
一旦Portworx安裝完成,我們就繼續(xù)創(chuàng)建一個存儲類,用來為我們的MySQL實例做卷的動態(tài)部署。
下面是一個存儲類的例子,我們用它來創(chuàng)建我們的卷,
kind: StorageClass
apiVersion: storage.k8s.io/v1beta1
metadata:
name: px-demo-sc
provisioner: kubernetes.io/portworx-volume
parameters:
repl: “2”
priority_io: “high”
snap_interval: “60”
在這個存儲類例子里,我們會創(chuàng)建一個叫做px-demo-sc的存儲類,并且會配置一些Portworx的參數(shù),
Replication –?repl:? “2”
我們可以配置,在集群里我們需要多少份卷的副本。Portworx支持的復制因子包括1/2/3。配置復制因子為2或者3,可以確保Portworx在集群中同步地把卷復制到2或3個節(jié)點里,同時確保數(shù)據(jù)的持久性。如果某個節(jié)點死掉,Portworx和OpenShift會把Pod重新部署到集群中存在Portworx卷的另外一個Worker節(jié)點上。
IO Priority –priority_io: ?“high”
Portworx允許你創(chuàng)建3個存儲池:High、Medium和Low。你可以使用具備SSD、HDD和SATA存儲的服務器。SSD是High,HDD是Medium,SATA是Low。如果是在云環(huán)境中也可以通過配置不同的IOPS來完成。當選擇High的存儲類,Portworx會把Pod排程到具備SSD存儲的服務器上。
Snapshots?–?snap_interval: ?“60”
Porworx會每60分鐘創(chuàng)建一個快照。這些快照可以被用來回滾數(shù)據(jù)庫,測試升級,以及做研發(fā)測試。
一個完整的存儲類參數(shù)說明在這里:(https://docs.portworx.com/scheduler/kubernetes/dynamic-provisioning.html)
注意:Portworx也支持備份你的容器卷到云中或者本地的對象存儲里。
(https://docs.portworx.com/cloud/backups.html)你可以創(chuàng)建備份的排程。這些備份可以被加密和恢復到同一個或者不同的Portworx集群里。
在OpenShift里創(chuàng)建一個MySQL模板
Portworx已經(jīng)創(chuàng)建了一個樣例MySQL OpenShift模板,參見(https://2.1.docs.portworx.com/samples/k8s/px-mysql-openshift.json?raw=true)
在OpenShift操作面板里選擇導入YAML/JSON,copy和粘貼PortworxMySQL 模板,點擊創(chuàng)建。

這將會出現(xiàn)Portworx MySQL (持久)模板配置界面。你可以選擇內存上限以及其他MySQL參數(shù),或者使用系統(tǒng)默認的參數(shù)。你也可以設定卷的大小,以及需要使用的存儲類。確保你使用的存儲類與之前創(chuàng)建的存儲類相匹配。

進入項目,通過點擊Storage驗證PVC已經(jīng)被創(chuàng)建并被綁定。

容器需要1到2分鐘來出現(xiàn),容器開始運行后,驗證存儲已經(jīng)連上了: 點擊Application、Pods;選擇MySQLPod,在終端里輸入df –H,你可以看到/var/lib/mysql/data目錄已經(jīng)被mounted到Portworx支持的PX-Volume里。

登入數(shù)據(jù)庫并且創(chuàng)建一張表。

確認Pod運行在哪個節(jié)點上,
oc get pods -n mysql-openshift -o wide
NAME READY STATUS RESTARTS AGE IP NODE
mysql-1-f4xlw 1/1 Running 0 1h 10.130.0.34 70-0-107-155.pools.spcsdns.net
關閉(Cordon off)正在運行Pod的節(jié)點,
oc adm cordon ?70-0-107-155.pools.spcsdns.net
驗證節(jié)點上的排程已經(jīng)被disable了,
oc get nodes
NAME STATUS AGE VERSION
70-0-107-155.pools.spcsdns.net Ready,SchedulingDisabled 23d v1.7.6+a08f5eeb62
刪除MySQL Pod,
oc delete pod mysql-1-q88qq -n mysql-openshift
pod “mysql-1-q88qq” deleted
驗證Pod已經(jīng)被重新排程到集群上的另一個節(jié)點里。
oc get pods -n mysql-openshift -o wide
NAME READY STATUS RESTARTS AGE IP NODE
mysql-1-j97tw 1/1 Running 0 1m 10.128.0.63 70-0-40-193.pools.spcsdns.net
回到OpenShift控制面板,選擇你的項目,到Application, Pods,點擊新的MySQL Pod, 然后是終端,驗證數(shù)據(jù)庫表還在。

總結來看,我們通過5個步驟,在OpenShift中運行了高可用的MySQL數(shù)據(jù)庫。
1. 為OpenShift安裝外部卷插件,這樣用戶就可以使用快照、備份、高可用、以及加密功能
2. 創(chuàng)建一個Kubernetes存儲類,含有復制因子=2,IO優(yōu)先級=High,快照間隔=60。這些值也可以根據(jù)用戶實際需要來配置
3. 在OpenShift里創(chuàng)建一個MySQL模板:導入JSON,配置OpenShiftMySQL持久卷,包含內存上限、MySQL的參數(shù)、以及存儲類的大小
4. 從這個模板創(chuàng)建一個MySQL 持久卷,部署OpenShift的Pods來使用這個卷
5. 驗證MySQL高可用:通過關閉節(jié)點,刪除Pod來看MySQL已經(jīng)被自動重新排程了
如果你希望了解更多如何在OpenShift上運行高性能數(shù)據(jù)庫,可以查看Portworx網(wǎng)站上的相關文檔和視頻。