如何在 Kubernetes 环境中搭建 MySQL (一):简介

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: MySQL in Kubernetes  最近因为工作上的需求,搭建了一套部署在 Kubernetes 环境中的 MySQL,可能听起来就是让 MySQL 的 docker image 跑在 Kubernetes 里,应该没什么难度,可实...
img_5f1bde87f6df351d0a1e7b85abfd3ec7.png
MySQL in Kubernetes

  最近因为工作上的需求,搭建了一套部署在 Kubernetes 环境中的 MySQL,可能听起来就是让 MySQL 的 docker image 跑在 Kubernetes 里,应该没什么难度,可实际操作起来,这其实是相当复杂的一个工程:首先要有 Kubernetes 集群,才能谈得到部署应用进去;其次,MySQL 不同于无状态的应用,其中的数据是非常关键的,必须要保证其可用性,这就要求必须有高可靠性的存储集群来存储数据;再者由于众所周知的网络原因,Kubernetes 和 docker 相关的镜像想拿到非常不方便;最后,MySQL 在 cloud native 环境同样需要做主备和高可用的配置。
  我计划写一系列文章将自己的经验总结出来,从头到位将这一系列事情讲清楚,并尽量保证感兴趣的朋友可以按照我写的步骤将一个可用的环境搭建出来。

目录

  以下是我以后写作的计划和链接,欢迎大家多提意见:
  一:简介
  二:在 cloud native 环境下配置 MySQL 的几个关键点
  三:使用 minikube 部署单节点 Kubernetes
  四:使用 kubeadm 部署多节点 Kubernetes 集群
  五:手动搭建 Kubernetes 集群
  六:使用 ceph-deploy 搭建 ceph 集群
  七:部署 RADOSGW、RBD 和 CephFS
  八:部署 MySQL,使用 PC、PVC 作为存储
  九:部署 MySQL,使用 StorageClass 作为存储
  十:使用 StatefulSet 部署主从同步的 MySQL
  十一:Vitess 和 Gelera 简介
  十二:使用 Ingress 让 MySQL 可以在 Kubernetes 集群外访问


一:简介

  作为系列的第一篇,我想写一下解决这个问题的思路,并对用到的开源项目做简要的介绍。

  现在越来越流行将各种各样的软件部署在容器环境当中,而非虚拟机环境中,一方面原因是容器环境对于硬件的资源利用率更高,对于云服务来讲更为节省成本;而且容器环境对于微服务架构的支持有着非常明显的优势,微服务化是软件系统演进的一个主要趋势;另外可能就是因为 Kubernetes 提供的大量简单易用的容器调度方式了,虽然 Kubernetes 之前也有一些竞争对手,不过现在的趋势来看 Kubernetes 已经是毫无疑问的胜出者,是事实上的行业标准。那么做容器化,做 cloud native,Kubernetes 是平台的不二选择。

  那么为什么要把 MySQL 放进 Kubernetes 里呢?首先 MySQL 是极为重要的,它是开源免费的关系型数据库的首要选择,软件系统如果要用关系型数据库,且不考虑 Oracle 等付费软件的话,除了 MySQL 外,基本是不会做他想了(也许 Windows 环境下会考虑 SQL Server),而现在流行的软件设计方式都是让应用成为无状态,不存储任何数据,数据都放在数据库里,所以 MySQL 有多重要也就不言而喻了。其次还是因为 Kubernetes 非常强大,将 MySQL 放在里面运行,绝大部分情况下就不需要人工干预了,MySQL 进程死掉,会自动再启动新的实例;会把 MySQL 的多个实例分布在不同的服务器上,避免一个服务器出问题,功能不可用;需要多少个 MySQL 实例,系统会自动保证有多少实例在运行......如果这些事情要放在虚拟机环境中,恐怕只能是通过监控系统检测,出现问题手工干预了。

  我们已经理解了为什么要把 MySQL 放进 Kubernetes 里,接下来要考虑如何去做。把 MySQL 封装成容器,跑在容器 runtime 里,并让 Kubernetes 系统来调度,这件事本身不难,MySQL 官方已经做好了 MySQL 的 Dockerfile 和 docker image,只需要写个 yaml file 让 MySQL 跑在 Kubernetes 里就行了。但 MySQL 的独特性在于,MySQL 里面的数据是非常重要的,不能像其他软件一样,出了问题直接删掉,再启动一个实例就行了,业务数据丢失可是非常严重的问题。所以要把数据存放在安全可靠的地方,数据外挂有多种方案,这系列文章中选用的是 Ceph RBD,Ceph 是目前开源分布式存储系统中,最为流行的,RBD 是其中的块存储方案。

  Kubernetes 是 Google 贡献给开源的软件,所以 Kubernetes 相关的资源自然都是存储在 Google 的服务器上,因为众所周知的原因,正常情况下我们是没法访问到的,为了让读者可以跟着做下去,我会把教程中用到的资源全部下载下来,放在国内可以访问到的服务器上,系列文章中 Kubernetes 对应的版本为 1.10.2,如果有其他版本的需求,大家可以联系我。

  最后 MySQL 服务已经就为了,如果只是在 Kubernetes 集群内使用的话,已经没有任何问题了,但是如果要对外开放的话,目前还做不到,原因是 Kubernetes 内部网络不对外开放,那么如何让 MySQL 可以被外面访问到呢?Kubernetes 提供了 NodePort、Load Balance 和 Ingress 三种方式,系列文章的最后会重点谈到如何使用 Ingress。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
