• DBLE分库分表示例


    DBLE 三分片的数据拆分场景

    1、准备后端 MySQL 节点

    DBLE 的架构其实很好理解,DBLE 是代理中间件,DBLE 后面是物理数据库。对于应用来说,访问的都是 DBLE,不会接触到后端的数据库。

     

    部署架构表如下图:

    服务 IP:Port 说明
    DBLE 10.186.65.68:8066 DBLE实例,连接数据库时,连接此IP:Port
    MySQL A 10.186.65.71:1111 物理数据库实例A,真正存储数据的数据库
    MySQL B 10.186.65.72:1111 物理数据库实例B,A,B为主从关系

    2、修改 sharding.xml 配置文件

    <?xml version="1.0"?>
    <!DOCTYPE dble:sharding SYSTEM "sharding.dtd">
    <dble:sharding xmlns:dble="http://dble.cloud/" version="4.0">
        <schema name="testdb" sqlMaxLimit="-1">
            <shardingTable name="account" shardingNode="dn_01,dn_02,dn_03" sqlMaxLimit="-1" shardingColumn="id" function="sharding-by-hash"></shardingTable>
        </schema>
        <shardingNode name="dn_01" dbGroup="dh-mysql-dble" database="dh_dn_01"></shardingNode>
        <shardingNode name="dn_03" dbGroup="dh-mysql-dble" database="dh_dn_03"></shardingNode>
        <shardingNode name="dn_02" dbGroup="dh-mysql-dble" database="dh_dn_02"></shardingNode>
        <function name="sharding-by-hash" class="Hash">
            <property name="partitionCount">3</property>
            <property name="partitionLength">100</property>
        </function>
        <function name="default_mod_two" class="Hash">
            <property name="partitionCount">2</property>
            <property name="partitionLength">1</property>
        </function>
    </dble:sharding>
    

    参数说明

    • schema 逻辑数据库信息,此数据库为逻辑数据库
      1. schema name 逻辑库名,程序连接的库名;name 与 user.xml 中 schemas 对应;
      2. shardingTable name 表名,物理数据库中表名程序连接的表名;
      3. shardingNode 表存储到哪些节点,多个节点用逗号分隔;
      4. shardingColumn 分片字段;
      5. function 分片规则,引⽤ function 节中的拆分规则名称那个;
    • shardingNode 分片节点
      1. shardingNode name 分片节点名称
      2. dbGroup shardingNode 对应的数据库组,参考 db.xml 中的 dbGroup 名称,可以配置单个或多个使⽤,例如"dh,dh$0-5"
      3. databaseshardingNode 对应的存在于 mysql 物理实例中的 schema, 可以配置单个或多个使⽤,例如"db,db$0-5"
    • function 拆分算法定义
      1. name 定义分区算法名,在分区规则定义中被引⽤
      2. class 拆分算法,指定分区算法实现类
      3. ⽬前,已⽀持的分区算法有: hash, stringhash, enum, numberrange, patternrange, date,jumpstringhash
      4. property name部分⽤于指定相应分区算法的参数,partitionCount指定分区的区间数,partitionLength指定各区间⻓度

    3、修改 db.xml 配置文件

    <?xml version="1.0"?>
    <!DOCTYPE dble:db SYSTEM "db.dtd">
    <dble:db xmlns:dble="http://dble.cloud/" version="4.0">
        <dbGroup name="dh-mysql-dble" rwSplitMode="0" delayThreshold="-1">
            <heartbeat timeout="0" errorRetryCount="0">show slave status</heartbeat>
            <dbInstance name="10.186.65.71-1111-dh-1" url="10.186.65.71:1111" user="dble" password="dble" maxCon="100" minCon="10" primary="true" readWeight="0"></dbInstance>
            <dbInstance name="10.186.65.72-1111-dh-2" url="10.186.65.72:1111" user="dble" password="dble" maxCon="100" minCon="10" primary="false" readWeight="0"></dbInstance>
        </dbGroup>
    </dble:db>
    

    参数说明

    包含具体的数据库组和实例配置,可以配置多组,每组可以配置多个实例

    • dbGroup 数据库组
      1. name 数据库组名
      2. rwSplitMode 在进⾏读负载均衡的时候会根据这个配置 进⾏0:不做均衡,直接分发到主实例,从实 例将被忽略,不会尝试建⽴连接池,但会有 ⼼跳连接 1:读操作在所有从实例中均衡,当所有 从实例都不可⽤时,下发语句会报错。 2:读操作在所有实例中均衡。 3:读操作在所有从实例中均衡,当所有 从实例都不可⽤时,将语句发往主实例。
      3. delayThreshold 指定主从延迟阀值,默认-1,表⽰不会进⾏延迟检测
    • heartbeat 该配置会⽤于进⾏ mysql 实例状态的判断
      1. timeout ⼼跳超时阈值,默认0秒
      2. errorRetryCount ⼼跳失败后的尝试次数
    • dbInstance 后端 mysql 实例连接信息
      1. name 写节点名称,url 写节点地址ip:port,user 写节点⽤⼾,password 写节点⽤⼾密码,minCon 空闲时保有最⼩连接数,maxCon 最⼤连接数,primary 主实例需要配置成true,readWeight 节点权重(负载均衡时候使⽤),disabled 标记该实例不可⽤

    4、修改 user.xml 配置文件

    <dble:user xmlns:dble="http://dble.cloud/" version="4.0">
        <managerUser name="man1" password="654321" maxCon="100"/>
        <shardingUser name="app" password="app" schemas="testdb" readOnly="false" maxCon="0"/>
    </dble:user>
    

    参数说明

    • managerUser(管理⽤⼾)
    • shardingUser(分库⽤⼾)
    • rwSplitUser(读写⽤⼾)

    5、建库

    在DBLE管理端口上,创建后端物理库

    [root@study01 logs]# mysql -uman1 -p -h127.0.0.1 -P9066
    Enter password: 
    
    MySQL [(none)]> create database @@shardingnode='dn_0$1-3';
    Query OK, 1 row affected (0.03 sec)
    
    

    5、建表

    在DBLE服务端口上,创建表;

    mysql -uroot -p -h127.0.0.1 -P8066
    
    
    use testdb;
    
    create table account(id int, addr varchar(20));
    

    6、导入数据

    [root@study01 tmp]# cat acc.txt 
    5,shanghai
    155,beijing
    255,shenzhen
    355,guanzhou
    455,tianjin
    555,kunming
    655,wuhan
    
    
    
    mysql> load data local infile '/tmp/acc.txt' into table account fields terminated by ',';
    

    7、登录后端服务器查看结果

    mysql> select * from dh_dn_01.account;
    +------+----------+
    | id   | name     |
    +------+----------+
    |    5 | shanghai |
    |  355 | guanzhou |
    |  655 | wuhan    |
    +------+----------+
    
    mysql> select * from dh_dn_02.account;
    +------+---------+
    | id   | name    |
    +------+---------+
    |  155 | beijing |
    |  455 | tianjin |
    +------+---------+
    
    mysql> select * from dh_dn_03.account;
    +------+----------+
    | id   | name     |
    +------+----------+
    |  255 | shenzhen |
    |  555 | kunming  |
    +------+----------+
    

    因为有悔,所以披星戴月;因为有梦,所以奋不顾身! 个人博客首发:easydb.net 微信公众号:easydb 关注我,不走丢!

    因为有悔,所以披星戴月;因为有梦,所以奋不顾身! 个人博客首发:easydb.net 微信公众号:easydb 关注我,不走丢!
  • 相关阅读:
    DIV+CSS布局一行两列问题(Repeater布局)
    JavaScript为DropDownList添加新项
    Indexof的实现
    父类子类构造函数的执行顺序
    微软算法面试题(2)
    Heaven on Earth
    阿里巴巴笔试题马尔科夫(HMM)的特征
    心灵净化启示录
    职场英语:开心工作的十二条秘诀
    MySql错误代码1045的解决方案
  • 原文地址:https://www.cnblogs.com/easydb/p/14787255.html
Copyright © 2020-2023  润新知