搭建k8s集群实现MySQL数据持久化
发表于:2025-02-12 作者:千家信息网编辑
千家信息网最后更新 2025年02月12日,本文主要给大家简单讲讲搭建k8s集群实现MySQL数据持久化,相关专业术语大家可以上网查查或者找一些相关书籍补充一下,这里就不涉猎了,我们就直奔主题吧,希望搭建k8s集群实现MySQL数据持久化这篇文
千家信息网最后更新 2025年02月12日搭建k8s集群实现MySQL数据持久化
本文主要给大家简单讲讲搭建k8s集群实现MySQL数据持久化,相关专业术语大家可以上网查查或者找一些相关书籍补充一下,这里就不涉猎了,我们就直奔主题吧,希望搭建k8s集群实现MySQL数据持久化这篇文章可以给大家带来一些实际帮助。
1、搭建nfs存储
为了方便操作,我直接在master上搭建nfs存储。
[root@master ~]# yum -y install nfs-utils[root@master ~]# systemctl enable rpcbind[root@master lv]# mkdir -p /nfsdata/mysql[root@master ~]# vim /etc/exports/nfsdata *(rw,sync,no_root_squash)[root@master ~]# systemctl start nfs-server[root@master ~]# systemctl enable nfs-server[root@master ~]# showmount -eExport list for master:/nfsdata *
2、创建PV
[root@master lv]# vim mysql-pv.yaml #编写pv的yaml文件kind: PersistentVolumeapiVersion: v1metadata: name: mysql-pvspec: accessModes: - ReadWriteOnce #访问模式定义为只能以读写的方式挂载到单个节点 capacity: storage: 1Gi persistentVolumeReclaimPolicy: Retain storageClassName: nfs nfs: path: /nfsdata/mysql server: 192.168.20.6[root@master lv]# kubectl apply -f mysql-pv.yaml #执行yaml文件
3、创建PVC
[root@master lv]# vim mysql-pvc.yaml #编写pvc的yaml文件kind: PersistentVolumeClaimapiVersion: v1metadata: name: mysql-pvcspec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: nfs #这里指定关联的PV名称[root@master lv]# kubectl apply -f mysql-pvc.yaml #执行yaml文件
4、确认pv及pvc的状态
至此,PV和PVC的状态类应该都是Bound。
[root@master lv]# kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGEmysql-pv 1Gi RWO Retain Bound default/mysql-pvc nfs 5m8s[root@master lv]# kubectl get pvcNAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGEmysql-pvc Bound mysql-pv 1Gi RWO nfs 60s
5、创建pod+svc(service)
这个pod是提供的MySQL服务,并将其映射到宿主机,可以做和client端通信。
这里我将pod和svc的yaml文件写在同一个文件中。
[root@master lv]# vim mysql-pod.yaml #编写pod的yaml文件apiVersion: extensions/v1beta1kind: Deploymentmetadata: name: mysqlspec: selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:5.7 env: #以下是设置MySQL数据库的密码 - name: MYSQL_ROOT_PASSWORD value: 123.com ports: - containerPort: 3306 volumeMounts: - name: mysql-persistent-storage mountPath: /var/lib/mysql #MySQL容器的数据都是存在这个目录的,要对这个目录做数据持久化 volumes: - name: mysql-persistent-storage persistentVolumeClaim: claimName: mysql-pvc #指定pvc的名称--- #以下是创建svc的yaml文件apiVersion: v1kind: Servicemetadata: name: mysqlspec: type: NodePort ports: - port: 3306 targetPort: 3306 nodePort: 31111 selector: app: mysql selector: app: mysql[root@master lv]# kubectl apply -f mysql-pod.yaml #执行yaml文件[root@master lv]# kubectl get pod #确定pod运行正常NAME READY STATUS RESTARTS AGEmysql-6d898f8bcb-lhqxb 1/1 Running 0 51s
6、进入MySQL数据库,添加测试数据
[root@master lv]# kubectl exec -it mysql-6d898f8bcb-lhqxb -- mysql -uroot -p123.commysql> create database test;mysql> use test;mysql> create table my_id(id int(4));mysql> insert my_id values(9527);mysql> select * from my_id; #确认有数据存在
7、手动删除节点上的容器,验证数据库内的数据是否还存在
[root@master lv]# kubectl get pod -o wide #查看pod运行在哪个节点NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE mysql-6d898f8bcb-cz8gr 1/1 Running 0 10m 10.244.1.3 node01 #我这是运行在node01节点,现在去node01节点手动将其容器删除[root@node01 ~]# docker ps #查看MySQL容器的ID[root@node01 ~]# docker rm -f 1a524e001732 #将MySQL的容器删除#由于Deployment的保护策略,当删除容器后,它会根据pod的yaml文件生成一个新的容器,但新容器的ID号就变了#回到master节点,登录到数据库,查看数据是否还存在[root@master lv]# kubectl exec -it mysql-6d898f8bcb-cz8gr -- mysql -uroot -p123.commysql> select * from test.my_id; #数据还在,OK+------+| id |+------+| 1996 |+------+1 row in set (0.01 sec)
至此,即可证明,当使用PV来做数据持久化的话,容器的新陈代谢并不会造成丢失数据的。
8、模拟MySQL容器所在的节点宕机,验证数据是否会丢失
[root@master lv]# kubectl get pod -o wide #查看容器所在节点,我这里还是在node01#然后我这里将node01关机,然后动态查看pod的状态[root@master lv]# kubectl get pod -o wide -w #动态查看pod的状态#大概node01关机五分钟左右,可以看到pod就被转移到node02上运行了。NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESmysql-6d898f8bcb-cz8gr 1/1 Running 0 20m 10.244.1.3 node01mysql-6d898f8bcb-cz8gr 1/1 Running 0 20m 10.244.1.3 node01 mysql-6d898f8bcb-cz8gr 1/1 Terminating 0 25m 10.244.1.3 node01 mysql-6d898f8bcb-gp4t5 0/1 Pending 0 0s mysql-6d898f8bcb-gp4t5 0/1 Pending 0 0s node02 mysql-6d898f8bcb-gp4t5 0/1 ContainerCreating 0 0s node02 mysql-6d898f8bcb-gp4t5 1/1 Running 0 1s 10.244.2.4 node02
9、client端访问MySQL数据库
因为我们在创建pod的yaml文件中,将其svc的端口映射类型是nodeport,所以,我们是可以通过访问群集内的任意主机的31111端口(yaml文件中自定义的端口)来登录到数据库的。如下:
[root@master lv]# mysql -uroot -p123.com -h 192.168.20.8 -P 31111MySQL [(none)]> select * from test.my_id; #查看数据+------+| id |+------+| 1996 |+------+1 row in set (0.01 sec)
搭建k8s集群实现MySQL数据持久化就先给大家讲到这里,对于其它相关问题大家想要了解的可以持续关注我们的行业资讯。我们的板块内容每天都会捕捉一些行业新闻及专业知识分享给大家的。
数据
文件
容器
节点
数据库
状态
运行
集群
端口
专业
动态
名称
所在
手动
目录
至此
行业
存储
登录
验证
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
联想rd 540服务器
数据库default默认值为空
企业如何做好服务器
林业一张图数据库在哪个部门
网闸连接不到数据库
湖南省医疗机构网络安全等级保护
网络安全保险数据
服务器搭建要不要维护
享云网络技术有限公司
数据库中的stuff
旭升网络技术服务有限公司
如何保障web服务器的安全
互联网科技收藏
江苏管理软件开发职能
数据库查出数据实现分页
东航导航数据库下载
吉安企业服务器需要多少钱
江西无线网络技术服务
软件开发公司产品管理
重庆万盛区软件开发企业
企业如何做好服务器
微信公众号一道数据库
软件开发之路怎么成为程序员
网络安全法的41条
河南债无忧互联网科技待遇
张家界智能软件开发服务
查看服务器磁盘占用情况
福建综合软件开发定制费用是多少
数据库为什么不能使用外键
虚空之遗版本星际数据库