Mycat基本介绍(三)

Mycat+mysql双主双从高可用读写分离实现

前面我们搭建了mycat实现一主一从读写分离,今天我们来搭建一个双主双从高可用的读写分离,抗风险能力强,企业级架构必须是双主双从
在这里插入图片描述
在这里插入图片描述
M1 S1 主从复制 M2 S2 主从复制; M1,M2 互为主从复制 实现数据同步;无论哪个挂掉,Mycat可以自动切换,依然系统可用;

我们来搭建两对Mysql主从复制;
前面我们搭建过一对,下面再搭建一对和之前的一样

 docker run -p 3308:3306 --name master2   -d  -v /home/mysql3/mysql.conf.d/:/etc/mysql/mysql.conf.d/ -v /home/mysql3/log/:/var/log --net extnetwork --ip 172.20.0.5  -e MYSQL_ROOT_PASSWORD=123456  镜像ID 
 docker run -p 3309:3306 --name slave2   -d  -v /home/mysql4/mysql.conf.d/:/etc/mysql/mysql.conf.d/ -v /home/mysql4/log/:/var/log --net extnetwork --ip 172.20.0.6 -e MYSQL_ROOT_PASSWORD=123456  镜像ID 

mysql3可以直接复制mysql1,mysql4可以直接复制mysql2的
m1,m2我们要加配置:涉及到数据插入id不冲突,以及数据同步;

# 在作为从数据库的时候,有写入操作也要更新二进制日志文件
log-slave-updates
#表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1 .. 65535
auto-increment-increment=2 
# 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
auto-increment-offset=1(这里m2中写成2)

m2 的 server-id=5
s2的 server-id=6

配置OK后,我们重新搭界主从复制;

m1 删除user里的原先slave用户,重新授权;

#删除user后要重新授权
FLUSH PRIVILEGES;

CREATE USER 'slave'@'172.20.0.%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'172.20.0.%';
FLUSH PRIVILEGES;

RESET MASTER

s1 配置主从复制;

CHANGE MASTER TO MASTER_HOST='172.20.0.2', MASTER_USER='slave', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;

START SLAVE

SHOW SLAVE STATUS 测试

m2 创建slave用户,授权

CREATE USER 'slave'@'172.20.0.%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'172.20.0.%';
FLUSH PRIVILEGES;

RESET MASTER

s2 配置主从复制;

CHANGE MASTER TO MASTER_HOST='172.20.0.5', MASTER_USER='slave', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;

START SLAVE

SHOW SLAVE STATUS 测试;

到此我们把两个主从给搭建好了,下面我们配置两个主之间的互为主从复制
m2复制m1配置;

#m1先reset
RESET MASTER

#m2里配置:
CHANGE MASTER TO MASTER_HOST='172.20.0.2', MASTER_USER='slave', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;

START SLAVE

SHOW SLAVE STATUS 测试

m1复制m2配置

#m2先rest
RESET MASTER

#m1里配置:
CHANGE MASTER TO MASTER_HOST='172.20.0.5', MASTER_USER='slave', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;

START SLAVE

SHOW SLAVE STATUS 测试;

两个主之间的互为主从复制已经完成,再加一个读写分离配置即可

<dataHost name="host1" maxCon="1000" minCon="10" balance="1"

         writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">

     <heartbeat>select user()</heartbeat>

     <!-- can have multi write hosts -->

     <writeHost host="hostM1" url="172.20.0.2:3306" user="root"

             password="123456">

       <readHost host="hostS1" url="172.20.0.3:3306" user="root"

             password="123456"/>   

     </writeHost>

    <writeHost host="hostM2" url="172.20.0.5:3306" user="root"

            password="123456">

       <readHost host="hostS2" url="172.20.0.6:3306" user="root"

            password="123456"/>     

    </writeHost>

     <!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->

  </dataHost>

m2 s2 注意IP别写错以及balance要改成1 现在是双主双从;

balance="1",全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡

我们搭建完成双主双从高可用读写分离,下面进行读写测试

insert into test values(null,@@hostname) 

执行会发现m1 s1 m2 s2都有数据;不断刷新表数据;会发现值从s1 m2 s2随机读取;可以判断m1是作为写主机的;

还有一个高可用测试:
假如我们让m1挂掉再执行

insert into test values(null,@@hostname) 

我们发现依然可以插入,m2 s2有值;说明mycat实现了自动切换主机功能;

如果我们恢复m1,这时候 我们测试发现 m2作为了写主机,m1 s1 s2成为了读主机;

到此我们Mycat+mysql双主双从高可用读写分离实现完成,有什么疑问欢迎留言评论,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值