Mycat读写分离实践

 

安装mycat

解压mycat的安装包

 

(可以省略)设置mycat的环境变量

 vi /etc/profile

 

使配置文件立即生效

source /etc/profile

 

修改server.xml

<user name="root" defaultAccount="true">
      <property name="password">123456</property>
      <property name="schemas">basemytest</property>
 </user>

 <user name="user">
      <property name="password">user</property>
      <property name="schemas">basemytest</property>
      <property name="readOnly">true</property>
 </user>


 

修改schema.xml,如果分库分表,增加相应的node节点即可

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

 <schema name="basemytest" checkSQLschema="false" sqlMaxLimit="100">
      <table name="tb_user" dataNode="dn1" rule="rule1" />
 </schema>
 <!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743"
  /> -->
 <dataNode name="dn1" dataHost="localhost1" database="mytest" />

 <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
     writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
  <heartbeat>select user()</heartbeat>
  <writeHost host="hostM1" url="192.168.226.128:3306" user="root"
       password="123456">
   <readHost host="hostS1" url="192.168.226.130:3306" user="root" password="123456" />
  </writeHost>
 </dataHost>
</mycat:schema>

table的rule属性是分片规则

dataNode的database是实际物理数据库的名字

 

 配置分片规则rule.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:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">
 <tableRule name="rule1">
  <rule>
   <columns>id</columns>
   <algorithm>func1</algorithm>
  </rule>
 </tableRule>

 <tableRule name="rule2">
  <rule>
   <columns>user_id</columns>
   <algorithm>func1</algorithm>
  </rule>
 </tableRule>

 <tableRule name="sharding-by-intfile">
  <rule>
   <columns>sharding_id</columns>
   <algorithm>hash-int</algorithm>
  </rule>
 </tableRule>
 <tableRule name="auto-sharding-long">
  <rule>
   <columns>id</columns>
   <algorithm>rang-long</algorithm>
  </rule>
 </tableRule>
 <tableRule name="mod-long">
  <rule>
   <columns>id</columns>
   <algorithm>mod-long</algorithm>
  </rule>
 </tableRule>
 <tableRule name="sharding-by-murmur">
  <rule>
   <columns>id</columns>
   <algorithm>murmur</algorithm>
  </rule>
 </tableRule>
 <tableRule name="crc32slot">
  <rule>
   <columns>id</columns>
   <algorithm>crc32slot</algorithm>
  </rule>
 </tableRule>
 <tableRule name="sharding-by-month">
  <rule>
   <columns>create_time</columns>
   <algorithm>partbymonth</algorithm>
  </rule>
 </tableRule>
 <tableRule name="latest-month-calldate">
  <rule>
   <columns>calldate</columns>
   <algorithm>latestMonth</algorithm>
  </rule>
 </tableRule>

 <tableRule name="auto-sharding-rang-mod">
  <rule>
   <columns>id</columns>
   <algorithm>rang-mod</algorithm>
  </rule>
 </tableRule>

 <tableRule name="jch">
  <rule>
   <columns>id</columns>
   <algorithm>jump-consistent-hash</algorithm>
  </rule>
 </tableRule>

 <function name="murmur"
  class="io.mycat.route.function.PartitionByMurmurHash">
  <property name="seed">0</property><!-- 默认是0 -->
  <property name="count">2</property><!-- 要分片的数据库节点数量,必须指定,否则没法分片 -->
  <property name="virtualBucketTimes">160</property><!-- 一个实际的数据库节点被映射为这么多虚拟节点,默认是160倍,也就是虚拟节点数是物理节点数的160倍 -->
  <!-- <property name="weightMapFile">weightMapFile</property> 节点的权重,没有指定权重的节点默认是1。以properties文件的格式填写,以从0开始到count-1的整数值也就是节点索引为key,以节点权重值为值。所有权重值必须是正整数,否则以1代替 -->
  <!-- <property name="bucketMapPath">/etc/mycat/bucketMapPath</property> 
   用于测试时观察各物理节点与虚拟节点的分布情况,如果指定了这个属性,会把虚拟节点的murmur hash值与物理节点的映射按行输出到这个文件,没有默认值,如果不指定,就不会输出任何东西 -->
 </function>

 <function name="crc32slot"
     class="io.mycat.route.function.PartitionByCRC32PreSlot">
 </function>
 <function name="hash-int"
  class="io.mycat.route.function.PartitionByFileMap">
  <property name="mapFile">partition-hash-int.txt</property>
 </function>
 <function name="rang-long"
  class="io.mycat.route.function.AutoPartitionByLong">
  <property name="mapFile">autopartition-long.txt</property>
 </function>
 <function name="mod-long" class="io.mycat.route.function.PartitionByMod">
  <!-- how many data nodes -->
  <property name="count">3</property>
 </function>

 <function name="func1" class="io.mycat.route.function.PartitionByLong">
  <property name="partitionCount">8</property>
  <property name="partitionLength">128</property>
 </function>
 <function name="latestMonth"
  class="io.mycat.route.function.LatestMonthPartion">
  <property name="splitOneDay">24</property>
 </function>
 <function name="partbymonth"
  class="io.mycat.route.function.PartitionByMonth">
  <property name="dateFormat">yyyy-MM-dd</property>
  <property name="sBeginDate">2015-01-01</property>
 </function>

 <function name="rang-mod" class="io.mycat.route.function.PartitionByRangeMod">
         <property name="mapFile">partition-range-mod.txt</property>
 </function>

 <function name="jump-consistent-hash" class="io.mycat.route.function.PartitionByJumpConsistentHash">
  <property name="totalBuckets">3</property>
 </function>
</mycat:rule>

 

 

关闭防火墙或者修改防火墙,允许mycat的端口被外界访问

关闭防火墙指令:

service iptables stop

 

或者

编辑:

 vi /etc/sysconfig/iptables

 -A INPUT -m state --state NEW -m tcp -p tcp --dport 8066 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 9066 -j ACCEPT

 

然后重启防火墙

service iptables restart

 

运行启动命令

cd /usr/local/mycat/bin/

 ./mycat start

 

查看mycat是否启动成功

./mycat status

 

 

查看启动日志:

cat ../logs/wrapper.log

如果报Jvm的堆内存大小异常Invalid maximum heap size: -Xmx4G;可以如下:

vi ../conf/wrapper.conf 修改36行的-Xmx4G可以修改为-Xmx1G

 

 

测试

接下来我们测试一下读写分离

使用mysql客户端连接或者navicat来连接mycat,密码是server.xml中的密码,端口是8066

 

查看mycat日志

cd /usr/local/mycat/logs/

tail -f mycat.log

 

 

先测试一下读操作

我们连接到mycat发送一句select *命令试试

 

可以看到select 操作被路由到了192.168.226.130也就是我们的slave(读)节点

那么我们执行多次看看

 

接下来我们测试一下写操作

 

可见插入被路由到了master节点

最后我们看看master的数据是否成功

 

 

被同步到slave

记录成功的同步过来了,可见读写分离搭建成功。

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值