美文网首页
MySQL基础-分库分表(三)

MySQL基础-分库分表(三)

作者: 石头耳东 | 来源:发表于2022-05-26 14:47 被阅读0次

前置文章:
MySQL基础-分库分表(一),该文主要讲了分库分表概念、MyCat安装及快速入门。
MySQL基础-分库分表(二) ,该文主要讲了MyCat配置、常用的分片规则等内容。

零、本文纲要

一、MyCat管理及监控

  1. MyCat原理
  2. MyCat管理
  3. Mycat-Web

二、读写分离

  1. 一主一从
  2. 双主双从

一、MyCat管理及监控

MyCat官方文档-GitHub
MyCat官方文档-语雀

1. MyCat原理

执行:SQL解析 → 分片分析 → 路由分析 → 读写分离分析
返回:结果合并 → 聚合处理 → 排序处理 → 分页处理

2. MyCat管理

Mycat默认开通2个端口:
8066 数据访问端口,即进行 DML 和 DDL 操作;
9066 数据库管理端口,即 mycat 服务管理控制功能,用于管理mycat的整个集群状态。

连接管理控制台:
mysql -h 192.168.200.210 -p 9066 -uroot -p123456

命令 含义
show @@help 查看Mycat管理工具帮助文档
show @@version 查看Mycat的版本
reload @@config 重新加载Mycat的配置文件【配置后无需重启,使用该命令重加载即可】
show @@datasource 查看Mycat的数据源信息
show @@datanode 查看MyCat现有的分片节点信息
show @@threadpool 查看Mycat的线程池信息
show @@sql 查看执行的SQL【最近执行的SQL】
show @@sql.sum 查看执行的SQL统计

3. Mycat-Web

Mycat-Web官方文档-语雀

Mycat eye 需要Zookeeper作为配置中心
Mycat eye官方下载地址

  • ① 使用

先启动zookeeper:zkServer.sh start
然后启动mycat eye:start.sh

访问地址:http://192.168.200.210:8082/mycat

二、读写分离

注意:此处省略了数据库的配置,数据库的主从配置还是需要手动完成的,不要遗漏。

1. 一主一从

M1->S1

  • ① schema.xml配置

注意:此处逻辑表可以省略。

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
    <!-- 配置逻辑库 -->
    <schema name="STONE_RW" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1">
    </schema>

    <dataNode name="dn1" dataHost="dhost1" database="stone" />

    <dataHost name="dhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
        <heartbeat>select user()</heartbeat>

        <writeHost host="master1" url="jdbc:mysql://192.168.200.211:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root" password="1234" >
            <readHost host="slave1" url="jdbc:mysql://192.168.200.212:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root" password="1234" />
        </writeHost>
    </dataHost>
</mycat:schema>

balance属性

参数值 含义
0 不开启读写分离机制 , 所有读操作都发送到当前可用的writeHost上【默认值】
1 全部的readHost 与 备用的writeHost 都参与select 语句的负载均衡
(主要针对于双主双从模式)
2 所有的读写操作都随机在writeHost , readHost上分发
3 所有的读请求随机分发到writeHost对应的readHost上执行,
writeHost不负担读压力
  • ② 存在问题

当主节点Master宕机之后,业务系统就只能够读,而不能写入数据。

2. 双主双从

M1->S1,M2->S2,并且 M1 与 M2 互为主备

  • ① schema.xml配置
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
    <!-- 配置逻辑库 -->
    <schema name="STONE_RW" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1">
    </schema>

    <dataNode name="dn1" dataHost="dhost1" database="stone" />

    <dataHost name="dhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
        <heartbeat>select user()</heartbeat>

        <writeHost host="master1" url="jdbc:mysql://192.168.200.211:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root" password="1234" >
            <readHost host="slave1" url="jdbc:mysql://192.168.200.212:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root" password="1234" />
        </writeHost>

        <writeHost host="master2" url="jdbc:mysql://192.168.200.213:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root" password="1234" >
            <readHost host="slave2" url="jdbc:mysql://192.168.200.214:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root" password="1234" />
        </writeHost>
    </dataHost>
</mycat:schema>

balance="1"
代表全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡。简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡;

writeType="0"
写操作都转发到第1台writeHost, writeHost1挂了, 会切换到writeHost2上;如果为1,所有的写操作都随机地发送到配置的 writeHost 上 ;

switchType="1"
表示writeHost1宕机,则自动切换至writeHost2;如果为1,不自动切换。

三、结尾

以上即为MySQL基础-分库分表(三)的全部内容,感谢阅读。

相关文章

网友评论

      本文标题:MySQL基础-分库分表(三)

      本文链接:https://www.haomeiwen.com/subject/ncguprtx.html