MyCat07——搭建双主双从模式

2023-11-24 21:12:31 浏览数 (2)

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腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