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

零、说在前面

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

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

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

    mycat官网的任意门

    同时,本篇仅说方法和过程,问题集中在另一篇中汇总

一、规划

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

主机名
IP
CPU
内存
用途
备注
centos7One
192.168.122.21
2
4
主/写

Mysql/Redis/Mycat

centos7Two192.168.122.221
2
从/读
Mysql/Redis
centos7Three192.168.122.231
2
从/读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个,成功!

五、最后

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


发布了65 篇原创文章 · 获赞 50 · 访问量 34万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览