关于开发:分布式-DBLE-新特性之脱离分库分表的读写分离

51次阅读

共计 4048 个字符,预计需要花费 11 分钟才能阅读完成。

作者:赵佳慧

爱可生产品团队成员,次要负责公司运维平台的更新迭代。平时喜爱多理解其余技术,一直晋升集体技能。

本文起源:原创投稿

* 爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。


一、性能介绍

本篇内容次要围绕分库分表中间件 DBLE v3.20.10.0 版本的新个性“不分库分表的读写拆散”开展介绍。

在 v3.20.10.0 版本之前,DBLE 反对配置分库分表的前提下应用读写拆散性能。v3.20.10.0 版本开始,DBLE 反对配置单纯的读写拆散,即读写拆散性能能够和分库分表性能离开,独自应用读写拆散性能。在介绍新个性之前,咱们先来回顾分库分表下的读写拆散性能如何应用。

二、环境筹备

验证分库分表下的读写拆散性能之前,首先筹备所需环境,根本信息如下:

服务器 IP 用处 版本
10.186.64.40 部署 DBLE 服务 3.20.10.0
10.186.64.23 部署 MySQL-M1 5.7.25
10.186.64.31 部署 MySQL-S1 5.7.25
10.186.64.34 部署 MySQL-S2 5.7.25

1、部署一主两从数据库组。

2、部署 DBLE 环境。

可参考 DBLE 手 册中的 疾速开始。

3、编辑 DBLE 配置文件,配置好后端数据库组。

4、开启 MySQL 的 general.log,用于验证 SQL 语句的下发。

三、应用分库分表的读写拆散性能

1、配置分库分表的读写拆散性能。

配置要点:

  • 配置多个 dbInstance 为读操作提供负载平衡。
  • rwSplitMode 配置不能为 0。

重要配置内容:

user.xml

<dble:user xmlns:dble="http://dble.cloud/" version="4.0">
    <managerUser name="admin" password="1" maxCon="200"/>
    <shardingUser name="root" password="1" schemas="db1" maxCon="200" >
    </shardingUser> 
</dble:user>
  • shardingUser:分库用户配置

db.xml

<dble:db xmlns:dble="http://dble.cloud/" version="4.0">
    <dbGroup name="dbGroup1" rwSplitMode="1" delayThreshold="100">
        <heartbeat>show slave status</heartbeat>
        <dbInstance name="M1" url="10.186.64.23:3306" user="root" password="1" maxCon="500" minCon="100" primary="true" readWeight="0" id="mysql1">
            <property name="testOnCreate">true</property>
        </dbInstance>
        <dbInstance name="S1" url="10.186.64.31:3306" user="root" password="1" maxCon="500" minCon="100" disabled="false">
        </dbInstance>
        <dbInstance name="S2" url="10.186.64.34:3306" user="root" password="1" maxCon="500" minCon="100" disabled="false">
        </dbInstance>
    </dbGroup>
</dble:db>
  • rwSplitMode:读操作的负载平衡模式(候选值 0 /1/2)

    • 0:不做平衡,间接散发到主实例。
    • 1:读操作在所有从实例中平衡,当所有从实例均不可用时,下发语句会报错。在 v3.20.10 前是会发往主实例。
    • 2:读操作在所有实例中平衡。

Sharding.xml

<dble:sharding xmlns:dble="http://dble.cloud/" version="4.0">
    <schema name="db1"  sqlMaxLimit="-1">
        <globalTable name="t1" shardingNode="dn1,dn2" sqlMaxLimit="-1"></globalTable>
    </schema>
    <shardingNode name="dn1" dbGroup="dbGroup1" database="db_1"/>
    <shardingNode name="dn2" dbGroup="dbGroup1" database="db_2"/>
</dble:sharding>

2、应用 mysql client 登录 dble 客户端。

留神:须要应用分库用户。

3、在 db1 库中建表 t1,并插入数据。

create table t1(id int,c int);
insert into t1(id,c) values(1,1);
insert into t1(id,c) values(2,2);
insert into t1(id,c) values(3,3);
insert into t1(id,c) values(4,4);
insert into t1(id,c) values(5,5);
insert into t1(id,c) values(6,6);

4、下发查问 SQL。

select * from t1 where id=1;
select * from t1 where id=3; 
select * from t1 where id=5;
select * from t1 where id=2;
select * from t1 where id=4;
select * from t1 where id=6;

5、查看后端 MySQL 主实例的 general.log,没有对 t1 表的读操作。

查看后端 MySQL 从实例的 general.log。

查看后端 MySQL 另一个从实例的 general.log。

6、综上,DBLE 将所有读操作转发到所有从实例,并在所有从实例中平衡。合乎 rwSplitMode=”1″ 的配置预期。

四、单纯的读写拆散性能

DBLE 单纯的读写拆散性能与应用分库分表的读写拆散性能,区别在于:前者仅须要在 user.xml 文件中配置 rwSplitUser,并指定对应的 dbGroup 即可。当开启单纯的读写拆散性能时,DBLE 不会加载 sharding.xml 配置,即 DBLE 不具备分库分表的性能。
上面咱们进行新性能的配置及测试。

1、批改 DBLE 的配置文件。

配置要点:

  • rwSplitUser 援用的 dbGroup,仅需在 db.xml 中定义即可。
  • 一个 rwSplitUser 仅对应一个 dbGroup。
  • 多个 rwSplitUser 可援用同一个 dbGroup。

user.xml:

<dble:user xmlns:dble="http://dble.cloud/" version="4.0">
    <managerUser name="admin" password="1" maxCon="100"/>
    <rwSplitUser name="user1" password="1" dbGroup="dbGroup1" maxCon="20"/> 
</dble:user>
  • rwSplitUser:读写用户配置。

db.xml:

<dble:db xmlns:dble="http://dble.cloud/" version="4.0">
    <dbGroup name="dbGroup1" rwSplitMode="2" delayThreshold="100">
        <heartbeat>show slave status</heartbeat>
        <dbInstance name="M1" url="10.186.64.23:3306" user="root" password="1" maxCon="500" minCon="100" primary="true" readWeight="0" id="mysql1">
            <property name="testOnCreate">true</property></dbInstance>
        <dbInstance name="S1" url="10.186.64.31:3306" user="root" password="1" maxCon="500" minCon="100" disabled="false"></dbInstance>
        <dbInstance name="S2" url="10.186.64.34:3306" user="root" password="1" maxCon="500" minCon="100" disabled="false"></dbInstance>
    </dbGroup>
    </dbGroup>

2、应用 mysql client 登录 dble 客户端。

留神:须要应用读写用户。

由下图可见,DBLE 未应用分库分表性能,仅展现后端 MySQL 的数据库信息。

3、创立数据库 db_3,在 db_3 中创立表 t3 并插入数据。

create database db_3;
create table t3(id int,c int);
insert into t3(id,c) values(1,1),(2,2),(3,3),(4,4);

4、下发查问 SQL。

select * from t3 where id =1;
select * from t3 where id =2;
select * from t3 where id =3;
select * from t3 where id =4;
select * from t3 where id =3;
select * from t3 where id =2;
select * from t3 where id =1;

5、查看后端 MySQL 主实例的 general.log。

查看后端 MySQL 从实例的 general.log。

查看后端 MySQL 另一个从实例的 general.log。

6、综上,DBLE 将所有读操作转发至所有实例,并在所有实例中平衡。合乎 rwSplitMode=”2″ 的配置预期。

五、小结

正文完
 0