1、搭建nfs存储

[root@docker-k8s01 ~]# yum -y install nfs-utils

[root@docker-k8s01 ~]# mkdir /nfsdata/mysql -p

[root@docker-k8s01 ~]# cat /etc/exports

/nfsdata *(rw,sync,no_root_squash)

[root@docker-k8s01 ~]# systemctl restart nfs-server

[root@docker-k8s01 ~]# systemctl enable rpcbind

[root@docker-k8s01 ~]# systemctl enable nfs-server

[root@docker-k8s01 ~]# showmount -e

Export list for docker-k8s01:

/nfsdata *

2、创建PV

//编写pv的yaml文件

kind: PersistenVolume

apiVersion: v1

metadata:

name: mysql-pv

spec:

accessModes:

- ReadWriteOnce

capacity:

storage: 1Gi

persistentVolumeReclaimPolicy: Retain

storageClassName: nfs

nfs:

path: /nfsdata/mysql

server: 192.168.171.151

//执行yaml文件

[root@docker-k8s01 mysql]# kubectl apply -f mysql-pv.yaml

3、创建PVC

//编写PVC的yaml文件

kind: PersistentVolumeClaim

apiVersion: v1

metadata:

name: mysql-pvc

spec:

accessModes:

- ReadWriteOnce //访问模式定义为只能以读写的方式挂载到单个节点

resources:

requests:

storage: 1Gi

storageClassName: nfs //这里指定关联的PV名称

[root@docker-k8s01 mysql]# kubectl apply -f mysql-pvc.yaml

4、确认pv及pvc的状态

//可以看到pv及pvc的状态都是Bound

[root@docker-k8s01 mysql]# kubectl get pv

NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE

mysql-pv 1Gi RWO Retain Bound default/mysql-pvc nfs 6m21s

[root@docker-k8s01 mysql]# kubectl get pvc

NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE

mysql-pvc Bound mysql-pv 1Gi RWO nfs 2m4s

5、创建pod+svc(service)

这个pod是提供的MySQL服务,并将其映射到宿主机,可以做和client端通信

//编写deployment及service的yaml文件

---

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.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名称

---

apiVersion: v1

kind: Service

metadata:

name: mysql

spec:

type: NodePort

ports:

- port: 3306

targetPort: 31111

selector:

app: mysql

[root@docker-k8s01 mysql]# kubectl apply -f mysql-pod.yaml

//确定pod运行正常

[root@docker-k8s01 mysql]# kubectl get pod -w

NAME READY STATUS RESTARTS AGE

mysql-6d898f8bcb-fc7bb 1/1 Running 0 60s

6、进入MySQL数据库,添加测试数据

mysql> create database test;

mysql> use test

mysql> create table my_id(id int(11));

mysql> insert my_id values(1234);

mysql> select * from test.my_id; //确定数据添加成功

+------+

| id |

+------+

| 1234 |

+------+

7、手动删除节点上的容器,验证数据库内的数据是否还存在

//查看Pod运行在哪个节点

[root@docker-k8s01 mysql]# kubectl get pod -o wide

NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES

mysql-6d898f8bcb-fc7bb 1/1 Running 0 7m6s 10.244.1.2 docker-k8s02

[root@docker-k8s02 ~]# docker ps // 查看mysql容器的id

//删除mysql容器

[root@docker-k8s02 ~]# docker rm -f 7ba3f9d9ad35

//由于Deployment的保护策略,当删除容器后,它会根据pod的yaml文件生成一个新的容器,但新容器的ID号就变了

//回到master节点,登录到数据库,查看数据是否还存在

[root@docker-k8s01 mysql]# kubectl exec -it mysql-6d898f8bcb-fc7bb -- mysql -uroot -p123.com

mysql> select * from test.my_id;

+------+

| id |

+------+

| 1234 |

+------+

1 row in set (0.01 sec)

证明:当使用PV来做数据持久化的话,容器的新陈代谢并不会造成丢失数据的。

8、模拟MySQL容器所在的节点宕机,验证数据是否会丢失

//查看容器所在节点

[root@docker-k8s01 mysql]# kubectl get pod -o wide

NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES

mysql-6d898f8bcb-fc7bb 1/1 Running 0 13m 10.244.1.2 docker-k8s02

//将docker-k8s02节点宕机,动态查看Pod的状态

//大概node01关机五分钟左右,可以看到pod就被转移到node02上运行了

[root@docker-k8s01 ~]# kubectl get pod -w

NAME READY STATUS RESTARTS AGE

mysql-6d898f8bcb-fc7bb 1/1 Running 0 22m

mysql-6d898f8bcb-fc7bb 1/1 Running 0 22m

mysql-6d898f8bcb-fc7bb 1/1 Terminating 0 27m

mysql-6d898f8bcb-2h47v 0/1 Pending 0 0s

mysql-6d898f8bcb-2h47v 0/1 Pending 0 0s

mysql-6d898f8bcb-2h47v 0/1 ContainerCreating 0 0s

mysql-6d898f8bcb-2h47v 1/1 Running 0 33s

9、client端访问MySQL数据库

因为我们在创建pod的yaml文件中,将其svc的端口映射类型是nodeport,所以,我们是可以通过访问群集内的任意主机的31111端口(yaml文件中自定义的端口)来登录到数据库的。

