zoukankan      html  css  js  c++  java
  • Mycat详解及配置读写分离(Centos7)

    一.理论概述

    • 原理简述
      参考文档
      MyCAT主要是通过对SQL的拦截,然后经过一定规则的分片解析、路由分析、读写分离分析、缓存分析等,然后将SQL发给后端真实的数据块,并将返回的结果做适当处理返回给客户端。

    • 功能简述

    1. 对数据库分片
      通过设置条件,将统一数据库中的数据分散的存储到多个数据库中,达到负载均衡的效果
    2. 水平拆分
      同一张表的不同记录,根据表的某个字段的某种规则拆分到多个数据库(主机)上,这既是水平拆分。单库业务表可能会过于庞大,存在单库读写与存储瓶颈,这种情况可以通过水平拆分解决
    3. 垂直拆分
      不同的表切分到不同的数据库(主机)上,这就是垂直拆分。
      一般按照业务表进行分类,划分为不同的业务、模块库,耦合度越低,越容易做垂直拆分
    4. 读写分离

    mycat功能也比较强大,本案例只是针对于读写分离进行测试

    二.环境

    ip 角色
    192.168.111.8 mycat
    192.168.111.100 写动作数据库
    192.168.111.200 读操作数据库

    三.部署

    官网地址:http://www.mycat.io/

    下载地址:http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

    文档地址:http://www.mycat.io/document/Mycat_V1.6.0.pdf

    • 部署mycat
    [root@localhost ~]# tar zxf jdk-8u191-linux-x64.tar.gz 
    [root@localhost ~]# mv jdk1.8.0_191/ /usr/local/java8
    
    [root@localhost ~]# rm -rf /usr/bin/java
    
    [root@localhost ~]# echo 'export JAVA_HOME=/usr/local/java8' >> /etc/profile
    [root@localhost ~]# echo 'PATH=$PATH:/usr/local/java8/bin' >> /etc/profile
    [root@localhost ~]# source /etc/profile
    [root@localhost ~]# java -version
    java version "1.8.0_191"
    Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
    Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
    
    [root@localhost ~]# tar zxf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/
    
    [root@localhost ~]# groupadd mycat
    [root@localhost ~]# useradd -r -g mycat mycat
    [root@localhost ~]# chown -R mycat.mycat /usr/local/mycat/
    
    #下面是添加环境变量
    [root@localhost ~]# echo 'PATH=$PATH:/usr/local/mycat/bin' >> /etc/profile
    [root@localhost ~]# source /etc/profile
    
    [root@localhost ~]# tar zxf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local
    
    [root@localhost ~]# vim /usr/local/mycat/conf/server.xml 
    
     80         <user name="root"> #连接mycat的用户名
     81                 <property name="password">123456</property> #连接mycat对应的密码
     82                 <property name="schemas">test</property> #使用该用户名登录时,是用哪个数据库,这里写的是逻辑库名,在scheme.xml中会与物理库库名关联起来
    
    
    94 <!--
    95         <user name="user">
    96                 <property name="password">user</property>
    97                 <property name="schemas">TESTDB</property>
    98                 <property name="readOnly">true</property>
    99         </user>
    100 -->
    #将这些注释掉,暂时用不到,我们只用上面一个用户
    
    #这个配置文件就这些
    
    5         <schema name="test" checkSQLschema="false" sqlMaxLimit="100">
      6           <table name="test1" dataNode="dn1"/>
      7           <table name="test2" dataNode="dn1"/>
      8           <table name="test3" dataNode="dn1"/>
      9           <table name="test4" dataNode="dn1"/>
     10           <table name="test5" dataNode="dn1"/>
     11         </schema>
    #这些是提前定义的表,将这些表都写入dn1,dn1主机在下面配置文件会定义
    
     14         <dataNode name="dn1" dataHost="test1" database="test" />
     #database指定物理数据库的库名,将dn1,关联到test1,test1在下面配置文件定义
     
     15         <dataHost name="test1" maxCon="1000" minCon="10" balance="1"
     16                           writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
     #name:物理数据库名,与dataNode中dataHost对应
     #calance:均衡负载的方式;1表示开启读写分离
     #dbType:数据库类型
     #writeType:写入方式
     
     17                 <heartbeat>select user();</heartbeat>
     #heartbeat:心跳检测语句,注意语句结尾的分号要加。
     
     18                 <writeHost host="hostM1" url="192.168.111.100:3306" user="root"
     19                                    password="123456">
     20                     
     21                         <readHost host="hostS2" url="192.168.111.200:3306" user="root" password="123456" />
     22                 </writeHost>
     24         </dataHost>
    #以上配置达到的效果就是192.168.111.100为主库,192.168.111.200为从库。
    #Mycat主从分离只是在读的时候做了处理,写入数据的时候,只会写入到writehost,需要通过mycat的主从复制将数据复制到readhost
    
    
    
    [root@localhost ~]# /usr/local/mycat/bin/mycat start
    #启动服务
    
    [root@localhost ~]# netstat -lnpt | grep 8066
    tcp6       0      0 :::8066                 :::*                    LISTEN      60034/java    
    
    [root@localhost ~]# yum -y install mariadb
    [root@localhost ~]# mysql -u root -p123456 -h192.168.111.8 -P8066
    #安装mysql工具,进行测试一下
    
    [root@localhost ~]# mysql -u root -p123456 -h192.168.111.8 -P8066
    
    
    MySQL [(none)]> 
    
    
    

    暂时完结...

  • 相关阅读:
    Word中封面的问题
    UML问题
    《十八岁的天空》有感
    SPSS相关和回归分析
    WinForm自定义验证控件
    .NET常用的扩展方法整理
    C# 对JS编码/解码进行转换
    Jquery AJAX 调用WebService服务
    多条件动态LINQ 组合查询
    Visual studio 2008 的语法高亮插件 WordLight
  • 原文地址:https://www.cnblogs.com/jojoword/p/10898827.html
Copyright © 2011-2022 走看看