操作指南:通過 OpenShfit 運行高可用 MySQL數(shù)據(jù)庫

如何通過 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)站上的相關文檔和視頻。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容