基于Kubernetes搭建MySQL主从集群

用 Helm 在 k8s 上快速搭建 MySQL 主从集群 ,并提供对外访问 之前使用 k8s 时,经常得创建各种 deployment,service,statefulSet 等等,会有很多 yaml 文件,管理起来也比较难。而这个包管理器中,有很多大佬配置好的案例,我们可以直接拿过来用,根据自己的需要稍微改下配置就可以了。我并没有去创建 storageClass,都是使用静态的 pv 和 pvc,目前还很正常,如果有坑的话。这里,我们找到相应的 chart 后,看看它的 README.md 介绍,里面有很多配置项的介绍,这里,我就不细说了,直接给大家看我的配置了。 阅读详情

愿你,忠于自己,活得像自己。

清单:
NameVersion
CentOS7
Kubernetes1.9.0
Docker17.09.1-ce
MySQL5.7

前言

令我始料不及的出差活动中,开始接触Kubernetes并被要求搭建基于此的MySQL主从集群,由于笔者在Linux、Kubernetes等方面都是小白,故此展开了填坑活动,写本文目的只是为了让其他程序猿少踩坑,下面简单介绍下MySQL主从集群。
我们用MySQL集群的分布式部署来实现MySQL主从模式,在MySQL集群中,Master节点主要负责数据的分发和slave节点的管理。因此Master节点主要负责数据的写入和分发(包括insert、update、delete)。而slave节点主要负责数据的读取(包括select)。基本的master和slave的分工作业,如下图所示。


MySQL集群架构

MySQL集群在主从模式下实现一台服务充当主服务器,其他一台或者多台服务器充当从服务器。下面我们开始搭建。

一、安装MySQL

二、构建Docker镜像

  • 构建镜像需要以下操作,先简单说明后面步骤将此部分内容写入Dockerfile中
master配置
  1. 文件/etc/my.cnf中[mysqld]下添加配置
log-bin=mysql-bin
server-id=1
  1. 重启MySQL
    # service mysqld restart
  2. 创建同步账号
# mysql -u root -p
# create user 'sync'@'%' identified by 'MySQL@lipuan.2018';
  1. 赋予同步账号远程权限
    # grant replication slave on *.* to 'sync'@'%' identified by 'MySQL@lipuan.2018';
slave配置
  1. 文件/etc/my.cnf中[mysqld]下添加配置
log-bin=mysql-bin
server-id=2
  1. 重启MySQL
    # service mysqld restart
  2. 配置主机IP
# mysql -u root -p
# change master to master_host='x.x.x.x',master_user='sync',master_password='MySQL@lipuan.2018';

注意: server-id为主机标识,不能重复。x.x.x.x'为master服务器IP

  • 下面我们将以上的配置写入Dockerfile中
准备master镜像
  1. 下载MySQL官方Docker镜像文件,并解压
# wget https://codeload.github.com/docker-library/mysql/zip/master
# unzip master
# mkdir /home/lipuan/mysqlDockerFile
# cp -Rf mysql-master/5.7/Dockerfile /home/lipuan/mysqlDockerFile
# cp -Rf mysql-master/5.7/docker-entrypoint.sh /home/lipuan/mysqlDockerFile
# rm -rf mysql-master
# chmod +x docker-entrypoint.sh
  1. Dockerfile中添加,位置如下图所示
RUN sed -i '/\[mysqld\]/a server-id=1\nlog-bin' /etc/mysql/mysql.conf.d/mysqld.cnf
Dockerfile-master
  1. docker-entrypoint.sh中添加,位置如下图所示
echo "CREATE USER '$MYSQL_REPLICATION_USER'@'%' IDENTIFIED BY '$MYSQL_REPLICATION_PASSWORD' ;" | "${mysql[@]}"
echo "GRANT REPLICATION SLAVE ON *.* TO '$MYSQL_REPLICATION_USER'@'%' IDENTIFIED BY '$MYSQL_REPLICATION_PASSWORD' ;" | "${mysql[@]}"

