Kubernetes系列-部署MySQL主从复制

技术分享  / 倒序浏览   ©

#楼主# 2020-4-15

跳转到指定楼层

马上注册,分享更多源码,享用更多功能,让你轻松玩转云大陆。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
最近需要快速部署MySQL主从复制集群,网上找了下,基本都是使用两个不同的镜像来完成Master和Slave的部署,太麻烦了。能不能就用一个镜像加文件搞定呢?
分析问题,制定解决思路

分析一下这个项目的难点:
1.启动顺序:Master 的Pod 必须先于 Slave 的 Pod 起来;2.如果某个Pod挂掉了,应该自动重新启动一个Pod,这个新建的Pod应该沿用原来的数据;3.Master 与 Slave 的配置文件不同,特别是server_id;4.Master 与 Slave 在服务启动之后还需要执行一些命令,它们也不一样,详细为:    1)Master需要执行授权命令,授权的用户名和暗码希望用户自己来配置,而不是写死;    2)Slave需要执行CHANGE MASTER命令,需要知道Master的地址,binlog文件名及位置(非GTID的话);分别解决掉以上的难点,这个项目也就没啥问题了,我们来一个个分解

  • 关于启动顺序问题。这个好说,使用 StatefulSet 轻松就能解决,它的一个特点就是会将全部的Pod副本进行编号,然后按照编号顺序一个一个的启动,Pod命名规则为 statefulsetName-N 其中N为编号,从0开始。例如,StatefulSet名称为 mysql ,那么第一个启动的Pod名称必为 mysql-0 。
  • 关于重建Pod后的数据问题。因为重建的新Pod不肯定还在原来的Node上,因此,想用原来的数据必须要使用分布式或共享Volume。我们可以使用NFS或其它的分布式存储来解决此问题。另外,如果几个副本(例如mysql-1,mysql-2,mysql-3)同时重建,必须保证新建立的 mysql-1 仍然沿用原来的 mysql-1 的数据。这个问题我们可以使用PV和PVC来解决。
  • 配置文件不同的问题。例如,为了提高slave的性能,不开启binlog,而master必须要开启binlog日志。这个问题可以使用 ConfigMap 传两个不同的配置文件,如master.cnf和slave.cnf,让master使用master.cnf,slave使用slave.cnf。那我怎么知道哪个Pod是master,哪个是slave呢?第一个问题里面已经有答案了:mysql-0 肯定是master,我们传入一个脚本,通过Pod的名称来确定应该使用哪个文件。这里又有问题了,如何在容器中知道Pod名称呢?使用 DownwardAPI 。另外一个问题是 server_id ,我们只传了两个配置文件,如果开启多个slave的话,它们的 server_id 必须不能一样,有几种解决方法:1. 使用随机数,不过随机数可能会重复;2. 使用Pod名称后面的编号,它们肯定不会重复。在此,我选用的第二种方法解决的。
  • 用户名和暗码可以使用 Secret 通报进来。Master地址因为不是固定的,所以不建议使用IP地址,我们可以借助 Headless Service 加上 DNS 来解决。如果我们能传入Service的名称进来,那么就可以使用这种方式来与其它Pod进行通信:PodName.ServiceName 。例如,如果Service名称为mysqlsvc,那么master的DNS名称为 mysql-0.mysqlsvc ,这个名称是不会变革的。当Master完成授权工作后,Slave可通过授权帐号查询到binlog文件名及位置信息(注意授权时要给 replication client 权限才可以查询)。
有相识决思路,下面开始着手部署。
构建镜像

起首要解决镜像的问题,直接使用官方镜像显然是不行的,在此我构建了自己的镜像。这个镜像需要有如下特点:

  • 只管小
  • 在 mysql-server 启动后需要执行一些操作,详细有:

    • 设置root暗码
    • Master执行授权动作,Slave执行 CHANGE MASTER 动作及 START SLAVE 的操作

因平时对centos比较熟悉,在此选用centos作为基础镜像,如果希望镜像再小点,可选用ubuntu
为了让镜像只管小,我在做好的镜像中不初始化,在启动容器时再初始化,这样做可能导致启动稍微慢点,优劣可自行取舍。为相识决容器启动后执行命令,我传入几个脚本进容器,随着容器启动而启动,执行完成后就退出。
创建一个目次作为构建环境上下文(可以创建在任意位置),并创建下面几个文件
分享淘帖
回复

使用道具

您的回复是对作者最大的奖励

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于作者

大圆镜2015

新手猿

  • 主题

    8

  • 帖子

    8

  • 关注者

    0

Archiver|手机版|小黑屋|云大陆 | 赣ICP备18008958号-4|网站地图
Powered by vrarz.com!  © 2019-2020版权所有云大陆