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

ops/2024/9/23 7:32:48/

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

步骤 1: 创建 PV 和 PVC

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

apiVersion: v1
kind: PersistentVolume
metadata:name: local-pv
spec:capacity:storage: 10GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: local-storagehostPath:path: /mnt/data/mysqltype: DirectoryOrCreate

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

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 的文件,内容如下:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: mysql-pvcnamespace: mysql
spec:accessModes:- ReadWriteOnceresources:requests:storage: 10GistorageClassName: local-storage

步骤 2: 应用配置

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

kubectl apply -f local-pv.yaml

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

kubectl apply -f local-storageclass.yaml

Create the Namespace:

kubectl create namespace mysql

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

kubectl apply -f mysql-pvc.yaml

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

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

apiVersion: apps/v1
kind: Deployment
metadata:name: mysql-deploymentnamespace: mysql
spec:replicas: 2selector:matchLabels:app: mysqltemplate:metadata:labels:app: mysqlspec:containers:- name: mysqlimage: mysql:5.7ports:- containerPort: 3306env:- name: MYSQL_ROOT_PASSWORDvalue: MMmm@23$$3##HHhjj$35!HJKGFgjhsswbGFHJ4dfrfrFGHHHGvolumeMounts:- mountPath: /var/lib/mysqlname: mysql-persistent-storagevolumes:- name: mysql-persistent-storagepersistentVolumeClaim:claimName: mysql-pvc

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

apiVersion: v1
kind: Service
metadata:name: mysql-servicenamespace: mysql
spec:ports:- port: 3306targetPort: 3306selector:app: mysqlclusterIP: None

步骤 4: 应用 Deployment 和 Service

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

kubectl apply -f mysql-deployment.yaml

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

kubectl apply -f mysql-service.yaml

步骤 5: 配置主从复制

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

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 -pMMmm@23$$3##HHhjj$35!HJKGFgjhsswbGFHJ4dfrfrFGHHHG

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

STOP SLAVE;
RESET MASTER;
SHOW MASTER STATUS;

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

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

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

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 -pMMmm@23$$3##HHhjj$35!HJKGFgjhsswbGFHJ4dfrfrFGHHHG

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

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、验证从数据库状态: 检查从数据库的状态,确保复制正常工作。

SHOW SLAVE STATUS \G

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


http://www.ppmy.cn/ops/98814.html

相关文章

Nacos微服务注册管理中心与服务通信

参照springboot-alibaba-ribbon项目学习 E:\Codes\Idea_java_works\apesource\springboot\微服务\springboot_alibaba_ribbon Nacos 微服务注册中心-discover Nacos 是⼀个更易于构建云原⽣应⽤的动态服务发现、配置管理和服务管理平台。简单来说 Nacos 就是 注册中⼼ 配置…

【代码随想录算法训练营第42期 第三十天 | LeetCode452. 用最少数量的箭引爆气球、435. 无重叠区间、763.划分字母区间】

代码随想录算法训练营第42期 第三十天 | LeetCode452. 用最少数量的箭引爆气球、435. 无重叠区间、763.划分字母区间 一、452. 用最少数量的箭引爆气球 解题代码C&#xff1a; class Solution { private:static bool cmp(const vector<int>& a, const vector<in…

Windows 上设置 MySQL 的主从复制

Windows 上设置 MySQL 的主从复制 一、前言1. 环境准备2. 主服务器配置3. 从服务器配置6. 测试复制7. 注意事项 一、前言 MySQL 主从复制可以在程序中通过以下方式应用&#xff1a; 读写分离&#xff1a;将写操作&#xff08;如插入、更新、删除&#xff09;发送到主服务器&am…

re正则模块

re模块用于处理正则表达式&#xff0c;它的基本功能包括&#xff1a;匹配、查找、替换。 匹配 匹配的使用方法一般有三个参数&#xff1a;第一个参数&#xff1a;正则模式、第二个参数&#xff1a;需要处理的字符、 第三个参数&#xff1a;附加处理方法 下面列举的是一写匹…

Notion使用详解

文章目录 Notion使用详解一、引言二、Notion的核心特性1、模块化设计——Block Editor2、强大的数据库功能——Database3、丰富的模板和导入功能 三、Notion的高级使用技巧1、页面和子页面的创建与管理2、内容的动态交互和展示3、跨平台同步与分享 四、总结 Notion使用详解 一…

iOS 开发:Object-C 和 Swift 的区别 (AI问答)

一&#xff1a;语言类型的区别&#xff08;最主要区别&#xff09; object-c 是动态类型语言&#xff1b; swift是静态类型语言&#xff1b; 看一下AI的回答&#xff0c;很全面~~ Objective-C 和 Swift 的语言类型区别主要体现在以下几个方面&#xff1a; 1. 静态类型 vs. 动…

ASIACRYPT 2020

分类文章编号最佳论文1-3加密方案4-9后量子密码10-12消息鉴权编码13-15密码分析16-22对称密钥密码23-25侧信道分析26-29公钥密码30-37格密码38-42量子算法43-46多方计算47-58同形映射密码59-64鉴权密钥交换65-68区块链和消息轨迹69-70可更新加密71-74零知识75-80属性加密81-85B…

【Java 数据结构】排序

排序 排序排序是什么排序相关概念稳定性比较排序非比较排序内部排序外部排序 常见比较排序冒泡排序基本思想代码实现 选择排序基本思想代码实现 插入排序基本思想代码实现 希尔排序基本思想代码实现 堆排序基本思想代码实现 快速排序基本思想代码实现优化其他实现寻找基准非递归…