天天看點

Kubernetes中部署MySQL高可用叢集

mysql簡介

mysql是一個關系型資料庫管理系統,由瑞典mysql ab 公司開發,屬于 oracle 旗下産品。mysql 是最流行的關系型資料庫管理系統之一,在 web 應用方面,mysql是最好的 rdbms (relational database management system,關系資料庫管理系統) 應用軟體之一。mysql是一種關系型資料庫管理系統,關系資料庫将資料儲存在不同的表中,而不是将所有資料放在一個大倉庫内,這樣就增加了速度并提高了靈活性。mysql所使用的 sql 語言是用于通路資料庫的最常用标準化語言。mysql 軟體采用了雙授權政策,分為社群版和商業版,由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,一般中小型網站的開發都選擇 mysql 作為網站資料庫。

mysql的高可用方案

下文介紹的mysql高可用方案采用主從複制+讀寫分離,即由單一的master和多個slave所構成。其中,用戶端通過master對資料庫進行寫操作,通過slave端進行讀操作。master出現問題後,可以将應用切換到slave端。 此方案是mysql官方提供的一種高可用解決方案,節點間的資料同步采用mysql replication技術。mysql replication從一個mysql資料庫伺服器(master)的資料複制到一個或多個mysql資料庫伺服器(slave)。在預設情況下,複制是異步的;slave不需要一直接收來自主機的更新。根據配置,可以複制資料庫中的所有資料庫、標明的資料庫,或者特定的表。

安裝部署

1.建立configmap

通過yaml檔案建立名為mysql的configmap

kubectl apply -f mysql-configmap.yaml -n kube-public

通過yaml檔案建立兩個service,分别是mysql和mysql-read:

cat mysql-service.yaml

kubectl apply -f mysql-service.yaml -n kube-public

3.建立statefulset

通過yaml檔案建立名為mysql的statefulset:

cat  mysql-statefulset.yaml

kubectl apply -f mysql-statefulset.yaml -n kube-public

通過執行如下的指令可以檢視啟動過程:

在啟動後,應該能夠看到如下的資訊:

注:上面配置說明

volumeclaimtemplates:

 - metadata:

     name: data

     annotations:

       volume.beta.kubernetes.io/storage-class: "nfs"

   spec:

     accessmodes: [ "readwriteonce" ]

     resources:

       requests:

         storage: 10gi

上面這段表示動态申請pvc,存儲類是由nfs建立的,前提是建立nfs的存儲類,建立方法如下:

cat  class.yaml

kind: storageclass

apiversion: storage.k8s.io/v1

metadata:

 name: nfs

provisioner: example.com/nfs

kubectl apply -f class.yaml

動态pvc建立可參考:

kubernetes叢集中部署efk日志管理系統

mysql部署環境驗證

1)通過運作一個臨時的容器(使用mysql:5.7鏡像),使用mysql 用戶端發送測試請求給mysql master節點(主機名為mysql-0.mysql;跨命名空間的話,主機名請使用mysql-0.mysql.kube-public)

kubectl run mysql-client --image=mysql:5.7 -it --rm --restart=never -- mysql -h mysql-0.mysql.kube-public

在master節點上建立demo資料庫,并建立一個隻有message字段的demo.messages的表,并為message字段插入hello值。

Kubernetes中部署MySQL高可用叢集

2)使用主機名為mysql-read來發送測試請求給伺服器:

kubectl run mysql-client --image=mysql:5.7 -i -t --rm --restart=never -- mysql -h mysql-read.kube-public

Kubernetes中部署MySQL高可用叢集