[root@docker-k8s01 ~]# mysql -uroot -p123.com -h 192.168.171.151 -P 31111

MySQL [(none)]> select * from test.my_id; #查看数据

+------+

| id |

+------+

| 1234 |

+------+

1 row in set (0.01 sec)

k8s mysql数据同步_K8s——MySQL实现数据持久化相关推荐

  1. Table阿里云mysql_数据同步-从MySQL到Tablestore-阿里云开发者社区

    数据同步-从MySQL到Tablestore DataX是阿里集团广泛使用的离线数据导出工具, 本文将详细介绍如何从MySQL导出全量数据到Tablestore(OTS)中. 一.导出步骤 DataX ...

  2. oracle 上搭建ogg文档,ogg搭建配置实现oracle数据同步到mysql)

    在线QQ客服:1922638 专业的SQL Server.MySQL数据库同步软件 参考博客文章:https://www.jianshu.com/p/53882229b70e ? 1)根据不同的数据库 ...

  3. Oracle数据库数据同步到mysql数据库(Oracle数据库备份dmp如何同步到mysql)

    Oracle数据库dmp转mysql格式 一.背景 一项目客户是oracle数据库,需要导一个表数据到自研系统mysql数据库,甲方已给出oracle格式dmp文件! 处理思路: ①.安装Oracle ...

  4. Kafka-connect将Kafka数据同步到Mysql

    一.背景信息 Kafka Connect主要用于将数据流输入和输出消息队列Kafka版.Kafka Connect主要通过各种Source Connector的实现,将数据从第三方系统输入到Kafka ...

  5. 数据同步:MySQL到Elasticsearch

    目录 背景 1.基于应用程序多写 2.基于binlog订阅 2.1:canal 简介 工作原理 2.2.Databus 2.3.Maxwell 2.4.Flink CDC 2.5.DTS(阿里云) 2 ...

  6. MySQL主从同步配置及存量数据同步方案

    实践准备: 准备两台服务器: 主:192.168.8.10 备:192.168.8.11 MySQL的版本最好保持一致. 步骤一: 授权给从服务器 创建一个专门的同步账号: GRANT REPLICA ...

  7. excel mysql数据同步_将 Excel 数据导入 MySql

    能承受上万数据量,速度快,并且使用了事务,不会出现某条数据错误而导致部分数据插入(要是全部成功要是一条都不成功,测试过程中没出现失败),需要的朋友可以参考下 1.NPOI 2.MySql.Data 这 ...

  8. excel怎么启用宏_#数据同步#Excel + mysql 制作自动化报表

    问题描述:Excel数据更新繁琐 虽然市面上各类报表工具,可视化工具种类繁多,比如Tableau,Power BI,FineBI 等等,但是Excel 依旧是日常数据工作中的主力,我们依旧使用Exce ...

  9. mysql+主从同步+用户,MySQL主从同步

    所采用的mysql数据库是rpm包方式安装 1. Master:修改/etc/my.cnf文件[mysqld] [mysqld] server-id = 1 log-bin innodb_flush_ ...

最新文章

  1. redis3.2.1php扩展,php7.2.1+redis3.2.1 安装redis扩展(windows系统)
  2. JavaScript函数大全
  3. keil调用bat文件,实现删除、复制、加密文件功能
  4. mxnet 显存配置,cpu过高配置
  5. Call to undefined function Workerman\posix_getpid
  6. nodejs 服务器怎么导入qs_nodejs基本原理总结
  7. Scala学习笔记-环境搭建以及简单语法
  8. java aop注解拦截_Spring AOP 拦截指定注解标识的类或方法
  9. 家用计算机机箱怎么选,DIY装机怎么选择电脑机箱 新手必读的电脑主机箱选购指南...
  10. Android WebView Error – Uncaught TypeError: Cannot call method ‘getItem’ of null at
  11. java读取word文档内容_合并多个Word文档内容,还在复制粘贴就out了,同事五秒轻松搞定...
  12. 【Algorithm】冒泡排序
  13. C++ :stringstream介绍,使用方法与例子(转)
  14. 移动**21*设置无法接通_手机通话质量不好?你可能只差一步设置!
  15. 内文广告程序开发中遇到的一个问题
  16. nodejs后台系列--第二篇--使用Navicat来创建数据库
  17. class 反编译工具 jadclipse
  18. java batik_Java端使用Batik将SVG转为PNG
  19. 计算机网络的创新创业计划书,互联网创新创业计划书.doc
  20. 十大品牌去除甲醛净化器 哪个品牌好

热门文章

  1. [推荐]大量 Blazor 学习资源(一)
  2. 以个人身份加入.NET基金会
  3. 搭建独立博客,这款评论插件不能错过
  4. .NetCore 3.1 安装本地化中文智能提示
  5. NPOI 导出 excel 性能测试
  6. 程序员修神之路--高并发下如何缩短响应时间
  7. 只需3步,即可将你的Chromium Edge 浏览器设置成中文
  8. 东莞.NET俱乐部线下技术沙龙-活动报名
  9. 你准备好了在云中工作吗?
  10. 使用PerfView监测.NET程序性能(三):分组