上传并解压MyCat

MyCat实现数据库高可用 - 图1

配置schema.xml文件

  1. <?xml version="1.0"?>
  2. <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
  3. <mycat:schema xmlns:mycat="http://io.mycat/">
  4. <!--name属性是自定义的 dataNode表示数据库的节点信息-->
  5. <schema name="jtdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="jtdb"/>
  6. <!--定义节点名称/节点主机/数据名称-->
  7. <dataNode name="jtdb" dataHost="localhost1" database="jtdb" />
  8. <!--参数介绍-->
  9. <!--balance 0表示所有的读操作都会发往writeHost主机 -->
  10. <!--1表示所有的读操作发往readHost和闲置的主节点中-->
  11. <!--writeType=0 所有的写操作都发往第一个writeHost主机-->
  12. <!--writeType=1 所有的写操作随机发往writeHost中-->
  13. <!--dbType 表示数据库类型 mysql/oracle-->
  14. <!--dbDriver="native" 固定参数 不变-->
  15. <!--switchType=-1 表示不自动切换, 主机宕机后不会自动切换从节点-->
  16. <!--switchType=1 表示会自动切换(默认值)如果第一个主节点宕机后,Mycat会进行3次心跳检测,如果3次都没有响应,则会自动切换到第二个主节点-->
  17. <!--并且会更新/conf/dnindex.properties文件的主节点信息 localhost1=0 表示第一个节点.该文件不要随意修改否则会出现大问题-->
  18. <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
  19. writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
  20. <heartbeat>select 1</heartbeat>
  21. <!--配置第一台主机主要进行写库操作,在默认的条件下Mycat主要操作第一台主机,其中已经实现了读写分离.因为默认写操作会发往133的数据库.读的操作默认发往134.如果从节点比较忙,则主节点分担部分压力.
  22. -->
  23. <writeHost host="hostM1" url="192.168.72.133:3306" user="root" password="root">
  24. <!--读数据库-->
  25. <readHost host="hostS1" url="192.168.72.134:3306" user="root" password="root" />
  26. </writeHost>
  27. <!--定义第二台主机 由于数据库内部已经实现了双机热备.-->
  28. <!--Mycat实现高可用.当第一个主机133宕机后.mycat会自动发出心跳检测.检测3次.-->
  29. <!--如果主机133没有给Mycat响应则判断主机死亡.则回启东第二台主机继续为用户提供服务.-->
  30. <!--如果133主机恢复之后则处于等待状态.如果134宕机则133再次持续为用户提供服务.-->
  31. <!--前提:实现双机热备.-->
  32. <writeHost host="hostM2" url="192.168.72.134:3306" user="root" password="root">
  33. <readHost host="hostS1" url="192.168.72.133:3306" user="root" password="root" />
  34. </writeHost>
  35. </dataHost>
  36. </mycat:schema>

配置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="nonePasswordLogin">0</property> <!-- 0为需要密码登陆、1为不需要密码登陆 ,默认为0-->
     <property name="useHandshakeV10">1</property>
     <property name="useSqlStat">0</property>  <!-- 1为开启实时统计、0为关闭 -->
     <property name="useGlobleTableCheck">0</property>  <!-- 1为开启全加班一致性检测、0为关闭 -->

         <property name="sequnceHandlerType">2</property>
             <!--  <property name="useCompression">1</property>--> <!--1为开启mysql压缩协议-->
                 <!--  <property name="fakeMySQLVersion">5.6.20</property>--> <!--设置模拟的MySQL版本号-->
     <!-- <property name="processorBufferChunk">40960</property> -->
     <!--
     <property name="processors">1</property>
     <property name="processorExecutor">32</property>
      -->
                 <!--默认为type 0: DirectByteBufferPool | type 1 ByteBufferArena | type 2 NettyBufferPool -->
         <property name="processorBufferPoolType">0</property>
         <!--默认是65535 64K 用于sql解析时最大文本长度 -->
         <!--<property name="maxStringLiteralLength">65535</property>-->
         <!--<property name="sequnceHandlerType">0</property>-->
         <!--<property name="backSocketNoDelay">1</property>-->
         <!--<property name="frontSocketNoDelay">1</property>-->
         <!--<property name="processorExecutor">16</property>-->
         <!--
             <property name="serverPort">8066</property> <property name="managerPort">9066</property>
             <property name="idleTimeout">300000</property> <property name="bindIp">0.0.0.0</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">1</property>

         <!--
             单位为m
         -->
                 <property name="memoryPageSize">64k</property>

         <!--
             单位为k
         -->
         <property name="spillsFileBufferSize">1k</property>

         <property name="useStreamOutput">0</property>

         <!--
             单位为m
         -->
         <property name="systemReserveMemorySize">384m</property>


         <!--是否采用zookeeper协调切换  -->
         <property name="useZKSwitch">true</property>

         <!-- XA Recovery Log日志路径 -->
         <!--<property name="XARecoveryLogBaseDir">./</property>-->

         <!-- XA Recovery Log日志名称 -->
         <!--<property name="XARecoveryLogBaseName">tmlog</property>-->

     </system>

     <!-- 全局SQL防火墙设置 -->
     <!--白名单可以使用通配符%或着*-->
     <!--例如<host host="127.0.0.*" user="root"/>-->
     <!--例如<host host="127.0.*" user="root"/>-->
     <!--例如<host host="127.*" user="root"/>-->
     <!--例如<host host="1*7.*" user="root"/>-->
     <!--这些配置情况下对于127.0.0.1都能以root账户登录-->
     <!--
     <firewall>
        <whitehost>
           <host host="1*7.0.0.*" user="root"/>
        </whitehost>
        <blacklist check="false">
        </blacklist>
     </firewall>
     -->
     <!--用户标签-->
     <user name="root">
         <property name="password">root</property>
         <!--与schema.xml中的配置相同 注意数据库的大小写-->
         <property name="schemas">jtdb</property>
     </user>

     <user name="user">
         <property name="password">user</property>
         <property name="schemas">jtdb</property>
         <property name="readOnly">true</property>
     </user>
 </mycat:server>

配置完成后上传

启动MyCat

  1. ./mycat start 启动
  2. ./mycat stop 停止
  3. ./mycat restart 重启
  4. ./mycat status 检测状态

MyCat实现数据库高可用 - 图2

报错检查,检查日志

MyCat实现数据库高可用 - 图3

测试数据库高可用

关闭A库

MyCat实现数据库高可用 - 图4

修改数据,然后重启A库

MyCat实现数据库高可用 - 图5

检查B库数据是否一致

MyCat实现数据库高可用 - 图6