mycat搭建读写分离

mycat搭建读写分离

摘自:https://www.cnblogs.com/youzhibing/p/9553766.html
之前安装过MySQL与MySQL的主从复制现在就不演示了
mycat是基于jdk的所以要先安装jdk,版本一定要高7以上。
先下载mycat的tar包
http://www.mycat.org.cn/

在这里插入图片描述
如图所示,writeHost表示主节点,readHost表示从节点,Mycat内部定期对一个dataHost里所有的writeHost与readHost节点发起心跳检测(writeHost与readHost都可以配置多个,至于数据同步的问题则需要我们从mysql层面实现了,Mycat并不提供数据同步的支持,本文只讲mysql一主一从),正常情况下,Mycat会将第一个writeHost作为写节点,所有的DML SQL会发送给此节点,若Mycat开启了读写分离,则Select SQL会根据读写分离策略发往readHost(+writeHost)执行。当一个dataHost里面配置了多个writeHost时,如果第一个writeHost宕机,则Mycat会在默认的3次心跳检查失败后,自动切换到下一个可用的writeHost,以此类推。

这存在一个问题,就是当宕机的writeHost恢复后,怎么重新加入Mycat,要不要恢复为原来的写节点? 最佳建议方式是:保持现有状态不变,改旗易帜,恢复后的mysql节点作为从节点,跟随新的主节点,重新配置主从同步,原来跟随该节点做同步的从节点也同样换帅,重新配置同步源,这些节点的数据手工完成同步后,再加入Mycat里。

[root@centos212 opt]# cp Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz -C /usr/local
[root@centos212 local]# useradd mycat
[root@centos212 local]# chown -R mycat:mycat /usr/local/mycat
[root@centos212 local]# passwd mycat

将MyCat配置到环境变量中

[root@centos212 local]# vi /etc/profile

增加如下内容

MYCAT_HOME=/usr/local/mycat
PATH=$MYCAT_HOME/bin:$PATH

在这里插入图片描述
保存后退出,执行source命令使配置生效

[root@centos212 local]# source /etc/profile

配置mycat
只需要简单配置下schema.xml
a. balance 属性负载均衡类型,目前的取值有 4 种:

  1. balance=“0”, 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
  2. balance=“1”,全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1 ->S1 , M2->S2,并且 M1 与 M2 互为主备),正常情况下, M2,S1,S2 都参与 select 语句的负载均衡。
  3. balance=“2”,所有读操作都随机的在 writeHost、 readhost 上分发。
  4. balance=“3”, 所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力,注意 balance=3 只在 1.4 及其以后版本有, 1.3 没有。

b. writeType 属性
负载均衡类型,目前的取值有 3 种:

  1. writeType=“0”, 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个
    writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
  2. writeType=“1”,所有写操作都随机的发送到配置的 writeHost。
  3. writeType=“2”,没实现。

c. switchType 属性

  • -1 表示不自动切换
  • 1 默认值,自动切换
  • 2 基于MySQL 主从同步的状态决定是否切换
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
				<!-- 虚拟库名称 -->                                        
    <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
    </schema>
    <!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743"
        /> -->                                         <!-- 真实库名称 -->
    <dataNode name="dn1" dataHost="localhost1" database="math" />
    <dataHost name="localhost1" maxCon="1000" minCon="10" balance="3"
              writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <writeHost host="hostM1" url="192.168.31.113:3306" user="root" password="123456">
            <readHost host="hostS1" url="192.168.31.114:3306" user="root" password="123456" />    <!-- 读写分离; 写走hostM1,读走hostS1; hostM1宕机了, hostS1也不可用 -->
        </writeHost>
    </dataHost>
</mycat:schema>

这里只需要改database的名字 db1 就是你真实数据库服务上的数据库名 .
根据你自己的数据库名进行修改.

修改server.xml
vi /server.xml
拉倒最后面修改mycat的登录用户名或密码与MySQL做于区分
在这里插入图片描述
修改保存后到mycat的bin目录中输入

./mycat console

./mycat console是可以查看启动日志的可以看到哪里出现了错误便于修改
如果启动没有问题可以使用mycat start
启动后可以再进行测试一下读写分离与主从复制

我这里使用了2台Linux因为113安装master与mycat,114安装slave
注意在这里插入图片描述
mycat的端口号为8066在这里插入图片描述

一切就绪就可以测试了
可以在113的mycat中写入数据
到113的MySQL中查看是否写入,
在114中也查看是否同步。

查看读写分离也可以将MySQL的主从复制关掉,直接测试mycat的读写分离
也可以是手动的修改113上的数据,在修改114上的数据让两个数据不一致,在再113mycat上查看到底是读的那个数据源上的数据。

嗯~在测试中springboot+jpa的时候遇到了一点问题,是jpa本身的事务导致mycat在读写时都走了master写库,可以将jpa的事务关掉就可以了。

/**
 * 关闭jpamor默认事务
 */
@EnableJpaRepositories(basePackages = "com.albd.math", enableDefaultTransactions = false)
@Configuration
public class JpaTransactionConfig {
}

摘自: https://www.cnblogs.com/youzhibing/p/9553766.html

有写的不对或有问题的希望评论
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值