Mycat 笔记 2:双主双从


1. 结构

192.168.0.100 ??? master1
192.168.0.101 ??? slave1
192.168.0.190 ??? master2
192.168.0.191 ??? slave2
192.168.0.170 ??? mycat

slave1 是 master1 的从库
slave2 是 master2 的从库
master1 和 master2 互为主从,

建议 mysql 实例是 gtid + semi sync + mts,或者 PXC,或者 MGR
此处演示为了方便采用普通异步复制。

2. 双主双从高可用

据说 mycat 推荐的底层节点架构是双主双从来保证高可用。

在 mycat 的配置中, 里面配置:

  • master1 为第一个 write host,
  • master2 为第二个 write host,也就是 stand for write host

如果 master1 宕机的话,因为有 switchType=1 会自动切换到 master2 上面

标签中配置 writeType=0,也就是:

  • 所有写操作均由第一个 write host 承担,第一个宕机再由第二个负担

标签中配置 balance=1,也就是:

  • 所有的读操作在 read host 和 stand for write host 之间负担

 
由此,在双主双从中,往 master1 写数据,从 master2、slave1、slave2 中读数据,
由此来实现高可用。

3. 双主双从的搭建

  • slave1 是 master1 的从库

  • slave2 是 master2 的从库

  • master1 和 master2 互为主从

    • master1 是 master2 的从库

    • master2 是 master1 的从库

搭建过程 略

4. mycat 的 schema.xml

<?xml version="1.0"?>



    
    
    
    
        select user()
        
            
        
        
            
        
    

 
如上:
逻辑库依旧是 TESTDB
对应的数据节点是 dn1
数据节点对应的主机组是 2m2s
2m2s 下:
hostM1 作为写节点(100),其从库 hostS1(101)作为读节点
hostM2 作为 stand by 写节点(190),其从库 hostS2(191)作为读节点

5. 启动 mycat 测试读写分离和高可用

(1)读写分离

 
写操作:

 
如上,写操作在 hostM1(100)上完成

 
读操作:

 
如上,
读操作分别在几个节点中进行,(并非轮询)

(2)高可用

先停掉 master1

再次查看读写分离

 
如上,
master1 宕机后,其从库 slave1 也不再参与到读中,

 

如上,写操作切换到 master2(190)

 
在 master1 宕机期间,插入一些数据,

 
还是建议写 use database; SQL; 的方式

 
重新启动 master1

 
master1 和 slave1 重新加入,并且已经同步了数据