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 上面

 

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

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

 

<dataHost> 标签中配置 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"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

    <schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" 
            dataNode="dn1">
    </schema>
    <dataNode name="dn1" dataHost="2m2s" database="world" />
    <dataHost name="2m2s" maxCon="1000" minCon="10" balance="1"  
                    writeType="0" dbType="mysql" dbDriver="native" 
                    switchType="1"  slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <writeHost host="hostM1" url="192.168.0.100:3306" 
                user="root" password="123456">
            <readHost host="hostS1" url="192.168.0.101:3306" 
                    password="123456" user="root" />
        </writeHost>
        <writeHost host="hostM2" url="192.168.0.190:3306" 
                user="root" password="123456">
            <readHost host="hostS2" url="192.168.0.191:3306" 
                password="123456" user="root" />
        </writeHost>
    </dataHost>
</mycat:schema>

 
如上:
逻辑库依旧是 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 重新加入,并且已经同步了数据

posted @ 2022-05-06 13:36  牛顿撕鸡  阅读(393)  评论(0编辑  收藏  举报