当前位置: 首页 > 工具软件 > DBLE > 使用案例 >

dble读写分离

太叔高义
2023-12-01

目录

1、修改user.xml配置文件

2、修改db.xml配置文件

3、重启DBLE

4、测试读写分离

5、读写分离功能限制


启⽤dble的读写分离,需在 user.xml ⽂件中配置 rwSplitUser并指定对应的dbGroup即可。

1、修改user.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<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="rent" password="admin123" dbGroup="rentGroup" maxCon="100"/>
</dble:user>

2、修改db.xml配置文件

/1.使用dble进行读写分离
2.dble分析sql将读发给从
3.rwSplitMode=0 直接分发到主实例
4.rwSplitMode=1 读操作必须在所有从实例中均衡
5.rwSplitMode=2 读操作在所有实例中均衡
6.rwSplitMode=3 读操作尽量在所有实例中均衡r
7.rwSplitMode=3 读操作尽量在所有实例中均衡,有从走从,没有走主
# 1.配置db.xml  disabled="false" 改为false,true 是这个节点废弃了
#   rwSplitMode="3" 读操作尽量在所有实例中均衡,有从走从,没有走主

<?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="rentGroup" rwSplitMode="3" delayThreshold="100">
        <heartbeat>show slave status</heartbeat>
        <dbInstance name="instanceM1" url="192.168.1.8:3306" user="root" password="admin123" maxCon="1000" minCon="10"
                    primary="true" readWeight="1" id="xx1">
            <property name="testOnCreate">true</property>
        </dbInstance>
        <dbInstance name="instanceS1" url="192.168.1.9:3306" user="root" password="admin123" maxCon="1000" minCon="10"  readWeight="2" disabled="false">
            <property name="testOnCreate">false</property>
        </dbInstance>
    </dbGroup>

<!--    <dbGroup name="dbGroup2" rwSplitMode="0" delayThreshold="100" disableHA="true"> -->
        <!-- <heartbeat errorRetryCount="1" timeout="10">show slave status</heartbeat> -->
       <!--  <dbInstance name="instanceM2" url="192.168.1.9:3306" user="root" password="admin123" maxCon="1000" minCon="10" 
                    primary="true"> -->
            <!--  <property name="testOnCreate">true</property> -->
        <!--  </dbInstance> --> 

        <!-- can have multi read instances -->
        <!--<dbInstance name="instanceS2" url="ip4:3306" user="your_user" password="your_psw" maxCon="1000" minCon="10" usingDecrypt="true">-->
            <!--<property name="testOnCreate">true</property>-->
        <!--</dbInstance>-->
      <!--</dbGroup> -->
</dble:db>

dble通过配置多个dbInstance为读操作提供负载均衡

3、重启DBLE

# 重启
/var/lib/dble/bin/dble restart

# 查看日志
tail -f /var/lib/dble/logs/wrapper.log 

tail -f /var/lib/dble/logs/dble.log

# 打开管理端接口 9066
firewall-cmd --zone=public --add-port=9066/tcp --permanent
firewall-cmd --zone=public --add-port=8066/tcp --permanent
firewall-cmd --reload
# 链接dble mysql客户端
mysql -h 192.168.1.10  -uman1 -P9066 -padmin123
# 数据端口8066 数据节点 用户名rent/dmin123

mysql -h 192.168.1.10  -urent -P8066 -padmin123

4、测试读写分离

mysql -h 192.168.1.10  -urent -P8066 -padmin123

4.1测试读:

MySQL [(none)]> select @@server_id;select @@server_id;select @@server_id;select @@server_id;select @@server_id;select @@server_id;

4.2测试写:

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、读写分离功能限制

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

 类似资料: