centos8_中间件MyCat实现数据库读写分离

Mycat是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理(类似于Mysql Proxy),用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里.
Mycat 可以简单概括为:
*一个彻底开源的,面向企业应用开发的大数据库集群
*支持事务、ACID、可以替代MySQL的加强版数据库
*一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群
*一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server
*结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
*一个新颖的数据库中间件产品


环境准备:四台机器:10.0.0.8mycat服务器,10.0.0.18主数据库服务器,10.0.0.28从数据库服务器,10.0.0.7客户端.


安装mycat之前需要安装javaJDK,mycat包依赖java实现

[root@centos8 ~]#yum install -y java
[root@centos8 ~]#java -version
openjdk version "1.8.0_265"
OpenJDK Runtime Environment (build 1.8.0_265-b01)
OpenJDK 64-Bit Server VM (build 25.265-b01, mixed mode)

下载mycat官方下载地址:http://dl.mycat.org.cn/,打开选择Mycat-server-1.6.7.6-release-20210303094759-linux.tar.gz下载,或者直接执行wget

wget http://dl.mycat.org.cn/1.6.7.4/Mycat-server-1.6.7.4-release/Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz

创建apps文件夹存放mycat解压文件:

[root@centos8 ~]#mkdir /apps
[root@centos8 ~]#tar xvf Mycat-server-1.6.7.6-release-20210303094759-linux.tar.gz -C /apps
[root@centos8 ~]#tree /apps -d
/apps
└── mycat
    ├── bin
    ├── catlet
    ├── conf
    │   ├── zkconf
    │   └── zkdownload
    ├── lib
    ├── logs
    │   └── 2021-05
    └── tmlogs

10 directories
[root@centos8 ~]#echo 'PATH=/apps/mycat/bin:$PATH' > /etc/profile.d/mycat.sh
                     ##添加路径方便使用

通过修改mycat配置文件可修改8066端口为3306,符合用户连接默认端口,同时也可修 改用户连接密码: 当前配置文件:"/apps/mycat/conf/server.xml"
注:端口默认被注释,清除注释(清楚仔细点,比如有白色文字之类的)添加3306端口

 <!--默认为type 0: DirectByteBufferPool | type 1 ByteBufferArena | type 2 NettyBufferPool -->
        <property name="processorBufferPoolType">0</property>
        <!--默认是65535 64K 用于sql解析时最大文本长度 -->
        <!--<property name="maxStringLiteralLength">65535</property>-->
        <!--<property name="sequenceHandlerType">0</property>-->
        <!--<property name="backSocketNoDelay">1</property>-->
        <!--<property name="frontSocketNoDelay">1</property>-->
        <!--<property name="processorExecutor">16</property>-->
            <property name="serverPort">3306</property>   #3306端口
            <property name="managerPort">9066</property>
            <property name="idleTimeout">300000</property>
            <property name="authTimeout">15000</property>
            <property name="bindIp">0.0.0.0</property>
            <property name="dataNodeIdleCheckPeriod">300000</property>
            <property name="frontWriteQueueSize">4096</property> <property name="processors">32</property>
        <!--分布式事务开关,0为不过滤分布式事务,1为过滤分布式事务(如果分布式事务内只涉及全局表,则不过滤),2为不过滤分布式事务,但是记录分布式事务日志-->
        <property name="handleDistributedTransactions">0</property>

            <!--
            off heap for merge/order/group/limit      1开启   0关闭
        -->
        <property name="useOffHeapForMerge">0</property>

修改scheam.xml文件实现读写分离:文件内容参考如下

<?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" dataHost="localhost1" database="db1" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <writeHost host="host1" url="10.0.0.18:3306" user="root" password="passwd">  #mycat连接后端数据库用户为root,密码passwd
        <readHost host="host2" url="10.0.0.28:3306" user="root" password="passwd"/>
        </writeHost>
</dataHost>
</mycat:schema>
###写操作10.0.0.18数据库执行
###读操作在10.0.0.28数据库执行
注意:每个标签需成对,检查格式,才能保证mycat启动

此时需要在后端数据库创建mycat的连接账号并授权

MariaDB [(none)]> create user root@'10.0.0.%' identified by 'passwd';\
Query OK, 0 rows affected (0.000 sec)
MariaDB [db1]> grant all on *.* to root@'10.0.0.%';
Query OK, 0 rows affected (0.000 sec)

至此,数据库读写分离设置完成,用户访问数据库实则访问的是mycat客户端,mycat将用户操作传递给后端数据库并控制读写操作,写操作10.0.0.18机器负责,10.0.0.28负责读操作
例如,10.0.0.7客户端查看server_id,该操作是读,所以在28机器上执行:
在这里插入图片描述
注:
Mycat不适合的应用场景
设计使用Mycat时有非分片字段查询,请慎重使用Mycat,可以考虑放弃!
设计使用Mycat时有分页排序,请慎重使用Mycat,可以考虑放弃!
设计使用Mycat时如果要进行表JOIN操作,要确保两个表的关联字段具有相同的数据分布,否则请慎重使用Mycat,可以考虑放弃!
设计使用Mycat时如果有分布式事务,得先看是否得保证事务得强一致性,否则请慎重使用Mycat,可以考虑放弃!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值