zoukankan      html  css  js  c++  java
  • mycat分库读写分离原理

    mycat的配置文件schema.xml

    <table name="employee" primaryKey="ID" dataNode="dn1,dn2"  rule="sharding-by-intfile" />
    
    <dataNode name="dn1" dataHost="localhost1" database="db1" />
    <dataNode name="dn2" dataHost="localhost2" database="db1" />
    
    <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
    writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
    <heartbeat>select user()</heartbeat>
    <!-- can have multi write hosts -->
    <writeHost host="hostM1" url="ip1:3003" user="root"
    password="123">
    <readHost host="hostS1" url="ip2:3009" user="root"
      password="123"/>
    </writeHost>
    </dataHost>
    
    <dataHost name="localhost2" maxCon="1000" minCon="10" balance="0"
    writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
    <heartbeat>select user()</heartbeat>
    <writeHost host="hostM1" url="ip3:3003" user="root"
    password="123">
    </writeHost>
    
           </dataHost>
    

    翻译过来就是,表employee分布在两个节点dn1,dn2,分表规则sharding-by-intfile,实际中分到两个数据库中,可以是同一个服务器可以是不同.

    而在节点中有可能再进一步分读写分离,主从或者主主复制的到不同服务器上的库,这就是mycat分库的流程。

    总结来说:

    1  、有多个dataHost,就说明有分库分表的设置

    2  、在一个dataHost中有readHost在writeHost下,或者有多个writeHost,而且balance不等于0(0代表没有读写分离),就说明有读写分离的设置

    3 、 在一个dataHost中有多个writeHost,这些writeHost之间必须是主主复制,这样才能保证及时两次写操作分别用不同的writeHost,也能保证两个Host数据一致的情况

    另外的配置

        <?xml version="1.0"?>
        <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
        <mycat:schema xmlns:mycat="http://org.opencloudb/">
            <schema name="weixin" checkSQLschema="false" sqlMaxLimit="100" dataNode="weixin" >
                
           
            <schema name="yixin" checkSQLschema="false" sqlMaxLimit="100" dataNode="yixin" />
                
            
            <dataNode name="dn1" dataHost="localhost0" database="weixin" />
            <dataNode name="dn2" dataHost="localhost0" database="yixin" />
    
            <dataHost name="localhost0" maxCon="450" minCon="10" balance="1"
               writeType="0" dbType="mysql" dbDriver="native">
               <heartbeat>select user()</heartbeat>
               <!-- can have multi write hosts -->
               <writeHost host="hostM1" url="localhost:3306" user="root" password="123456" />
                   <readHost host="hostS1" url="localhost:3307" user="test" password="123456" />
            </dataHost>
        </mycat:schema>
    

     也不知道和上面的那个正确,这里的说法是,将mycat作为一个数据库的话,那么<shecma中的“weixin”和“yixin”,是mycat中的两个数据库。然后对应dn1和dn2两节点。两个节点又设置了的读写分离。

    参考:

     http://blog.csdn.net/benluobobo/article/details/51099607

    http://blog.itpub.net/29510932/viewspace-1664499/

    http://blog.itpub.net/29510932/viewspace-1667814/

  • 相关阅读:
    UEmacs/PK Keybindings
    ubunut install golang
    vyos ipsec l2tp simple experiment
    Lynx 命令行操作
    Linux开启路由转发功能
    PROTEUS的元器件及模型制作
    5G模拟网自动化测试的需求和挑战
    vyos site-to-site ipsec simple experiment
    kubeadm 搭建 k8s 时用到的常用命令汇总
    html 特殊符号标记
  • 原文地址:https://www.cnblogs.com/longsanshi/p/8440463.html
Copyright © 2011-2022 走看看