echo 'FLUSH PRIVILEGES ;' | "${mysql[@]}"
entrypoint-master
准备slave的镜像
  1. 下载MySQL官方Docker镜像文件
# wget https://codeload.github.com/docker-library/mysql/zip/master
# unzip master
# mkdir /home/lipuan/mysqlDockerFile
# cd ~
# cp -Rf mysql-master/5.7/Dockerfile /home/lipuan/mysqlDockerFile
# cp -Rf mysql-master/5.7/docker-entrypoint.sh /home/lipuan/mysqlDockerFile
# rm -rf mysql-master
# chmod +x docker-entrypoint.sh
  1. Dockerfile中添加,位置如下图所示
RUN RAND="$(date +%s | rev | cut -c 1-2)$(echo ${RANDOM})" && sed -i '/\[mysqld\]/a server-id='$RAND'\nlog-bin' /etc/mysql/mysql.conf.d/mysqld.cnf

此处server-id用的是随机数


Dockerfile-slave

2.3 docker-entrypoint.sh中添加,位置如下图所示

echo "STOP SLAVE;" | "${mysql[@]}"
echo "CHANGE MASTER TO master_host='$MYSQL_MASTER_SERVICE_HOST', master_user='$MYSQL_REPLICATION_USER', master_password='$MYSQL_REPLICATION_PASSWORD' ;" | "${mysql[@]}"

echo "START SLAVE;" | "${mysql[@]}"

slave配置中,master_host一项用的是$MYSQL_MASTER_SERVICE_HOST,这个环境变量(enviromnent variable)是由k8s生成的。


entrypoint-slave.png
  1. 构建master镜像
# cd /home/lipuan/mysqlDockerFile/
# docker build -t paulliu/mysql-master:0.1 .
  1. 构建slave镜像
# cd /home/lipuan/mysqlDockerFile/
# docker build -t paulliu/mysql-slave:0.1 .
  1. 上传镜像
# docker login
# docke push paulliu/mysql-master:0.1
# docke push paulliu/mysql-slave:0.1

三、MySQL集群部署

  • # cd /home/lipuan/DockerBuild此后内容若无指出均在此目录下执行
  • 此部分操作,所有yaml文件缩进空格必须严格,否则无法构建成功
master
  1. 新建mysql-master-rc.yaml文件
    # touch mysql-master-rc.yaml
    添加内容
apiVersion: v1
kind: ReplicationController
metadata:
  name: mysql-master
  labels:
    name: mysql-master
spec:
  replicas: 1
  selector:
    name: mysql-master
  template:
    metadata:
      labels:
        name: mysql-master
    spec:
      containers:
      - name: master
        image: paulliu/mysql-master:0.1
        ports:
        - containerPort: 3306
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "MySQL@lipuan.2018"
        - name: MYSQL_REPLICATION_USER
          value: "sync"
        - name: MYSQL_PASSWORD
          value: "MySQL@lipuan.2018"
  1. 新建mysql-master-service.yaml文件
    # touch mysql-master-service.yaml
    添加内容
apiVersion: v1
kind: Service
metadata:
  name: mysql-master
  labels:
    name: mysql-master
spec:
  ports:
  - port: 3306
    targetPort: 3306
  selector:
    name: mysql-master
  1. 部署MySQL master服务
# kubectl create -f mysql-master-rc.yaml
# kubectl create -f mysql-master-service.yaml
  1. 查看运行情况
    # kubectl get pods,service,rc
slave
  1. 新建mysql-slave-rc.yaml文件
    # touch mysql-slave-rc.yaml
    添加内容
apiVersion: v1
kind: ReplicationController
metadata:
  name: mysql-slave
  labels:
    name: mysql-slave
