千云物流- 在k8s上部署mysql主从集群

本文详细介绍了如何在Kubernetes(k8s)环境中搭建一个一主二从的MySQL集群,包括使用xtrabackup进行数据同步,创建命名空间、StorageClass、ConfigMap、Secret、Service和StatefulSet等步骤,并进行了故障模拟和问题处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

部署需求

在k8s上部署mysql主从集群可以提高数据的可用性和容错能力。下面是一个简单的步骤:
搭建一个一主2 从的 MySQL 集群;
从节点可以水平扩展;
保证数据库的读写分离.

环境准备

使用的部署环境

  • kubenates: v1.22.12
  • dockers:20.10.8

需要镜像

  • xtrabackup:8.0.34 可以自己制作 xtrabackup 镜像(可选,自己制作下边有步骤)
  • MySQL:8.0.18

MySQL集群搭建(一主二从)

使用xtrabackup来同步主数据库的数据,xtrabackup版本需要和数据库对应

从库复制工具

在这里插入图片描述

  • 当 innobackupex 命令开始备份的时候,首先会启动 xtrabackup 进程,xtrabackup 又分为两个线程,一个用于拷贝 ibd 文件,一个用于拷贝 redo 文件,redo 的拷贝线程只有一个,在 ibd 的拷贝线程启动前启动,在 ibd 的拷贝线程结束后结束。
  • xtrabackup 拷贝完成 idb 后,通知 innobackupex(通过创建文件),同时自己进入等待(redo 线程仍然继续拷贝)
  • innobackupex 收到 xtrabackup 通知后,执行 FLUSH TABLES WITH READ LOCK (FTWRL),取得一致性位置点,然后开始备份非 InnoDB 文件(包括 frm、MYD、MYI、CSV、opt、par 等)。拷贝非 InnoDB 文件过程中,因为数据库处于全局只读状态,非 InnoDB 表(主要 是MyISAM)如果比较多的话整库只读时间就会比较长。
  • 当 innobackupex 拷贝完所有非 InnoDB 表文件后,通知 xtrabackup(通过删文件) ,同时自己进入等待(等待另一个文件被创建);
  • xtrabackup 收到 innobackupex 备份完非 InnoDB 通知后,就停止 redo 拷贝线程,然后通知 innobackupex,redo log 拷贝完成(通过创建文件);
  • innobackupex 收到 redo 备份完成通知后,就开始解锁,执行 UNLOCK TABLES;
  • 最后 innobackupex 和 xtrabackup 进程各自完成收尾工作,如资源的释放、写备份元数据信息等,innobackupex 等待 xtrabackup 子进程结束后退出

在k8s上创建命名空间

kubectl create namespace mysql

创建 StorageClass 动态存储(动态生成pv)

  • 文件系统
    这里使用的NFS,这个在之前的文章提到过.
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-data-mysql-0
  namespace: mysql-db
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  storageClassName: nfs-persist
  nfs:
    path: /nfs/data/mysql-db-0
    server: 10.0.0.27
  claimRef:
    name:  nfs地址
    namespace: mysql-db
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-data-mysql-1
  namespace: mysql-db
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  storageClassName: nfs-persist
  nfs:
    path: /nfs/data/mysql-db-1
    server:  nfs地址
  claimRef:
    name: data-mysql-1
    namespace: mysql-db

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-data-mysql-2
  namespace: mysql-db
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  storageClassName: nfs-persist
  nfs:
    path: /nfs/data/mysql-db-2
    server: nfs地址
  claimRef:
    name: data-mysql-2
    namespace: mysql-db
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: data-mysql-1
  namespace: mysql-db
  annotations:
    kubesphere.io/alias-name: mysql
    kubesphere.io/creator: admin
    volume.beta
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青0721松

你的鼓励将是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值