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 以使用本地存储,并确保主从数据库之间的复制配置正确。

相关推荐
weixin_449310841 小时前
高效集成:聚水潭采购数据同步到MySQL
android·数据库·mysql
CodingBrother1 小时前
MySQL 和 PostgreSQL 的使用案例
mysql·adb·postgresql
洛卡卡了1 小时前
从单层到 MVC,再到 DDD:架构演进的思考与实践
架构·mvc
standxy2 小时前
如何将钉钉新收款单数据高效集成到MySQL
数据库·mysql·钉钉
乌恩大侠2 小时前
O-RAN Fronthual CU/Sync/Mgmt 平面和协议栈
5g·平面·fpga开发·架构
Narutolxy3 小时前
MySQL 权限困境:从权限丢失到权限重生的完整解决方案20241108
数据库·mysql
Venchill3 小时前
安装和卸载Mysql(压缩版)
数据库·mysql
Humbunklung3 小时前
一种EF(EntityFramework) MySQL修改表名去掉dbo前缀的方法
数据库·mysql·c#
C吴新科8 小时前
MySQL入门操作详解
mysql
木宛哥9 小时前
代码背后的智慧:20条编程感悟
java·后端·架构