DBLE读写分离

单纯使用读写分离功能

  • 3.20.10.0版本开始dble⽀持单纯的读写分离,可以和分库分表功能分开单独使⽤。
  • 若想启⽤dble的读写分离,仅需在 user.xml ⽂件中配置 rwSplitUser并指定对应的dbGroup即可。

1、修改user.xml配置文件

<dble:user xmlns:dble="http://dble.cloud/" version="4.0">
    <managerUser name="man1" password="654321" maxCon="100"/>
<!--    <shardingUser name="root" password="123456" schemas="testdb" readOnly="false" maxCon="20"/>-->
    <rwSplitUser name="rwsu1" password="123456" dbGroup="dbGroup1" maxCon="20"/>
</dble:user>
  • 这⾥需要注意的是三种⽤⼾配置的顺序是固定的。
  • 当在user.xml中注释shardingUser用户时,dble不会加载sharding.xml配置文件,即dble不具备分库分表的功能。

2、修改db.xml配置文件

<?xml version="1.0"?>
<!--
  ~ Copyright (C) 2016-2020 ActionTech.
  ~ License: http://www.gnu.org/licenses/gpl.html GPL version 2 or higher.
  -->

<dble:db xmlns:dble="http://dble.cloud/" version="4.0">
    <dbGroup name="dbGroup1" rwSplitMode="3" delayThreshold="100">
        <heartbeat>show slave status</heartbeat>
        <dbInstance name="instanceM1" url="10.186.65.68:3308" user="test" password="test" maxCon="1000" minCon="10"
                    primary="true" readWeight="2" id="xx1">
            <property name="testOnCreate">true</property>
        </dbInstance>
        <dbInstance name="instanceS1" url="10.186.65.71:3308" user="test" password="test" maxCon="1000" minCon="10"  readWeight="2" disabled="false">
            <property name="testOnCreate">false</property>
        </dbInstance>
        <dbInstance name="instanceS2" url="10.186.65.72:3308" user="test" password="test" maxCon="1000" minCon="10"  readWeight="2" disabled="false">
            <property name="testOnCreate">false</property>
        </dbInstance>
    </dbGroup>
</dble:db>
  • dble通过配置多个dbInstance为读操作提供负载均衡

3、重启DBLE

[root@study01 dble]# ./bin/dble restart
Stopping dble-server...
Stopped dble-server.
Starting dble-server...

4、测试读写分离

[root@study01 ~]# mysql -urwsu1 -p -h127.0.0.1 -P8066
Enter password: 


#测试读:
MySQL [(none)]> select @@server_id;select @@server_id;select @@server_id;select @@server_id;select @@server_id;select @@server_id;


#测试写:
MySQL [(none)]> begin;
MySQL [(none)]> select @@server_id;select @@server_id;select @@server_id;select @@server_id;select @@server_id;select @@server_id;
MySQL [(none)]> commit;

5、读写分离功能限制

  1. druid 解析器限制 - 不⽀持set语句中存在特殊字符;
  2. druid 解析器限制 - set session transaction read write, isolation level repeatable read中,逗号后的语句不⽣效;
  3. 只读事务的⽀持;
  4. 不⽀持set transaction read write;
  5. select 语句现在的逻辑是都进⾏负载,还没有进⾏细节的区分,⽐如有些语句需要强制发主,如系统函数,系统表,系统变量;
  6. select ... into 或者 load data中存在⽤⼾变量,通过dble再次查询该变量,变量值不对;
  7. 预编译语句和当前连接存在关联,使⽤会有问题;
  8. client连接dble时,若指定不存在的schema默认库,dble不会报错;
  9. 在会话中,删除正在使⽤的库,mysql会将当前库置为null,dble依然保留;
  10. prepared statament协议未测试,谨慎使⽤;
  11. set 语句⽬前只⽀持会话级别系统变量和⽤⼾变量的设置,若需要设置密码等可以使⽤hint的⽅式设置或去后端节点去设置;
  12. 读写分离会打破原先的隔离级别;
  13. 创建临时表后,之后所有的语句都发往主,因为临时表不⽀持主从复制。直到你删除了所有临时表后,原先的负载均衡策略恢复;
  14. 部分客⼾端,⽐如 在设置了 allowMultiQueries=true (默认为 false) 的 jdbc,此时客⼾端可以⼀次性发送 multi-queries , dble 对此情况不做拆分,全部发往主。MySQL Command-Line client 会在客⼾端拆分语句,⼀次只发送⼀条语句,故不会有该条限制 ;

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

posted @ 2021-05-11 23:28  easydba  阅读(321)  评论(0编辑  收藏  举报