当前位置:   article > 正文

Docker部署Mycat集群,实现MySQL的读写分离和数据分片_使用docker实现mycat集群

使用docker实现mycat集群

首先得安装JDK

1. 部署MySQL集群

为了减轻数据库压力,我们部署了两个MySQL集群,实现了数据分片。

每个集群架构为一主一从,M1(3306)-> S1(3307);M2(3316)-> S2(3317)

关于部署MySQL集群,具体可以参考我的另一篇博客:https://blog.csdn.net/qq_41479635/article/details/131697076?spm=1001.2014.3001.5501

2. 下载安装包

我用的是Mycat1.6

http://dl.mycat.org.cn/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

或者官网下载安装包:http://www.mycat.io/

3. 配置Mycat

# 创建目录,解压文件
mkdir mycat01
tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz mycat01/

# 修改配置文件
cd mycat01/conf
vim server.xml

# 删除里面内容,添加以下内容
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
    <system>
        <property name="nonePasswordLogin">0</property>
        <property name="useHandshakeV10">1</property>
        <property name="useSqlStat">0</property>
        <property name="useGlobleTableCheck">0</property>
        <property name="sequnceHandlerType">2</property>
        <property name="subqueryRelationshipCheck">false</property>
        <property name="processorBufferPoolType">0</property>
        <property name="handleDistributedTransactions">0</property>
        <property name="useOffHeapForMerge">1</property>
        <property name="memoryPageSize">64k</property>
        <property name="spillsFileBufferSize">1k</property>
        <property name="useStreamOutput">0</property>
        <property name="systemReserveMemorySize">384m</property>
        <property name="useZKSwitch">false</property>
    </system>
    <!--这里是设置的ronin用户和虚拟逻辑库-->
    <user name="ronin" defaultAccount="true">
        <property name="password">ronin</property>
        <property name="schemas">ronin</property>
    </user>
</mycat:server>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
# 修改配置文件
vim schema.xml

# 删除里面内容,添加以下内容
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
    <!--配置数据表,两个集群 dataNode:dn1,dn2-->
    <schema name="ronin" checkSQLschema="false" sqlMaxLimit="100">
        <table name="tb_test" dataNode="dn1,dn2" rule="mod-long" />
    </schema>
    <!--配置分片关系-->
    <dataNode name="dn1" dataHost="cluster1" database="ronin" />
    <dataNode name="dn2" dataHost="cluster2" database="ronin" />
    <!--配置连接信息,分片集群1-->
    <dataHost name="cluster1" maxCon="1000" minCon="10" balance="3" writeType="1" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <!--主节点写,从节点读-->
        <writeHost host="W1" url="192.168.241.130:3306" user="root" password="root">
            <readHost host="W1R1" url="192.168.241.130:3307" user="root" password="root" />
        </writeHost>
    </dataHost>
    <!--分片集群2-->
    <dataHost name="cluster2" maxCon="1000" minCon="10" balance="3" writeType="1" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <writeHost host="W2" url="192.168.241.130:3316" user="root" password="root">
            <readHost host="W2R1" url="192.168.241.130:3317" user="root" password="root" />
        </writeHost>
    </dataHost>
</mycat:schema>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

balance属性说明: 负载均衡类型,目前的取值有3 种:

  1. balance=“0”, 不开启读写分离机制,所有读操作都发送到当前可用的writeHost 上。
  2. balance=“1”,全部的readHost 与stand by writeHost 参与select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1 与M2 互为主备),正常情况下,M2,S1,S2都参与select 语句的负 载均衡。
  3. balance=“2”,所有读操作都随机的在writeHost、readhost 上分发。
  4. balance=“3”,所有读请求随机的分发到wiriterHost 对应的readhost 执行,writerHost 不负担读压力, 注意balance=3 只在1.4 及其以后版本有,1.3 没有。
# 修改配置文件
vim schema.xml

# 修改内容
<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
	<property name="count">2</property>
</function>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

单节点Mycat配置完成,启动

# 启动
cd ../bin
./startup_nowrap.sh
tail -f ../logs/mycat.log
  • 1
  • 2
  • 3
  • 4

4. 搭建Mycat集群

cp mycat01 mycat02 -R
cd mycat02/conf

# 修改配置文件
vim wrapper.conf

#设置jmx端口
wrapper.java.additional.7=-Dcom.sun.management.jmxremote.port=1985
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
# 修改配置文件
vim server.xml
#设置服务端口以及管理端口
<property name="serverPort">8067</property>
<property name="managerPort">9067</property>
  • 1
  • 2
  • 3
  • 4
  • 5

启动第二个Mycat节点

# 启动
cd ../bin
./startup_nowrap.sh
tail -f ../logs/mycat.log
  • 1
  • 2
  • 3
  • 4

多节点的mycat搭建完成。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/817196
推荐阅读
相关标签
  

闽ICP备14008679号