mycat双主双从主从,主从复制和读写分离实现
由于前面前面已经介绍过了mycat的安装以及配置,这里就不在细说,如果下面对mycat的操作不是很清楚,可以看上一篇文章。
前面介绍了单机单从模式,但是却存在一些问题,并不能高可用。例如我们的写主机宕机了,此时由于备机的数据都从主机获取的,肯定会出问题的,会导致整个系统只能读不能写;而双主双从就能解决这个问题,用一个备用主机,只要主机宕机,备机马上变成主机。有点类似于太子这个角色,只是不同的是即使主机现在恢复也不会马上又切回他,而是变为备用主机;平时的时候备用主机也充当读的机器。
准备4台虚拟机,如下所示。
192.168.247.130(主)
192.168.247.132 (从)
192.168.247.133(备用主)
192.168.247.134(从)
修改两台主机的配置如下,由于两台机器随时都可能上位,所以和单主单从的配置不同的就是增加log-slave-updates,auto-increment-increment以及auto-increment-offset的配置。
log-slave-update是有写操作的时候也更新日志。
auto-increment-increment是设置自增主键的起始值,防止主键冲突。
auto-increment-offset是设置自增主键每次加的值,也就是步长,防止主键冲突。
两台从机的配置如下,和之前单机单从的一样,只是需要注意的是修改serve_id不要重复了。
通过show master status命令查看两台主机的binlog文件,以及接入点。Binlog_Do_DB是在配置文件中指定的需要主从复制的库。Binlog_Ignore_DB表示不需要复制的库。
在两台主机上执行如下命令,分配一个主从复制的用户,用于进行主从复制。
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123123';
然后在两个从库的mysql中执行如下命令,由于我们是双主双从,所以需要将ip指定对应的主机ip,每个从机指定不同的主机ip,然后指定用户名和密码,以及mysql-bin文件(上面已经查询出来了),以及接入点。
如果你之前配置过了,需要先stop slave,然后再reset slave方可重新配置。
通过start slave;启动两个从机,然后通过show slave status\G查看是否配置成功,当Slave_IO_Running和Slave_SQL_Running都为YES表示配置成功。
配置完两个从机后,开始配置两个主机互相复制,为什么要配置主机互相复制呢?原因是我们这的双主双从并不是双写的,也就是实际上写入的时候只有一个。还有如果其中一个主机宕机,肯定新上位的主机数据要一直的才行。
同样配置完成后使用start slave 然后通过show slave status\G查看状态是否都为yes,为yes表示成功。
此时双主双从的主从模式已经搭建完毕,当在主机上插入一条数据,此时可以看到其余3台上面都有了相应的数据
下面是实现读写分离,借助mycat,mycat的安装和配置可以详细参考上一篇文章。
打开mycat的配置文件schema.xml由于是两个主机两个从机,所以配置好两个主机从机的用户名和密码以及ip端口。同时设置balance为1,switchType为1,writeType为0,由于默认就是0所以不需要更改。
blance介绍如下
balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
balance="1",全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。
balance="2",所有读操作都随机的在 writeHost、readhost 上分发。
balance="3",所有读请求随机的分发到 readhost 执行,writerHost 不负担读压力
switchType介绍如下
1 默认值,自动切换。
-1 表示不自动切换#
2 基于 MySQL 主从同步的状态决定是否切换。
writeType介绍如下
writeType="0": 所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个
writeType="1",所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐。
配置完毕以后进入到mycat的安装目录的bin下面执行./mycat启动mycat
此时查询数据可以看到从不同的服务器来的数据了
测试一下如果主机宕机,将第一台130ip的mysql进行关闭,查看能否插入数据,可以看到还是可以插入说明备用主机已经进行切换了。
再此重新启动130的mysql,可以发现现在的查询走130,132,134了,说明130已经变成了备用主机。
最后如果mycat配置已经安装等不太明白,可以先看一下上一篇文章。
1.各大培训机构,价格10万的视频 Java架构师视频免费送。
2.各种电子书籍经典Java书籍免费送
3.个人技术总结免费赠送