Kubernetes 之 MySQL 持久存储和故障转移(十一)
发表于:2025-02-08 作者:千家信息网编辑
千家信息网最后更新 2025年02月08日,一、规划我们接着之前的文档的架构规划进行下面的操作。IP角色192.168.1.200k8s-master192.168.1.201k8s-node01192.168.1.202k8s-node021
千家信息网最后更新 2025年02月08日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 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
数据
文件
节点
故障
配置
存储
一致
一致性
数据库
规划
验证
完好
内容
完好无损
客户
客户端
文档
时间
机器
架构
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
前端一定要学数据库吗
派出所国家网络安全日
失落的方舟选哪国的服务器好
usg配置服务器映射
国三数据库大题技巧
数据库后台管理员列表
数据库设计的内容包括ER吗
什么叫平台服务器
洛阳迅优网络技术服务怎么样
龙港网络技术
虚拟机搭建游戏服务器设置教程
软件开发如何控制成本
无锡棋牌游戏软件开发
海淀网络安全产业
应聘网络安全产品销售
数据库技术教程实验报告
库房管理用数据库
关于电影的数据库
云数据库怎么对接网站
一台dns服务器多少钱
街道网络安全三级联系人制度
数据库后台管理员列表
河南互联网软件开发哪家好
plc硬件软件开发
平安科技与互联网金融
黎曼猜想网络安全
web堡垒机运维数据库
x86服务器批发市场
网络安全连线
校园网络安全检查自查表