开发者学堂课程【全面讲解开源数据库中间件MyCat使用及原理(二):MyCat-高级-读写分离-双主双从搭建】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/756/detail/13282
MyCat-高级-读写分离-双主双从搭建
内容介绍:
一、双主机配置
二、双从机配置
三、双主机、双从机重启 MySQL 服务
四、主机从机都关闭防火墙
五、在两台主机上建立账户并授权 slave
六、在从机上配置需要复制的主机
七、启动两台从服务器复制功能,查看主从复制运行状态
八、两个主机互为复制
九、启动两台主服务器复制功能,查看主从复制运行状态
十、验证
十一、停止从服务复制功能
十二、重新配置主从关系
一、双主机配置
1、准备的机器如下:
双主双从的搭建。既然是双主双从,至少需要四台机器。已经准备好了四台服务器,来搭建这个集群。主机配置,四台服务器分别是 157、158、159 以及 160。157担任 Master1,158 是 Master1的从,也就是 Slave1,159 担任的是 Master2,160 担任的是 Master2 对应的从节点 Slave2,这是准备的四台服务器,这四台服务器准备好了之后,需要进行双主双从配置。
2、准备
在进行双主双从的配置之前,还需要做一些事情。这是准备的四台服务器,IP 地址分别是 157、158、159、160。
新增的一台服务器 160,已经在 160 这台服务器上把 Mysql 安装以及配置完成了,就是一台干净的 MySQL。之前搭建一主一从的时候,使用的是 157 和 158。接下来,要搭建的是双主双从,需要先把 157 和 158 之间的主从关系清除掉,进行重新配置。接下来要清除 157 和 158 的主从关系,在清除主从关系时,只需要再从的一方 158 上面进行操作。先登录上 MySQL,itcast,在执行 show slave status, 加上 \G,来看他们主从复制的状态,Slave IO Running 和 Slave SQL Running 都是 yes,主从依然复制这。要停了主从复制,需要执行 stop slave,这条指令执行完了,还需要再执行一条指令,这条指令只是停了从节点,接下来还需要重置主从之间的关系,接下来还需要执行一条指令叫 reset master,这句话一执行,主从关系就已经断了。要断掉主从关系需要,执行两步。第一步 stop slave 停止从节点,第二步 reset master 就可以了。这两步执行完了之后,这四台服务器就是干净的服务器了。接下来,需要进行双主双从的配置,首先配置双主机的配置,双主机就是 157 和 159,这就是两个主机。
3、Master1 配置
①第一个主机 Master1,也就是 157 我们要配置以下的信息
#主服务器唯一 ID
server−id=1
#启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
#binlog−ignore−db=mysq1
# binlog-ignore-db=information_schema
#设置需要复制的数据库
binlog−do−db=db02
binlog−do−db=db03
binlog−do−db=db04
#设置 logbin 格式
binlog format=STATEMENT
②第一个 server ID,开启二进制日志,选择要复制的数据库,要复制 db02、03、04 数据库。之前进行操作搭建一主一从的时候,已经有了一个数据库 db01,接下来同步就是 db02、03、04,要同步多个数据库,复制多条就可以了。然后选择 binlog 的格式以及在进行从库使用的时候,关于二进制日志是否有写入的一些概念操作。这是 Master1 的配置,先来配置。Master1 157 需要修改 vi /user/my.cnf,按大 G 切换到这
我们要把这里的配置删除掉,删除完了之后,再来进行一个配置。把配置内容导过来,这多了一个字符 D,需要把这个字符删掉。
这样就可以了,保存。再来看一下我们的数据导进来了,保存完成之后,还需要配置另外一个主节点 Master2。
4、Master2 配置
①在 Master2 当中的配置实际上和 Master1 基本上是一样的,只需要修改一个地方,就是 server id,注意 server id 不能重复。
#主服务器唯一 ID
server−id=3
#启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
#binlog−ignore−db=mysq1
# binlog-ignore-db=information_schema
#设置需要复制的数据库
binlog−do−db=db02
binlog−do−db=db03
binlog−do−db=db04
#设置 logbin 格式
binlog format=STATEMENT
把这些配置直接复制,注意 Master2 是 159,所以现在需要操作的是 159,vi /user/my.cnf,按 G 切换到最后,然后在这里面把刚才的配置直接粘贴进来,x 保存。保存完成之后,两台主节点就已经配置好了。接下来,需要配置的是从机。
二、双从机配置
1、Slave1 配置
①#从服务器唯一 ID
server−id=2
#启用中继日志
relay-log=mysql-relay
②首先配置第一个从机 Slave1,只需要增加两行配置。第一个 server id,还是一样,不能重复;第二个 relay log,是否启用中继日志。使用 158 服务器,然后 vi /user/my.cnf,按 G,这里的配置不用动,就这样来配置就可以了。
2、Slave2 配置
①#从服务器唯一 ID
server−id=3
#启用中继日志
relay-log=mysql-relay
②接下来还有一个节点,就是 Slave2 这个节点。Slave 这个节点的服务器是 160。vi /user/my.cnf,按 G,切换到最后。把配置内容粘贴进来,然后保存。实际上,会发现这四个节点他的 server id 分别是1,2,3,4,是不会重复的,这是双主机以及双从机的配置。
三、双主机、双从机重启 MySQL 服务
这些配置完了之后,第三步是重启这四台 mysql 服务,需要四台服务重新启动,都输入 service mysql restart
重启,四台服务都已重启完成。这是第三步操作。
四、主机从机都关闭防火墙
第四步主机都需要关闭防火墙,因为这四台服务器他们直接是要进行交互的,如果防火墙不关闭,有些端口没有放开的话,是会存在问题的。所以需要检查防火墙的状态,四台服务分别输入service iptables status
,看一下防火墙的状态,需要把防火墙关闭 stop。这四台服务器的防火墙就关闭了,关闭完成之后,还需要做一件事。
五、在两台主机上建立账户并授权 slave
1、#在主机 MySQL 里执行授权命令
①GRANT REPLICATION SLAVET ON * , * TO ' itcast ' @ ' % ' IDENTIFIED BY ' itcast ' ;
flush privileges;
②第五步在两台主机上建立账户并授权 slave,直接执行,这两条指令实际上就是要创建一个账户 itcast ,密码也是 itcast,用于主从复制。接下来需要登录 mysql,mysql - u root - p,itcast。在第一台主节点上需要执行这条指令。执行完成之后,还需要执行第二条指令刷新权限列表。完成之后,执行一个指令 show master status,需要看一下主从复制的二进制日志他的位置是什么?接下来操作第二个主节点159,mysql - u root - p,itcast。执行创建账号的 sql 语句,操作完之后再来执行刷新权限列表的指令,执行 show master status。现在 bin 目录在两台主节点上创建主从同步的账户已经操作完成了。
六、在从机上配置需要复制的主机
已经准备了四台服务器,并且也开启了 Master1 和 Master2 的二进制日志,也开启了 Slave1 和 Slave2 的中继日志,也创建了 Master1 和 Master2 当中用于主从复制的账号。接下来就是让 Slave1 从 Master 1当中进行主从复制,Slave2 从 Master2 当中进行主从复制,接下来进行第六步操作,在从机上配置需要复制的主机。
1、Slave1 复制 Master1 , Slave2 复制 Master2
Slave1 指令:
CHANGE MASTER TO MASTER_HOST='192.168.192.157',
MASTER_USER='itcast',
MASTER_PASSWORD='itcast',
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=409;
①我们要执行这些指令,这些 sql 语句之前是见过的,就是要去设置当前这个从节点他的主节点是谁,主从复制的用户名和密码是什么,操作的日志是哪一个,日志的位置是什么,需要我们进行一个简单的编辑。158 他的主就是 157,所以先需要在 158 上登录 MySQL,mysql - u root - p,itcast,登录上来之后还需要改一个地方。现在是 mysql_bin.000001,位置 399,所以需要把 409 改为 399。操作完了接下来执行,执行的时候报错了,这告诉我们,要先停了之前的 slave,所以先要去执行 stop slave,接下来 reset smart,然后继续执行刚才的语句。
2、Slave2 指令
接下来需要在 Slave2,也就是 160 这台服务器上来执行下面的这条 SQL 语句。
CHANGE MASTER TO MASTER_HOST='192.168.192.159',
MASTER_USER='itcast',
MASTER_PASSWORD='itcast',
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=409;
①他的主机 159,密码 itcast。要来看一下他的日志情况,日志情况也是 399,所以还需要把 409 改为 399,然后复制在 160 上面进行一个执行。先需要去登录 mysql,mysql - u root - p,itcast
,执行这条指令。这两条指令都执行成功了,接下来需要开启复制功能,并且查看每个从节点的运行情况。
七、启动两台从服务器复制功能,查看主从复制运行状态
1、start slave
show slave status\G;
①在 158 执行 start slave,开始主从复制,160 也执行 start slave,现在已经开启了,接下来需要查看他们主从复制的状态。执行 show slave status\G
;,只要 Slave IO Running 和 Slave SQL Running 都是 yes,就说明主从复制的状态是正常的。在 160 上也执行 show slave status\G
;,这样的话就相当于 Master1 已经同步到 Slave1 了,Master2 也已经同步到 Slave2 了。之前在讲解 MySQL 双主双从的架构的时候说了 Master 1 和 Master2 互为备机,当 Master1 挂掉之后,Master2 是可以顶替 Master1 的,所以这两个互为备机,因此 Master1 和 Master2 需要互相同步,接下来配置双主之间的主从配置。
八、两个主机互为复制
1、Master2 复制 Master1, Master1 复制 Master2
Master1 执行指令:
CHANGE MASTER TO MASTER_HOST='192.168.192.159',
MASTER_USER="itcast",
MASTER_PASSWORD='itcast',
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG _POS=409;
①先需要再 Master1 157 上执行 159 的指令。157 它的主机是 159,只需要执行
CHANGE MASTER TO MASTER_HOST='192.168.192.159',
MASTER_USER='itcast',
MASTER_PASSWORD='itcast',
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=399;
所以应该在 157 上执行 159 的指令,执行完成之后,还需要在 159 上执行 157 的指令。
CHANGE MASTER TO MASTER_HOST='192.168.192.157',
MASTER_USER='itcast',
MASTER_PASSWORD='itcast',
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=399;
现在只是设置了两个主机之间的复制,还需要开启复制功能。
2、Master2 执行指令:
CHANGE MASTER TO MASTER_HOST='192.168.192.157',
MASTER_USER="itcast",
MASTER_PASSWORD='itcast',
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG _POS=409;
九、启动两台主服务器复制功能,查看主从复制运行状态
1、start slave
show slave status\G;
执行 start slave,开启之后执行 show slave status\G;查看主从复制运行状态。157 和 159 上面的 Slave IO Running 和 Slave SQL Running 都是 yes,主从复制运行状态正常。这样两台主机之间的复制功能就已经完成了。
十、验证
1、create database db03;
user db 03;
create table user(
id int(11) not null auto increment,
name varchar(50) not null.
sex varchar(1).
primary key(id)
) engine=innodb default charset=utf8;
insert into user(id, name, sex) values(null,'Tom','1');
insert into user(id, name, sex) values(null,'Trigger','0');
insert into user(id, name, sex) values(null,'Dawn','1');
insert into user(id, name, sex) values(null,'Jack Ma','1');
insert into user(id, name, sex) values(null,'CoCo,'0');
insert into user(id, name, sex) values(null,'Jerry','1');
①最后一步,验证。先查看四个数据库当中的信息,分别执行 show databases,157 和 158 有 db01,而 159 和 160 没有 db01。在 157 上执行 create database db03;
,创建了一个数据库
查看之后 158,159,160 上面都有 db03。是因为在 157 上创建,157 会同步到他的从节点,而 157 和 159 虽然都是主节点,但是他们两个相互复制,所以 157 也会同步到 159,而 159 是 160 的主节点,所以 159 的数据也会同步到 160,这是创建一个数据库。接下来切换数据库,切换数据库之后执行 use db03,切换之后再创建一张表,往表中插入数据,再来验证一下。创建 user 这张表 user 表创建好之后,往表结构当中插入几条记录,插入了三条记录,然后执行 select * from user
,这三条数据就有了。
同样,在 158 上执行 use db03,select * from user
,这样三条数据就有了。159 和 160 也是同样操作。
②注意刚才我们所做的操作都是在 157 上操作的,接下来在 159 上操作,看在 159 上执行相关语句是否会同步到 157。我们再插入一个数据 insert into user(id, name, sex) values(null,'Jack Ma','1');
,这次要插入的用户名是 Jack Ma,执行成功之后,查询用户,157、158、159、160 上都有 Jack Ma 四号用户。因为 157 和 159 都是主节点,他们会相互复制,当我们在 159 上面插入数据的时候,它会同步到 157,而 157 会同步到 158,159 插入之后会同步到160,。这是搭建双主双从的 MySQL 集群。
十一、停止从服务复制功能
1、stop slave
十二、重新配置主从关系
1、stop slave
2、reset master