vlambda博客
学习文章列表

mycat双主双从主从,主从复制和读写分离实现

1.准备与介绍





   由于前面前面已经介绍过了mycat的安装以及配置,这里就不在细说,如果下面对mycat的操作不是很清楚,可以看上一篇文章。


    前面介绍了单机单从模式,但是却存在一些问题,并不能高可用。例如我们的写主机宕机了,此时由于备机的数据都从主机获取的,肯定会出问题的,会导致整个系统只能读不能写;而双主双从就能解决这个问题,用一个备用主机,只要主机宕机,备机马上变成主机。有点类似于太子这个角色,只是不同的是即使主机现在恢复也不会马上又切回他,而是变为备用主机;平时的时候备用主机也充当读的机器。



mycat双主双从主从,主从复制和读写分离实现



准备4台虚拟机如下所示。

    192.168.247.130(主)

    192.168.247.132 (从)

    192.168.247.133(备用主)

    192.168.247.134(从)



2.配置双主双从复制模式



   修改两台主机的配置如下,由于两台机器随时都可能上位,所以和单主单从的配置不同的就是增加log-slave-updates,auto-increment-increment以及auto-increment-offset的配置。


   log-slave-update是有写操作的时候也更新日志

   auto-increment-increment是设置自增主键的起始值,防止主键冲突。

   auto-increment-offset是设置自增主键每次加的值,也就是步长,防止主键冲突




mycat双主双从主从,主从复制和读写分离实现



mycat双主双从主从,主从复制和读写分离实现



   两台从机的配置如下,和之前单机单从的一样,只是需要注意的是修改serve_id不要重复了。



mycat双主双从主从,主从复制和读写分离实现



mycat双主双从主从,主从复制和读写分离实现



   通过show master status命令查看两台主机的binlog文件,以及接入点。Binlog_Do_DB是在配置文件中指定的需要主从复制的库Binlog_Ignore_DB表示不需要复制的库



mycat双主双从主从,主从复制和读写分离实现



mycat双主双从主从,主从复制和读写分离实现



   在两台主机上执行如下命令,分配一个主从复制的用户,用于进行主从复制。

  GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123123';



   然后在两个从库的mysql中执行如下命令,由于我们是双主双从,所以需要将ip指定对应的主机ip,每个从机指定不同的主机ip,然后指定用户名和密码,以及mysql-bin文件(上面已经查询出来了),以及接入点。

   

   如果你之前配置过了,需要先stop slave,然后再reset slave方可重新配置。

 

mycat双主双从主从,主从复制和读写分离实现    



mycat双主双从主从,主从复制和读写分离实现

mycat双主双从主从,主从复制和读写分离实现



   通过start slave;启动两个从机,然后通过show slave status\G查看是否配置成功,当Slave_IO_Running和Slave_SQL_Running都为YES表示配置成功



mycat双主双从主从,主从复制和读写分离实现



mycat双主双从主从,主从复制和读写分离实现



   配置完两个从机后,开始配置两个主机互相复制,为什么要配置主机互相复制呢?原因是我们这的双主双从并不是双写的,也就是实际上写入的时候只有一个。还有如果其中一个主机宕机,肯定新上位的主机数据要一直的才行。



mycat双主双从主从,主从复制和读写分离实现



mycat双主双从主从,主从复制和读写分离实现



   同样配置完成后使用start slave 然后通过show slave status\G查看状态是否都为yes,为yes表示成功。



mycat双主双从主从,主从复制和读写分离实现



mycat双主双从主从,主从复制和读写分离实现



   此时双主双从的主从模式已经搭建完毕,当在主机上插入一条数据,此时可以看到其余3台上面都有了相应的数据



mycat双主双从主从,主从复制和读写分离实现



mycat双主双从主从,主从复制和读写分离实现



mycat双主双从主从,主从复制和读写分离实现



mycat双主双从主从,主从复制和读写分离实现



2.双主双从读写分离



   下面是实现读写分离,借助mycat,mycat的安装和配置可以详细参考上一篇文章。

    打开mycat的配置文件schema.xml由于是两个主机两个从机,所以配置好两个主机从机的用户名和密码以及ip端口。同时设置balance为1switchType为1,writeType为0,由于默认就是0所以不需要更改。




mycat双主双从主从,主从复制和读写分离实现



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 表示不自动切换# 

     2 基于 MySQL 主从同步的状态决定是否切换。



writeType介绍如下


    writeType="0": 所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个

    writeType="1",所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐



    配置完毕以后进入到mycat的安装目录的bin下面执行./mycat启动mycat



mycat双主双从主从,主从复制和读写分离实现



    此时查询数据可以看到从不同的服务器来的数据了



mycat双主双从主从,主从复制和读写分离实现



    测试一下如果主机宕机,将第一台130ip的mysql进行关闭,查看能否插入数据,可以看到还是可以插入说明备用主机已经进行切换了。



mycat双主双从主从,主从复制和读写分离实现



mycat双主双从主从,主从复制和读写分离实现



    再此重新启动130的mysql,可以发现现在的查询走130,132,134了,说明130已经变成了备用主机。





最后如果mycat配置已经安装等不太明白,可以先看一下上一篇文章。


1.各大培训机构,价格10万的视频 Java架构师视频免费送。


2.各种电子书籍经典Java书籍免费送


3.个人技术总结免费赠送