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值。

2)使用主機名為mysql-read來發送測試請求給伺服器:
kubectl run mysql-client --image=mysql:5.7 -i -t --rm --restart=never -- mysql -h mysql-read.kube-public