spec:
  replicas: 1
  selector:
    name: mysql-slave
  template:
    metadata:
      labels:
        name: mysql-slave
    spec:
      containers:
      - name: master
        image: paulliu/mysql-slave:0.1
        ports:
        - containerPort: 3306
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "MySQL@lipuan.2018"
        - name: MYSQL_REPLICATION_USER
          value: "sync"
        - name: MYSQL_PASSWORD
          value: "MySQL@lipuan.2018"
  1. 新建mysql-slave-service.yaml文件
    # touch mysql-slave-service.yaml
    添加内容
apiVersion: v1
kind: Service
metadata:
  name: mysql-slave
  labels:
    name: mysql-slave
spec:
  ports:
  - port: 3306
    targetPort: 3306
  selector:
    name: mysql-slave
  1. 部署MySQL slave服务
# kubectl create -f mysql-slave-rc.yaml
# kubectl create -f mysql-slave-service.yaml
  1. 查看运行情况
    # kubectl get pods,service,rc

写在文末

写到这里基于Kubernetes的MySQL主从集群就搭建成功了,如果有哪位朋友对于其中步骤不是很清楚,欢迎互相学习。
本文是笔者首次写技术博客,如有错漏等问题,还望各位大大指出批评!

更新日志

  1. 2018.01.13 在准备镜像部分添加了对于docker-entrypoint.sh文件授予可执行权限,若无此步骤可能导致镜像无法运行;


作者:lipuan
链接:https://www.jianshu.com/p/da0b339e1274
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
基于k8s搭建mysql5.7主从集群实现读写分离 因为只有一个 MySQL 主服务器,所以客户端应直接连接到 MySQL 主服务器 Pod (通过其在无头 Service 中的 DNS 条目)以执行写入操作。,是一种常规 Service,具有其自己的集群 IP。2,部署第三个service使用标签选择器选择mysql-0,数据写入只能写入主节点mysql-0,从节点拒绝主节点以外的链接写入数据。2,拥有一个ceph分布式存储集群,此mysql集群基于ceph块存储,部署方案可参考我前面的rook部署ceph方案。1,拥有一个运行中的k8s集群。 阅读详情

相关推荐

Kubernetes搭建MySQL主从集群

Kubernetes搭建MySQL主从集群欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果

qq_40879183的博客 1277

Kubernetes安装Mysql集群

kubernetes1.25 mysql5.7

gyfghh的博客 303

K8S部署主从Mysql集群(版本8.0) 部署方式使用StatefulSet

二、MySQL集群搭建 2.1、集群要求 搭建一个一主 N 从的 MySQL 集群; 从节点可以水平扩展; 所有的写操作,都只能在主节点(Master)上执行; 所有的读操作可以在所有节点上执行; 2.2、物理机环境搭建集群 下面,我们看一张MySQL主从复制的原理图: 上面的原理图告诉我们,部署这样一个一主多从的 MySQL 集群,关键在于配置 Master 节点和 Slave 节点的复制和同步。 下面我们用自然语言描述在物理机上部署这样的集群的关键步骤; 1、配置并安装好 Mast

xiaxia2022的博客 5809

第五章 KubeSphere3.3.0 + MySQL8.0.25 集群部署

本节内容我使用kubesphere3.3.0平台构建MySQL8.0.25集群部署。使用Radondb2.2.0部署集群,RadonDBMySQL是一款基于MySQL的开源、高可用、云原生集群解决方案。

cqnaqjy的博客 2122

基于VUE的智慧园区可视化平台(开题报告+源码)

