安装Centos7 、 Mysql8 集群,实现读写分离 高可用(四)-- MyCat读写分离

本文详细介绍了使用Mycat实现MySQL读写分离的过程,包括环境搭建、配置修改及启动验证等关键步骤。

零、说在前面

    先吐个槽,这点东西折腾了我四五天,最后还是一条告警拯救了我,下面进入正文

    看了几个MySQL的读写分离的中间件,貌似这个是比较流行的一个,虽然我不是BAT的粉丝,但是有好用的也可以拿过来用用

    这东西的介绍我就不多说了,感兴趣的诸位可以去它的官网看看,而且它上面有简易文档提供下载,大家请自行阅读吧

 本系列的各篇链接如下

编号标题
1、(一)-- 操作系统安装篇
2、(二)-- 数据库安装篇
3、(三)-- 主从设置
4、(四)-- MyCat读写分离
5、(五)-- MyCat配置详解

一、规划

    1:在原有的21服务器上,部署Mycat

主机名IPCPU内存用途备注
centos7One192.168.122.2124主/写

Mysql/Redis/Mycat

centos7Two192.168.122.2212从/读Mysql/Redis
centos7Three192.168.122.2312从/读Mysql/Redis(暂空)

     令21作为写服务器,22作为读服务器存在。23暂时不用

        

二、下载安装

    1:安装JKD

        既然操作系统都是Centos7了,那么jdk起码也得1.8才像话吧。二话不说下载安装

        jdk1.8下载地址  我下的是gz压缩包

        具体过程不细说了,下载后,解压,然后修改/etc/profile文件,添加以下内容

#设置java的环境变量
JAVA_HOME=/usr/local/jdk1.8
JRE_HOME=$JAVA_HOME/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH

        然后source /etc/profile就可以让环境变量生效

        再执行java -version,如果可以成功看到java的版本信息,那么你的java环境就配置成功了。否则。。重启试试吧。。

        但是我的1.8jdk有问题了,没有解决,所以改成1.7版本的jdk

       

    2:安装Mycat

        同理,这个我也是下载的gz格式的压缩包,将压缩包放到/usr/local路径下,解压缩

        得到一个名为“mycat”的文件夹,如下图所示

      

        然后修改/etc/profile文件,在最后面加上这样如下内容

#设置mycat的目录
export MYCAT_HOME=/usr/local/mycat
        然后source /etc/profile使配置生效。
        到这里,进入/usr/local/mycat/bin下面,就可以执行 ./mycat start启动mycat了。

        

三、修改配置

        仅仅上面的程度不算完,还需要修改两个重要的配置文件 server.xml和schema.xml

        前者之中,只需要添加用户即可,其他配置我暂时没做任何修改

        后者需要根据你的需要(比如是分片还是读写分离)来配置

        其他暂时无用的内容可以不用管,下面是我的样例

        server.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- - - Licensed under the Apache License, Version 2.0 (the "License"); 
        - you may not use this file except in compliance with the License. - You 
        may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 
        - - Unless required by applicable law or agreed to in writing, software - 
        distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT 
        WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the 
        License for the specific language governing permissions and - limitations 
        under the License. -->
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
        <system>
            <property name="useSqlStat">0</property>
            <property name="useGlobleTableCheck">0</property>
            <property name="sequnceHandlerType">2</property>
            <property name="processorBufferPoolType">0</property>
            <property name="handleDistributedTransactions">0</property>
            <property name="useOffHeapForMerge">1</property>
            <property name="memoryPageSize">1m</property>
            <property name="spillsFileBufferSize">1k</property>
            <property name="useStreamOutput">0</property>
            <property name="systemReserveMemorySize">384m</property>
            <property name="useZKSwitch">true</property>
        </system>
        <user name="root">                                 <!-- 这里的账号和密码与你的数据库的一致即可 -->
            <property name="password">987654</property>
            <property name="schemas">TESTDB</property>     <!-- 这里的TESTDB的名字可以随意写,只需与schema.xml中的一致即可 -->
        </user>
</mycat:server>

    schema.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
        
    <!-- 这里的name属性的值TESTDB与上面server.xml中的一致即可,
        sqlMaxLimit属性代表每次只查询前n条符合条件的记录,避免全表扫描 -->
    <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
        <!-- 下面名叫“t_a1”的表是在我的库中真实存在的一个表,
            同时,下面的dataNode属性的值对应的是下面dataNode标签的name属性的值 -->
        <table name="t_a1" primaryKey="ID" type="global" dataNode="dn1" />
    </schema>
    
    <!-- dataNode标签的主要作用是指明对哪一个数据库进行操作和管理,
        其中的dataHost属性对应的下面dataHost标签的name属性的值 -->
    <dataNode name="dn1" dataHost="localhost1" database="xxtest" />    
    
    <!-- 下面的localhost1的名字是随便取的,balance=1表示读写分离、
            writeType=0表示写操作集中到第一个写数据库
            switchType=1代表自动切换 -->
    <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
        writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
        
        <!-- 检测心跳的方法,可以用下面的语句,也可以用其他的 -->
        <heartbeat>select user()</heartbeat>

        <!-- 下面是读和写的mysql的ip和端口,以及登录的账号和密码。 -->
        <writeHost host="hostM1" url="192.168.122.21:3306" user="root" password="987654">
            <readHost host="hostS2" url="192.168.122.22:3306" user="root" password="987654" />
        </writeHost>
    </dataHost>
</mycat:schema>

一般来说,配置写成上面的样子,应该就可以启动起来mycat了。

为了方便对比,我把我的数据库的情况也放上来,大家对比一下就更容易明白了

四、启动

    配置无误,启动一下看看,如果看到类似下面的截图,说明你成功了

    初始化十个线程,success了10个,成功!

五、最后

    还有一些配置上的说明和我遇到的问题,会在后面单独拿出来讲

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值