9月前
|
存储 SQL 关系型数据库
MySQL存储引擎简介
在选择相应的存储引擎时,需要充分考虑实际业务场景、性能需求和数据一致性要求,从而为数据管理提供最佳支持。
451 17
|
9月前
|
关系型数据库 MySQL Java
安装和配置JDK、Tomcat、MySQL环境,以及如何在Linux下更改后端端口。
遵循这些步骤,你可以顺利完成JDK、Tomcat、MySQL环境的安装和配置,并在Linux下更改后端端口。祝你顺利!
561 11
|
10月前
|
关系型数据库 MySQL Linux
在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾
以上就是在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾的步骤。这个过程就像是一场接力赛,数据从MySQL数据库中接力棒一样传递到备份文件,再从备份文件传递到其他服务器,最后再传递回MySQL数据库。这样,即使在灾难发生时,我们也可以快速恢复数据,保证业务的正常运行。
495 28
|
12月前
|
SQL 关系型数据库 MySQL
数据库数据恢复——MySQL简介和数据恢复案例
MySQL数据库数据恢复环境&故障: 本地服务器,安装的windows server操作系统。 操作系统上部署MySQL单实例,引擎类型为innodb,表空间类型为独立表空间。该MySQL数据库没有备份,未开启binlog。 人为误操作,在用Delete命令删除数据时未添加where子句进行筛选导致全表数据被删除,删除后未对该表进行任何操作。
|
自然语言处理 Java 关系型数据库
Java mysql根据很长的富文本如何自动获取简介
通过使用Jsoup解析富文本并提取纯文本,然后根据需要生成简介,可以有效地处理和展示长文本内容。该方法简单高效,适用于各种应用场景。希望本文对您在Java中处理富文本并生成简介的需求提供实用的指导和帮助。
250 9
|
存储 Oracle 关系型数据库
索引在手,查询无忧:MySQL索引简介
MySQL 是一款广泛使用的关系型数据库管理系统,在2024年5月的DB-Engines排名中得分1084,仅次于Oracle。本文介绍MySQL索引的工作原理和类型,包括B+Tree、Hash、Full-text索引,以及主键、唯一、普通索引等,帮助开发者优化查询性能。索引类似于图书馆的分类系统,能快速定位数据行,极大提高检索效率。
218 8
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
836 3
|
监控 关系型数据库 MySQL
Linux环境下MySQL数据库自动定时备份策略
在Linux环境下,MySQL数据库的自动定时备份是确保数据安全和可靠性的重要措施。通过设置定时任务,我们可以每天自动执行数据库备份,从而减少人为错误和提高数据恢复的效率。本文将详细介绍如何在Linux下实现MySQL数据库的自动定时备份。
406 3
|
关系型数据库 MySQL Docker
docker环境下mysql镜像启动后权限更改问题的解决
在Docker环境下运行MySQL容器时,权限问题是一个常见的困扰。通过正确设置目录和文件的权限,可以确保MySQL容器顺利启动并正常运行。本文提供了多种解决方案,包括在主机上设置正确的权限、使用Dockerfile和Docker Compose进行配置、在容器启动后手动更改权限以及使用 `init`脚本自动更改权限。根据实际情况选择合适的方法,可以有效解决MySQL容器启动后的权限问题。希望本文对您在Docker环境下运行MySQL容器有所帮助。
2471 1
|
Oracle 关系型数据库 MySQL
Mysql(1)—简介及Windows环境下载安装
MySQL 是一个流行的关系型数据库管理系统(RDBMS),基于 SQL 进行操作。它由瑞典 MySQL AB 公司开发,后被 Sun Microsystems 收购,现为 Oracle 产品。MySQL 是最广泛使用的开源数据库之一,适用于 Web 应用程序、数据仓库和企业应用。
240 2

推荐镜像

更多