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 上面
- 所有写操作均由第一个 write host 承担,第一个宕机再由第二个负担
- 所有的读操作在 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 重新加入,并且已经同步了数据