博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Kubernetes 之 MySQL 持久存储和故障转移(十一)
阅读量:5241 次
发布时间:2019-06-14

本文共 4563 字,大约阅读时间需要 15 分钟。

目录

一、规划

我们接着之前的文档的架构规划进行下面的操作。

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 数据库提供持久化存储,主要分为下面几个步骤:

  1. 创建 PV 和 PVC。
  2. 部署 MySQL。
  3. 向 MySQL 添加数据。
  4. 模拟节点宕机故障,Kubernetes 将 MySQL 自动迁移到其他节点。
  5. 验证数据一致性。

二、部署

1、创建 PV 和 PVC

我们 PV 的配置文件mysql-pv.yaml如下:

apiVersion: v1kind: PersistentVolumemetadata:  name: mysql-pvspec:  capacity:    storage: 1Gi  accessModes:  - ReadWriteOnce  nfs:    path: /data/volumes/mysql-pv    server: 192.168.1.203

创建 PV。

[root@master ~]# kubectl apply -f mysql-pv.yaml persistentvolume/mysql-pv created[root@master ~]# kubectl get pvNAME       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGEmysql-pv   1Gi        RWO            Retain           Available                                   7s

PVC 的配置文件mysql-pvc.yaml内容如下:

apiVersion: v1kind: PersistentVolumeClaimmetadata:  name: mysql-pvcspec:  accessModes:  - ReadWriteOnce  resources:    requests:      storage: 1Gi

创建 PVC。

[root@master ~]# kubectl apply -f mysql-pvc.yaml persistentvolumeclaim/mysql-pvc created[root@master ~]# kubectl get pvcNAME        STATUS   VOLUME     CAPACITY   ACCESS MODES   STORAGECLASS   AGEmysql-pvc   Bound    mysql-pv   1Gi        RWO                           7s

2、部署 MySQL

MySQL 的配置文件mysql.yaml如下:

apiVersion: v1kind: Servicemetadata:  name: mysqlspec:  ports:  - port: 3306  selector:    app: mysql---apiVersion: extensions/v1beta1kind: Deploymentmetadata:  name: mysqlspec:  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

[root@master ~]# kubectl apply -f mysql.yaml service/mysql createddeployment.extensions/mysql created[root@master ~]# kubectl get pod -o wideNAME                     READY   STATUS    RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATESmysql-7686899cf9-d4m42   1/1     Running   0          62s   10.244.2.17   node02   

3、更新 MySQL 数据

MySQL 被部署到 k8s-node02,下面通过客户端访问 Service mysql:

[root@master ~]# kubectl run -it --rm --image=mysql:5.6 --restart=Never mysql-client -- mysql -h mysql -ppasswordIf you don't see a command prompt, try pressing enter.mysql>

我们在mysql库中创建一个表myid,然后在表里新增几条数据。

mysql> use mysqlReading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysql> 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

[root@master ~]# kubectl get pod -o wideNAME                     READY   STATUS        RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATESmysql-7686899cf9-8z6tc   1/1     Running       0          21s   10.244.1.19   node01   
mysql-7686899cf9-d4m42 1/1 Terminating 0 23m 10.244.2.17 node02

验证数据的一致性。

[root@master ~]# kubectl run -it --rm --image=mysql:5.6 --restart=Never mysql-client -- mysql -h mysql -ppasswordIf you don't see a command prompt, try pressing enter.mysql> use mysqlReading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysql> select * from myid;+------+| id   |+------+|  111 |+------+1 row in set (0.00 sec)

MySQL 服务恢复,数据也完好无损,我们可以可以在存储节点上面查看一下生成的数据库文件。

[root@datanode03 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_logfile1drwx------ 2 systemd-bus-proxy ssh_keys     4096 12月 14 10:05 mysqldrwx------ 2 systemd-bus-proxy ssh_keys     4096 12月 14 09:53 performance_schema

转载于:https://www.cnblogs.com/wzlinux/p/10159328.html

你可能感兴趣的文章
android一些细节问题
查看>>
KDESVN中commit时出现containing working copy admin area is missing错误提示
查看>>
利用AOP写2PC框架(二)
查看>>
【动态规划】skiing
查看>>
java定时器的使用(Timer)
查看>>
Android实现静默安装与卸载
查看>>
ef codefirst VS里修改数据表结构后更新到数据库
查看>>
boost 同步定时器
查看>>
[ROS] Chinese MOOC || Chapter-4.4 Action
查看>>
简单的数据库操作
查看>>
解决php -v查看到版本与phpinfo()版本不一致问题
查看>>
iOS-解决iOS8及以上设置applicationIconBadgeNumber报错的问题
查看>>
亡灵序曲-The Dawn
查看>>
Redmine
查看>>
帧的最小长度 CSMA/CD
查看>>
xib文件加载后设置frame无效问题
查看>>
编程算法 - 左旋转字符串 代码(C)
查看>>
IOS解析XML
查看>>
Python3多线程爬取meizitu的图片
查看>>
树状数组及其他特别简单的扩展
查看>>