美文网首页
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