Kubernetes 之 MySQL 持久存储和故障转移(十一)
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,一、规划我们接着之前的文档的架构规划进行下面的操作。IP角色192.168.1.200k8s-master192.168.1.201k8s-node01192.168.1.202k8s-node021
千家信息网最后更新 2025年12月03日Kubernetes 之 MySQL 持久存储和故障转移(十一)
一、规划
我们接着之前的文档的架构规划进行下面的操作。
| 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: 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 7sPVC 的配置文件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 7s2、部署 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-pvcPVC 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
数据
文件
节点
故障
配置
存储
一致
一致性
数据库
规划
验证
完好
内容
完好无损
客户
客户端
文档
时间
机器
架构
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
我的世界pvp能进的服务器
软件开发 概要设计模板
rtx 代理服务器
长沙帝国网络技术
秀山网络安全审计系统咨询
公务员网络安全算啥子岗位
软件开发年收入3亿
云服务器 分区
为什么读取不了服务器
ibm3850x5服务器逻辑盘
计算机网络技术的收入状况
工业组态与网络技术心得
江西服务器防火墙分类
关系型数据库有哪些数据类型
天津常规软件开发资格
网络安全管理 刘运席
提高网络安全治理能力
财经院校的事实型数据库有哪些
苹果云盘连接服务器怎么取消
一幅四年级网络安全手抄报
嵌入式数据库消除了与客户
局开展网络安全宣传
oracle是内存数据库吗
中图 网络技术应用教案
嵌入式软件开发区小吃街郑州
计算机四级网络技术证书
江苏工业软件开发服务
什么什么是数据库实例
网络安全 课程设计
阿里云本地数据库数据同步