前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MyCat07——搭建双主双从模式

MyCat07——搭建双主双从模式

原创
作者头像
用户8100582
发布2023-11-24 21:12:31
3510
发布2023-11-24 21:12:31
举报
文章被收录于专栏:Java多线程Java多线程

1 MySQL双主双从原理

为了分担单台数据库服务器的压力,采用了一主一从模式,对数据进行了读取操作的分离;

但是如果 master 发生故障时,整个数据库将不可用。

为了进一步提高数据库的高可用,采用双主双从架构,两台主库,分别将对方作为自己的master,自己作为对方的 slave 来进行复制。

2 环境准备

2.1 环境清理

停止之前创建的docker容器:

docker stop 容器ID

并将其卸载:

docker rm 容器ID

2.2 环境规划

准备4台服务器或者安装到4个容器中:

编号

角色

IP地址

端口

服务器名

1

master1

192.168.137.3

3366

2

slave1

192.168.137.3

3377

3

master2

192.168.137.3

3388

4

slave2

192.168.137.3

3399

3 环境搭建

3.1 创建docker容器

分别创建规划的四个容器

docker run -d -p 3366:3306 -e MYSQL_ROOT_PASSWORD=123456 --name=master1 mysql:5.7

docker run -d -p 3377:3306 -e MYSQL_ROOT_PASSWORD=123456 --name=slave1 mysql:5.7

docker run -d -p 3388:3306 -e MYSQL_ROOT_PASSWORD=123456 --name=master2 mysql:5.7

docker run -d -p 3399:3306 -e MYSQL_ROOT_PASSWORD=123456 --name=slave2 mysql:5.7

四个容器创建完成,并处于启动状态

3.2 修改mysql数据库配置

进入到mysql容器,因要对mysql配置文件进行修改,而容器中缺少vim编辑器,首先需要在容器中进行安装。

分别进入到四个容器中

docker exec -it master1 /bin/bash

在容器里安装vim

yum install vim -y

3.2.1 开启master服务器的binlog日志

在master1 master2 容器中修改配置,开启binlog日志;其中 server-id 的值 master1 中设置1,master2 中设置2,也可以设置成其它不能相同的值即可。

server-id=1

log-bin=mysql_bin

3.2.2 开启slave服务器的relaylog日志

  • relaylog日志

在这种集群设置中,需要使用relaylog日志:

relaylog日志也可以称为中继日志。

master主节点的binlog传到slave从节点后,被写进relay log里,从节点的slave sql线程从relaylog里读取日志,然后应用到slave从节点本地。从服务器I/O线程将主服务器的二进制日志读取过来记录到从服务器本地文件,然后SQL线程会读取relay-log日志的内容并应用到从服务器,从而使从服务器和主服务器的数据保持一致。

  • 配置

在slave1 slave2 容器中修改配置,开启relaylog日志;其中 server-id 的值 slave1 中设置3,slave2 中设置4,也可以设置成其它不能相同的值即可。

server-id=3

relay-log=mysql-relay

3.3 重启所有容器

通过 docker 指令重新启动所有容器,使之前修改的 mysql 配置生效。

docker restart $(docker ps -aq)

3.4 配置master节点

3.4.1 分别进入到两个master容器

docker exec -it master1 /bin/bash

docker exec -it master2 /bin/bash

3.4.2 进入mysql命令行

mysql -uroot -p123456

3.4.3 创建用于从库同步的用户,并分配所有权限

GRANT replication SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY '123456';

3.4.4 查看master节点binlog状态

show master status;

master1节点

master2节点

3.5 配置slave节点

3.5.1 进入到slave容器

docker exec -it slave1 /bin/bash

docker exec -it slave2 /bin/bash

3.5.2 进入mysql命令行

mysql -uroot -p123456

3.5.3 执行到master节点的同步命令

slave1节点

change master to master_host='192.168.137.3',master_port=3366,master_user='slave_user',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=443;

slave2节点

change master to master_host='192.168.137.3',master_port=3388,master_user='slave_user',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=443;

注意:

这里的master_host可以使用物理机的IP和端口,也可以使用容器中被随机分配的IP地址。

3.5.4 开启同步

start slave;

3.5.5 查看从库的状态

show slave status \G;

slave1

slave2

3.6 配置master节点互为主从

3.6.1 master1节点配置

进入master1容器

docker exec -it master1 /bin/bash

进入msql命令行

mysql -uroot -p123456

执行到master2的同步指令

change master to master_host='192.168.137.3',master_port=3388,master_user='slave_user',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=443;

启动同步

start slave;

查看同步状态

show slave status \G;

3.6.2 master2节点配置

进入master2容器

docker exec -it master2 /bin/bash

进入msql命令行

mysql -uroot -p123456

执行到master2的同步指令

change master to master_host='192.168.137.3',master_port=3366,master_user='slave_user',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=443;

启动同步

start slave;

查看同步状态

show slave status \G;

3.7 修改mycat配置

修改mycat配置文件 schema.xml。

增加一个 writeHost 节点,并修改 host 属性为唯一值。

重新启动mycat

mycat restart

双主双从的读写分离架构,创建完成。

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 MySQL双主双从原理
  • 2 环境准备
    • 2.1 环境清理
      • 2.2 环境规划
      • 3 环境搭建
        • 3.1 创建docker容器
          • 3.2 修改mysql数据库配置
            • 3.2.1 开启master服务器的binlog日志
            • 3.2.2 开启slave服务器的relaylog日志
          • 3.3 重启所有容器
            • 3.4 配置master节点
              • 3.4.1 分别进入到两个master容器
              • 3.4.2 进入mysql命令行
              • 3.4.3 创建用于从库同步的用户,并分配所有权限
              • 3.4.4 查看master节点binlog状态
            • 3.5 配置slave节点
              • 3.5.1 进入到slave容器
              • 3.5.2 进入mysql命令行
              • 3.5.3 执行到master节点的同步命令
              • 3.5.4 开启同步
              • 3.5.5 查看从库的状态
            • 3.6 配置master节点互为主从
              • 3.6.1 master1节点配置
              • 3.6.2 master2节点配置
            • 3.7 修改mycat配置
            相关产品与服务
            容器服务
            腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档