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

相关推荐
知识分享小能手2 分钟前
mysql学习教程,从入门到精通,SQL DISTINCT 子句 (16)
大数据·开发语言·sql·学习·mysql·数据分析·数据库开发
lamb张3 分钟前
MySQL锁
数据库·mysql
骅青13 分钟前
kubernetes调度2
容器·kubernetes
沛沛老爹38 分钟前
服务监控插件全览:提升微服务可观测性的利器
微服务·云原生·架构·datadog·influx·graphite
躺平的花卷2 小时前
Python爬虫案例六:抓取某个地区某月份天气数据并保存到mysql数据库中
数据库·爬虫·python·mysql
huaqianzkh2 小时前
了解华为云容器引擎(Cloud Container Engine)
云原生·架构·华为云
Alone80462 小时前
K8s中HPA自动扩缩容及hml
云原生·容器·kubernetes
Kika写代码2 小时前
【基于轻量型架构的WEB开发】【章节作业】
前端·oracle·架构
刘某某.2 小时前
使用OpenFeign在不同微服务之间传递用户信息时失败
java·微服务·架构
迪捷软件2 小时前
知识|智能网联汽车多域电子电气架构会如何发展?
架构·汽车