Kubernetes 之 MySQL 持久儲存和故障轉移(十一)
阿新 • • 發佈:2018-12-14
一、規劃
我們接著之前的文件的架構規劃進行下面的操作。
IP | 角色 |
---|---|
192.168.1.200 | k8s-master |
192.168.1.201 | k8s-node01 |
192.168.1.202 | k8s-node02 |
192.168.1.203 | k8s-store |
我們演示如何為 MySQL 資料庫提供持久化儲存,主要分為下面幾個步驟:
- 建立 PV 和 PVC。
- 部署 MySQL。
- 向 MySQL 新增資料。
- 模擬節點宕機故障,Kubernetes 將 MySQL 自動遷移到其他節點。
- 驗證資料一致性。
二、部署
1、建立 PV 和 PVC
我們 PV 的配置檔案mysql-pv.yaml
如下:
apiVersion: v1 kind: PersistentVolume metadata: name: mysql-pv spec: capacity: storage: 1Gi accessModes: - ReadWriteOnce nfs: path: /data/volumes/mysql-pv server: 192.168.1.203
建立 PV。
[[email protected] ~]# kubectl apply -f mysql-pv.yaml persistentvolume/mysql-pv created [[email protected] ~]# kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE mysql-pv 1Gi RWO Retain Available 7s
PVC 的配置檔案mysql-pvc.yaml
內容如下:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
建立 PVC。
[[email protected] ~]# kubectl apply -f mysql-pvc.yaml
persistentvolumeclaim/mysql-pvc created
[[email protected] ~]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
mysql-pvc Bound mysql-pv 1Gi RWO 7s
2、部署 MySQL
MySQL 的配置檔案mysql.yaml
如下:
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
ports:
- port: 3306
selector:
app: mysql
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.6
env:
- name: MYSQL_ROOT_PASSWORD
value: password
ports:
- name: mysql
containerPort: 3306
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pvc
PVC mysql-pvc
Bound 的 PV mysql-pv
將被 mount 到 MySQL 的資料目錄 /var/lib/mysql
。
[[email protected] ~]# kubectl apply -f mysql.yaml
service/mysql created
deployment.extensions/mysql created
[[email protected] ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mysql-7686899cf9-d4m42 1/1 Running 0 62s 10.244.2.17 node02 <none> <none>
3、更新 MySQL 資料
MySQL 被部署到 k8s-node02
,下面通過客戶端訪問 Service mysql:
[[email protected] ~]# kubectl run -it --rm --image=mysql:5.6 --restart=Never mysql-client -- mysql -h mysql -ppassword
If you don't see a command prompt, try pressing enter.
mysql>
我們在mysql
庫中建立一個表myid
,然後在表裡新增幾條資料。
mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> create table myid( id int(4) );
Query OK, 0 rows affected (0.04 sec)
mysql> insert myid values( 111 );
Query OK, 1 row affected (0.00 sec)
mysql> select * from myid;
+------+
| id |
+------+
| 111 |
+------+
1 row in set (0.00 sec)
4、故障轉移
我們現在把 node02 機器關機,模擬節點宕機故障。
一段時間之後,Kubernetes 將 MySQL 遷移到 k8s-node01
。
[[email protected] ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mysql-7686899cf9-8z6tc 1/1 Running 0 21s 10.244.1.19 node01 <none> <none>
mysql-7686899cf9-d4m42 1/1 Terminating 0 23m 10.244.2.17 node02 <none> <none>
驗證資料的一致性。
[[email protected] ~]# kubectl run -it --rm --image=mysql:5.6 --restart=Never mysql-client -- mysql -h mysql -ppassword
If you don't see a command prompt, try pressing enter.
mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from myid;
+------+
| id |
+------+
| 111 |
+------+
1 row in set (0.00 sec)
MySQL 服務恢復,資料也完好無損,我們可以可以在儲存節點上面檢視一下生成的資料庫檔案。
[[email protected] mysql-pv]# ll
總用量 110604
-rw-rw---- 1 systemd-bus-proxy ssh_keys 56 12月 14 09:53 auto.cnf
-rw-rw---- 1 systemd-bus-proxy ssh_keys 12582912 12月 14 10:15 ibdata1
-rw-rw---- 1 systemd-bus-proxy ssh_keys 50331648 12月 14 10:15 ib_logfile0
-rw-rw---- 1 systemd-bus-proxy ssh_keys 50331648 12月 14 09:53 ib_logfile1
drwx------ 2 systemd-bus-proxy ssh_keys 4096 12月 14 10:05 mysql
drwx------ 2 systemd-bus-proxy ssh_keys 4096 12月 14 09:53 performance_schema