本系统(程序源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景: 随着城市化进程的加速,园区作为城市发展的重要组成部分,其管理和运营效率直接影响到城市的经济发展和居民生活质量。传统的园区管理方式已经难以满足现代城市对于高效率、智能化的需求。因此,利用先进的信息技术构建一个智慧园区可视化平台显得尤为重要。Vue.js作为一个高效的前端框架,能够帮助开发一个动态的、用户友好的智慧园区可视化平台,实现园区管理的数字化和智能化。

liu10611的博客 1183

Computers & Security 投稿实战:从零到一详解避坑指南

本文详细解析了向《Computers & Security》投稿的全流程避坑指南,包括ORCID账号注册、文件格式统一、Editorial Manager®系统操作技巧等关键步骤。特别强调了cover letter撰写、Declaration of Interest Statement准备以及PDF生成后的检查要点,帮助研究者高效完成投稿流程。

weixin_29228203的博客 676

K8S搭建MySQL集群

使用K8S搭建MySQL一主一从集群。

m0_71239320的博客 2888

【读论文】AI陪伴场景长期记忆(用户画像)解决方案

在长程人机交互中,如何让 AI 记住用户,不再是简单的“检索增强(RAG)”就能解决的问题。传统的向量数据库面临“信息信噪比低”、“人格不一致”以及“随着对话无限增长而崩塌”的困境。MemTensor 团队联合人大提出的Inside Out框架,从认知心理学汲取灵感,提出了一种基于PersonaTree(人格树)的显式记忆进化机制。该方案通过训练一个轻量级的(使用 DeepSeek-R1 蒸馏数据 + GRPO 强化学习),实现了将非结构化对话流实时压缩为结构化树操作(新增|更新|删除)。

kakaZhui的博客 820

Kubernetes——KubeSphere构建mysql集群

利用kubeSphere构建mysql的主从集群,同时测试主从集群结构部署成功。

庄小焱 1954

unity中VideoPlayer播放视频,使用Shader除去黑底且无黑边

1. 创建一个Shader 和 一个 材质球;Shader中复制如下代码:(此Shader代码为“ChromaKeyKit”插件中的ChromaKey_Alpa_Genera代码,但因只需要除去视频黑底而挂一个插件有点不合适) // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' Shader "ChromaKeyKit/ChromaKey/ChromaKey_Alpha_General"

weixin_42065078的博客 1748

SLAM算法的优缺点

SLAM(Simultaneous Localization and Mapping,同时定位与地图构建)算法是一种通过传感器数据实时估计机器人自身位置和构建环境地图的技术。

selenia8860的博客 2908

云原生之在kubernetes集群下部署Mysql应用

云原生之在kubernetes集群下部署Mysql应用

jks212454的博客 3232

WinCC与PLC在西门子逻辑赛项中的通信配置避坑指南

本文针对西门子逻辑赛项中WinCC与PLC通信配置的常见问题,提供了一套实战避坑指南。重点解析了WinCC、PLC与EET仿真平台的三角通信架构,强调了IP地址规划、防火墙设置等关键环节的注意事项,并给出了系统化的故障诊断流程与排查技巧,帮助选手和技术人员快速定位并解决通信故障,确保监控系统稳定运行。

weixin_29165725的博客 108

kubernetes mysql多主_基于Kubernetes搭建MySQL主从集群

愿你,忠于自己,活得像自己。清单:NameVersionCentOS7Kubernetes1.9.0Docker17.09.1-ceMySQL5.7前言令我始料不及的出差活动中,开始接触Kubernetes并被要求搭建基于此的MySQL主从集群,由于笔者在Linux、Kubernetes等方面都是小白,故此展开了填坑活动,写本文目的只是为了让其他程序猿少踩坑,下面简单介绍下MySQL主从集群。我们...

weixin_35591093的博客 334

Vue3 - Element Plus上传组件el-upload上传多个文件时,让on-change监听事件仅执行一次并获取最终文件列表方法(开启多选文件并手动上传,拿到文件列表统一循环调用接口上传)

vue3,elementplus,Upload上传,el-upload,文件上传组件,上传组件on-change里执行多次,取消自动上传后change重复执行问题,upload上传多个文件后导致on-change执行多次拿不到最终文件列表,Element-plus的upload组件on-change不断执行怎么办,上传多个文件多次执行调用,上传多个文件时如何只执行一次on-change方法拿到最终的文件列表,vue3elementplus上传组件开启多个上传后导致change方法执行好几次,仅调用一

🏆 前端领域优质创作者 1万+

31、贝叶斯认知建模与隐马尔可夫模型:理论与应用

本文探讨了贝叶斯认知建模与隐马尔可夫模型(HMM)的理论基础及其在认知科学和神经科学中的应用。重点介绍了贝叶斯定理和HMM的基本原理,并结合实际案例,如情绪识别系统和脑机接口(BCI),展示了它们在处理复杂认知任务中的强大能力。文章还讨论了贝叶斯-HMM模型的技术细节、优势与局限性,以及未来的发展前景。

meat5的博客 142

在K8s集群中搭建Mysql主从集群

在k8中搭建Mysql集群,通过statefulset进行Pod部署,使用configMap指定不同的配置文件,使用secret指定Mysql密码,使用storageClass进行数据的持久化存储,下面为本次案例的环境介绍:k8s集群版本:1.23.5持久化存储:nfsmysql版本:5.7.42。

本博客为自己学习过程或工作过程的一些学习心得,在这里进行分享 516

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

kubernetes mysql 集群_基于Kubernetes搭建MySQL主从集群

愿你,忠于自己,活得像自己。清单:CentOS7Kubernetes1.9.0Docker17.09.1-ceMySQL5.7前言令我始料不及的出差活动中,开始接触Kubernetes并被要求搭建基于此的MySQL主从集群,由于笔者在Linux、Kubernetes等方面都是小白,故此展开了填坑活动,写本文目的只是为了让其他程序猿少踩坑,下面简单介绍下MySQL主从集群。我们用MySQL集群的分布...

weixin_42364392的博客 370

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

Kubernetes MySQL 主从集群:5分钟搭建数据永不丢失的「数据库兄弟连」

Kubernetes MySQL 主从集群:5分钟搭建数据永不丢失的「数据库兄弟连」

tangtangttttt的博客 849

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

K8s 实战复盘:用 StatefulSet + 无头服务 + NFS 搭建 MySQL 主从集群

mysql-0 ──挂载──> PVC(data-mysql-0) ──绑定──> PV(mysql-pv-0) ──NFS──> /data/nfs/mysql-0。mysql-1 ──挂载──> PVC(data-mysql-1) ──绑定──> PV(mysql-pv-1) ──NFS──> /data/nfs/mysql-1。kubectl -n mysql get pod -w # 观察有序创建:先 mysql-0 Running,才起 mysql-1。

2401_86194191的博客 276

Kubernetes(k8s)上搭建一主两从的mysql8集群

Kubernetes上搭建一主二从主从复制的MySQL集群,步骤超详细,内有视频教程。

XiaoHH的博客 7689

k8s mysql数据同步_Kubernetes部署MySQL主从服务

一般情况下Kubernetes可以通过ReplicaSet以一个Pod模板创建多个Pod副本,但是它们都是无状态的,任何时候它们都可以被一个全新的Pod替换。然而有状态的Pod需要另外的方案确保当一个有状态的Pod挂掉后,这个Pod实例需要在别的节点上重建,但是新的实例必须与被替换的实例拥有相同的名称、网络标识和状态。这就是StatefulSet管理Pod的手段。对于容器集群,有状态服务的挑战在于...

weixin_36179394的博客 515

如何在 Kubernetes 上优雅的运行一个 MySQL 主从架构集群

公众号关注「奇妙的 Linux 世界」设为「星标」,每天带你玩转 Linux !一般情况下Kubernetes可以通过ReplicaSet以一个Pod模板创建多个Pod副本,但是它们都是...

easylife206的专栏 1429

kubernetes:使用statefulset部署mysql主从集群

kubernetes1. statefullset部署mysql主从集群的原理2. 配置configmap3. headless service和clusterip service4. statefulset配置4.1 先尝试拉起一个主mysql4.2 拉起主从mysql 1. statefullset部署mysql主从集群的原理 mysql-0是master mysql-1和mysql-2是两...

weixin_43384009的博客 1556
上一篇: kubernetes 1.5安装 Redis 3.2.6 Cluster StatefulSet
下一篇: 如何看待 Kotlin 成为 Android 官方支持开发语言?
hxpjava1
博客等级 码龄19年 1365粉丝 511原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值