一. mysql主从同步原理

创建一个中间件集群 - 图1

1)在Slave 服务器上执行sart slave命令开启主从复制开关,开始进行主从复制。

2)此时,Slave服务器的IO线程会通过在master上已经授权的复制用户权限请求连接master服务器,并请求从执行binlog日志文件的指定位置(日志文件名和位置就是在配置主从复制服务时执行change master命令指定的)之后开始发送binlog日志内容。

3)Master服务器接收到来自Slave服务器的IO线程的请求后,其上负责复制的IO线程会根据Slave服务器的IO线程请求的信息分批读取指定binlog日志文件指定位置之后的binlog日志信息,然后返回给Slave端的IO线程。返回的信息中除了binlog日志内容外,还有在Master服务器端记录的IO线程。返回的信息中除了binlog中的下一个指定更新位置。

4)当Slave服务器的IO线程获取到Master服务器上IO线程发送的日志内容、日志文件及位置点后,会将binlog日志内容依次写到Slave端自身的Relay Log(即中继日志)文件(Mysql-relay-bin.xxx)的最末端,并将新的binlog文件名和位置记录到master-info文件中,以便下一次读取master端新binlog日志时能告诉Master服务器从新binlog日志的指定文件及位置开始读取新的binlog日志内容。

5)Slave服务器端的SQL线程会实时检测本地Relay Log 中IO线程新增的日志内容,然后及时把Relay LOG 文件中的内容解析成sql语句,并在自身Slave服务器上按解析SQL语句的位置顺序执行应用这样sql语句,并在relay-log.info中记录当前应用中继日志的文件名和位置点。

二. mysql主从同步注意事项

  • master节点和slave节点的uuid不同
  • master节点和slave节点的server_id不同

三. docker镜像创建mysql容器

3.1 同一镜像区创建不同容器的uuid

用同一mysql镜像创建mysql主从集群时,发现每台mysql服务的uuid都是相同的,是因为在数据初始化时将uuid写在了/var/lib/mysql/auto.cnf文件中,造成每个容器的uuid都是相同的。

为了解决不同容器的uuid不同问题,需要在mysql启动生成配置文件后并在启动前 随机生成一个uuid写入到/var/lib/mysql/auto.cnf,这样就可以确保同一镜像生成的容器的uuid都不相同。

创建一个中间件集群 - 图2创建一个中间件集群 - 图3

3.2 同一镜像不同容器的server_id

用同一mysql镜像创建mysql主从集群时,如何确保每个mysql服务的server_id不同?

k8s在创建容器时,会为每个容器创建创建一个主机名( 如:gr78648d-0),创建多个容器后面的数字会依次递增,所以可以利用这一特性生成不同的server_id(主机名数字部分 + 环境变量数字),然后在maser和slave使用不同的环境变量数字数字即可。

创建一个中间件集群 - 图4创建一个中间件集群 - 图5

3.3 创建镜像,并将镜像推到dockerhub上

创建一个中间件集群 - 图6

四. 构建容器,发送到云市场

master节点 通过指定镜像创建容器

创建一个中间件集群 - 图7

master节点 开启内部的3306端口

创建一个中间件集群 - 图8

master节点 设置依赖所需要连接的配置信息

创建一个中间件集群 - 图9

master节点 设置容器的配置参数

创建一个中间件集群 - 图10

master节点 设置容器的配置信息(环境变量)

创建一个中间件集群 - 图11创建一个中间件集群 - 图12

slave节点 通过指定镜像创建容器

创建一个中间件集群 - 图13

slave节点 开启内部的3306端口

创建一个中间件集群 - 图14

slave节点 将应用类型设置为有状态应用

创建一个中间件集群 - 图15

slave节点 设置依赖所需要连接的配置信息

创建一个中间件集群 - 图16

设置slave依赖master

创建一个中间件集群 - 图17

创建两台slave

创建一个中间件集群 - 图18

发布到云市场

创建一个中间件集群 - 图19

五. 安装MySQL集群镜像

5.1 应用市场安装mysql集群

创建一个中间件集群 - 图20

六. mysql主从同步配置

6.1 查看master节点状态,记录二进制文件名(mysql-bin.000003)和位置(154)

创建一个中间件集群 - 图21

6.2 slave节点执行同步SQL语句(需要主服务器主机名,登陆凭据,二进制文件的名称和位置)

创建一个中间件集群 - 图22

原文: https://www.rainbond.com/docs/stable/advanced-scenarios/create-middleware-cluster.html