mycat读写分离

概念

MyCat作为中间件,它只是一个代理,本身并不进行数据存储,需要连接后端的MySQL物理服务器,此文件就是用来连接MySQL服务器的!
MyCAT 是使用 JAVA 语言进行编写开发,使用前需要先安装 JAVA 运行环境(JRE),由于 MyCAT 中使用了 JDK7 中的一些特性,所以要求必须在 JDK7 以上的版本上运行。

使用

1.jdk下载安装

可去官网下载jdk 包 并环境变量
安装后java -version 有版本号即配置成功

[root@mychat conf]# java -version
java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)

2.MyCat部署

解压MyCat软件包到/usr/local/下

[root@mychat conf]# tar xf Mycat-server-1.6.5-DEV-20161104230656-linux.tar.gz -C /usr/local/

3.配置Mycat

cd进入mycat目录后可以看到bin catlet conf lib logs tmlogs version.txt 这些文件

bin:这个目录包含了启动和停止 Mycat 服务的脚本。例如,startup.sh 用于启动 Mycat,shutdown.sh 用于停止 Mycat。

catlet:这个目录用于存放 Mycat 的 Catlet 插件。Catlet 是 Mycat 的一种插件机制,可以用来扩展 Mycat 的功能。

conf:这个目录包含了 Mycat 的配置文件,如 schema.xml、server.xml、rule.xml 等,这些文件控制着 Mycat 的运行行为。

lib:这个目录包含了 Mycat 运行所需的 Java 类库和依赖。

logs:这个目录用于存放 Mycat 的日志文件,如启动日志、运行时日志等。

tmlogs:这个目录通常用于存放 Mycat 的二进制日志文件,这些日志文件可以用于监控和分析。

version.txt:这个文件包含了 Mycat 的版本信息。

web:如果存在,这个目录包含了 Mycat 的 Web 管理界面相关的文件。

[root@mycat ~]# cd /usr/local/mycat/
[root@mycat mycat]# ls
bin  catlet  conf  lib  logs  tmlogs  version.txt

我们主要进入到conf目录中 关注两个文件分别为server.xml,schema.xml

[root@mycat mycat]# cd conf
[root@mycat conf]# ls
autopartition-long.txt      ehcache.xml                  partition-hash-int.txt   sequence_conf.properties              sharding-by-enum.txt
auto-sharding-long.txt      index_to_charset.properties  partition-range-mod.txt  sequence_db_conf.properties           wrapper.conf
auto-sharding-rang-mod.txt  log4j2.xml                   rule.xml                 sequence_distributed_conf.properties  zkconf
cacheservice.properties     migrateTables.properties     schema.xml               sequence_time_conf.properties         zkdownload
dnindex.properties          myid.properties              schema.xml.bak1          server.xml

server.xml配置

用户权限配置 (user 标签):
定义了用户的权限,包括可以访问的数据库、操作类型等。
例:
设置连接mycat时的用户名和密码, 逻辑库
这里的mychattest是逻辑库,并不是数据库中真实存在的,类似一个代号,前台连接到mycat后看到的是mychattest这个库,需要在schema.xml中定义
可配置多个用户,这个xml里面还有一些其他的参数这里用不着可以不配置

<user name="mycat">
        <property name="password">123456</property>
        <property name="schemas">mychattest</property>
</user>

完整

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
        <user name="root">
                <property name="password">123456</property>
                <property name="schemas">mychattest</property>
        </user>
</mycat:server>

schema.xml配置

<!--只做读写分离,不做分库分表,Mycat只是帮我们转发一下请求,读转发到从库,写转发到主库,则schema标签里面不用配置table-->
<schema name="mychattest" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"/>
<!--配置真实存在的物理数据库-->
<!--dataNode定义了Mycat中的数据节点,也就是我们通常说所的数据分片,一个dataNode标签就是一个独立的数据分片,通俗理解,一个分片就是一个物理数据库  />
<dataNode name="dn1" dataHost="localhost1" database="testdb" />

<dataHost name="localhost1"                       // 主机组
          maxCon="1000" minCon="10"               // 连接
          balance="0"                             // 负载均衡
          writeType="0"                           // 写模式配置
          dbType="mysql" dbDriver="native"        // 数据库配置
          switchType="1"  slaveThreshold="100">
<!--这里可以配置关于这个主机组的成员信息,和针对这些主机的健康检查语句-->
</dataHost>


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

writeType 属性
负载均衡类型
1. writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准.
2. writeType="1",所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐。
<!--这两个标签都指定后端数据库的相关配置给mycat,用于实例化后端连接池。唯一不同的是,writeHost指定写实例、readHost指定读实例,组合这些读写实例来满足系统的要求。
在一个dataHost内可以定义多个writeHost和readHost。但是,如果writeHost指定的后端数据库宕机,那么这个writeHost绑定的所有readHost都将不可用。另一方面,由于这个writeHost宕机系统会自动的检测到,并切换到备用的writeHost上去。-->
    <writeHost host="hostM1" url="192.168.29.129:3306" user="mychat" password="123456">
        <readHost host="hostS1" url="192.168.29.143:3306" user="mychat" password="123456" />
    </writeHost>
    <writeHost host="hostM2" url="192.168.29.142:3306" user="mychat" password="123456">
        <readHost host="hostS2" url="192.168.29.155:3306" user="mychat" password="123456" />
    </writeHost>
</dataHost>
</mycat:schema>

完整

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!--只做读写分离,不做分库分表,Mycat只是帮我们转发一下请求,读转发到从库,写转发到主库,则schema标签里面不用配置table-->
<schema name="mychattest" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"/>
<!--配置真实存在的物理数据库-->
<dataNode name="dn1" dataHost="localhost1" database="testdb" />

<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.29.129:3306" user="mychat" password="123456">
        <readHost host="hostS1" url="192.168.29.143:3306" user="mychat" password="123456" />
       <!--  <readHost host="hostM2" url="192.168.29.142:3306" user="root" password="123456" /> -->
    </writeHost>
    <writeHost host="hostM2" url="192.168.29.142:3306" user="mychat" password="123456">
        <readHost host="hostS2" url="192.168.29.155:3306" user="mychat" password="123456" />
  <!--      <readHost host="hostM1" url="192.168.29.129:3306" user="root" password="123456" /> -->
    </writeHost>
</dataHost>
</mycat:schema>

启动 mycat

[root@mycat ~]# /usr/local/mycat/bin/mycat  start

支持以下参数
start | restart |stop | status

用户授权

这里是从你的后端真实数据库机器上给刚刚 标签中配置的用户授权 这里的testdb也是你真实的db 中有配置

mysql> grant all on testdb.* to mycat@'%' identified by '123456';
mysql> flush privileges;

这里IP是你mycatip
[root@master~]# mysql -uroot -p123456 -h192.168.62.151 -P 8066

#  可以看出来这里的mychattest是之前配置逻辑库
MySQL [(none)]> show databases;
+----------+
| DATABASE |
+----------+
| mychattest|
+----------+
1 row in set (0.00 sec)
  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值