mycat配置数据库集群

所有的集群配置,都必须配置多主多从模式,即多个master节点相互之间配置主从,如,master1和slave1为第一组主从,master2和slave2为第二组主从,master1和master2互为对方的主从。 

如下配置方式为两个主从模型,两个writeHost互为主从(缺陷:可能有I/O延迟问题)

配置解释:

balance:0 //不开启读写分离,所有读操作都发送到当前可用的writeHost上

balance:1 //全部的readHost与stand by writeHost 参与select 语句的负载均衡(常用)

balance:2 //所有的读操作都随机的在writeHost、readHost上分发

balance:3 //所有的读操作都随机的分发到writeHost对应的readHost执行,writeHost不负担读压力

writeType:0自动主从(在1.4以后支持了主从关系,但是并没有支持主从复制) 也就是mycat会自动分配主从,如果说在同一个dataHost标签中配置了多个writeHost, 则mycat会自动分配主从(常用)

所有写操作发送到配置的第一个writeHost,第一个挂了切换到第二个,重新启动后以切换后的为准,切换记录在配置文件中:dnindex.properties

writeType:1所有写操作都随机的发送到配置的 writeHost(1.5版本之前生效)

switchType:无论是-1还是1都根据的是mycat所自带的主从关系

switchType:-1不自动切换 writeHost配置的规则为一台主节点一台从节点 如果主节点宕机,从节点还是从节点,并不会自动切换为主节点

switchType:1自动切换 根据的是mysql所配置主从关系(常用)

switchType:2根据mysql配置主从进行切换(监视mysql的主从心跳) Slave_IO_Runing(YES) Slave_SQL_Running(YES)(可以解决I/O延迟问题)

当心跳检测获取的数据发现了I/O延迟,则读做自动定位到writeHost中,如果没有延迟,则读操作自动定位到readHost中,建议为不同的表格定位不同的dataHost节点

3:和2一样,只是2为单节点,3为集群模式

 第一种集群配置方案如下:

 

<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
              writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <!-- can have multi write hosts -->
        <writeHost host="hostM1" url="192.168.209.130:3306" user="root"
                   password="123456">
            <!-- can have multi read hosts -->
            <readHost host="hostS2" url="192.168.209.130:3306" user="root" password="123456" />
        </writeHost>
    <writeHost host="hostM2" url="192.168.209.130:3306" user="root"
                   password="123456">
            <!-- can have multi read hosts -->
            <readHost host="hostS2" url="192.168.209.130:3306" user="root" password="123456" />
        </writeHost>
</dataHost>

 第二种集群配置方案如下:

<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
      
        <table name="company"   dataNode="dn1,dn2,dn3" rule="crc32slot" />
        <table name="goods"   dataNode="dn4,dn5,dn6" rule="crc32slot1" /> //在mycat中,rule.xml中定义的分片规则只能给一个表格使用,如果有多个表格使用同一个分片规则,需要在rule.xml中再复制一个tableRule节点
 </schema>
    <dataNode name="dn1" dataHost="localhost1" database="db1" />
    <dataNode name="dn2" dataHost="localhost1" database="db2" />
    <dataNode name="dn3" dataHost="localhost1" database="db3" />

    <dataNode name="dn4" dataHost="localhost2" database="db1" />
    <dataNode name="dn5" dataHost="localhost2" database="db2" />
    <dataNode name="dn6" dataHost="localhost2" database="db3" />

  
    <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
              writeType="0" dbType="mysql" dbDriver="native" switchType="2"  slaveThreshold="100">
        <heartbeat>show slave status</heartbeat>
        <!-- can have multi write hosts -->
        <writeHost host="hostM1" url="192.168.209.130:3306" user="root"
                   password="123456">
        </writeHost>
        <writeHost host="hostS1" url="192.168.209.130:3306" user="root"
                   password="123456" />
    </dataHost>
  

    <dataHost name="localhost2" maxCon="1000" minCon="10" balance="0"
      writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
      <heartbeat>show slave status</heartbeat>
<!-- can have multi write hosts -->
      <writeHost host="hostM2" url="192.168.209.130:3306" user="root"
    password="123456">
      </writeHost>
      <writeHost host="hostS1" url="192.168.209.130:3306" user="root"
      password="123456" />
</dataHost>

 

上图为一套高可用集群,任意一个节点done机都有备份可以替代

在所有Mycat服务所在主机中增加状态检查服务脚本,此操作为HaProxy提供对Mycat服务状态检查的依据,本案例中使用xinetd实现。通过xinetd,Haproxy可以用httpchk来检测Mycat的存活状态,(xinetd即extened internet daemon,是新一代的网络守护进程服务程序,又

叫超级Internet服务器,经常用来管理多种轻量级internet服务)

注意:第一种集群配置中需要手动配置两台master主主同步,两台master的mysql配置文件需要在[mysqld]下加上

log-slave-updates=true(又做主又做从)

然后开启主主同步,方法与读写分离配置主从方法一样,这样其中一台master done机重启,会自动与另一台master数据同步

 

posted @ 2021-01-14 19:48  陈扬天  阅读(401)  评论(0编辑  收藏  举报