K8S 基于本地存储的一主一从 MySQL 架构

为了实现一个简单的基于本地存储的一主一从 MySQL 架构,我们可以按照以下步骤来配置 Persistent Volume (PV)、Persistent Volume Claim (PVC) 以及 MySQL 的一主一从部署。

步骤 1: 创建 PV 和 PVC

1、创建 PV YAML 文件: 创建一个名为 local-pv.yaml 的文件,内容如下:

bash 复制代码
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: local-storage
  hostPath:
    path: /mnt/data/mysql
    type: DirectoryOrCreate

2、创建 StorageClass YAML 文件: 创建一个名为 local-storageclass.yaml 的文件,内容如下:

bash 复制代码
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Retain
allowVolumeExpansion: true

注意,我们在这里将 reclaimPolicy 设置为 Retain 以避免与 PV 中的 persistentVolumeReclaimPolicy 冲突。

3、创建 PVC YAML 文件: 创建一个名为 mysql-pvc.yaml 的文件,内容如下:

bash 复制代码
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc
  namespace: mysql
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: local-storage

步骤 2: 应用配置

1、应用 PV: 使用 kubectl 应用 PV 配置。

bash 复制代码
kubectl apply -f local-pv.yaml

2、应用 StorageClass: 使用 kubectl 应用 StorageClass 配置。

bash 复制代码
kubectl apply -f local-storageclass.yaml

Create the Namespace:

bash 复制代码
kubectl create namespace mysql

3、应用 PVC: 使用 kubectl 应用 PVC 配置。

bash 复制代码
kubectl apply -f mysql-pvc.yaml

步骤 3: 部署 MySQL 一主一从架构

1、创建 Deployment YAML 文件: 创建一个名为 mysql-deployment.yaml 的文件,内容如下:

bash 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-deployment
  namespace: mysql
spec:
  replicas: 2
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: mysql:5.7
        ports:
        - containerPort: 3306
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: MMmm@23$$3##HHhjj$35!HJKGFgjhsswbGFHJ4dfrfrFGHHHG
        volumeMounts:
        - mountPath: /var/lib/mysql
          name: mysql-persistent-storage
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pvc

2、创建 Service YAML 文件: 创建一个名为 mysql-service.yaml 的文件,内容如下:

bash 复制代码
apiVersion: v1
kind: Service
metadata:
  name: mysql-service
  namespace: mysql
spec:
  ports:
  - port: 3306
    targetPort: 3306
  selector:
    app: mysql
  clusterIP: None

步骤 4: 应用 Deployment 和 Service

1、应用 Deployment: 使用 kubectl 应用 Deployment 配置。

bash 复制代码
kubectl apply -f mysql-deployment.yaml

2、应用 Service: 使用 kubectl 应用 Service 配置。

bash 复制代码
kubectl apply -f mysql-service.yaml

步骤 5: 配置主从复制

1、登录到主数据库容器: 使用 kubectl 登录到主数据库容器。

bash 复制代码
kubectl exec -it $(kubectl get pods -n mysql -l app=mysql -o jsonpath='{.items[0].metadata.name}') -- mysql -u root -p    

kubectl exec -it mysql-deployment-57f94cdc84-nbkwg -n mysql -- mysql -u root -p

MMmm@23$$3##HHhjj$35!HJKGFgjhsswbGFHJ4dfrfrFGHHHG

2、配置主数据库: 在 MySQL 命令行中执行以下命令:

bash 复制代码
STOP SLAVE;
RESET MASTER;
SHOW MASTER STATUS;

记录输出中的 File 和 Position,稍后用于配置从数据库。

3、退出 MySQL 命令行: 输入 \q 退出 MySQL 命令行。

4、登录到从数据库容器: 使用 kubectl 登录到从数据库容器

bash 复制代码
kubectl exec -it $(kubectl get pods -n mysql -l app=mysql -o jsonpath='{.items[1].metadata.name}') -- mysql -u root -p
kubectl exec -it mysql-deployment-57f94cdc84-wwf8v -n mysql -- mysql -u root -p

MMmm@23$$3##HHhjj$35!HJKGFgjhsswbGFHJ4dfrfrFGHHHG

5、配置从数据库: 在 MySQL 命令行中执行以下命令:

bash 复制代码
STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='mysql-service', MASTER_USER='root', MASTER_PASSWORD='MMmm@23$$3##HHhjj$35!HJKGFgjhsswbGFHJ4dfrfrFGHHHG', MASTER_LOG_FILE='binlog.000001', MASTER_LOG_POS=4;
START SLAVE;
SHOW SLAVE STATUS \G

这里假设主数据库的 File 为 binlog.000001,Position 为 4。您需要根据实际情况替换这些值。

6、验证从数据库状态: 检查从数据库的状态,确保复制正常工作。

bash 复制代码
SHOW SLAVE STATUS \G

通过上述步骤,您应该能够成功配置基于本地存储的一主一从 MySQL 架构。这里的关键是正确配置 PV 和 PVC 以使用本地存储,并确保主从数据库之间的复制配置正确。

相关推荐
延凡科技3 分钟前
延凡科技电力数字化平台技术解析:从电力交易到虚拟电厂的全链路架构实践
人工智能·科技·物联网·架构·虚拟电厂·电力平台
BerrySen1781 小时前
迈向 Next-Gen Java:企业级高并发架构演进与大模型 Agent 落地深度实战
java·开发语言·架构
丁小未2 小时前
Unity车机地图Tile流式渲染系统高性能架构方案
unity·架构·ecs·dots·车机系统·车机系统架构图
混凝土拌意大利面3 小时前
全球新型均衡经济治理体系:先进架构、发展历程预测、核心阻碍全解析
架构
&Hello Code4 小时前
2.一套可落地的 STM32 六层架构:基础工程框架搭建
stm32·嵌入式硬件·架构
红尘伴蝶舞4 小时前
H5游戏多进程隔离:如何解决Android内存激增与进程冻结问题
架构·app·android studio
BigGayGod4 小时前
IR + VM:让 LLM 生成的控制逻辑安全运行在超低端 MCU 上
架构
风曦Kisaki4 小时前
Kubernetes(K8s)笔记Day03: Pod命名空间,标签,Pod 的调度,污点与容忍度,Pod 常见状态和重启策略,Pod 生命周期
linux·运维·笔记·docker·云原生·容器·kubernetes
张忠琳4 小时前
【NVIDIA】NVIDIA k8s-device-plugin v0.19.3 资源管理器模块深度分析之三
云原生·容器·架构·kubernetes·nvidia
小小工匠4 小时前
Skill - 把无限画布装进 Codex:Cowart 的架构拆解与实践指南
架构·cowart