天天看點

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為讀操作提供負載均衡
    DBLE讀寫分離

3、重新開機DBLE

[[email protected] dble]# ./bin/dble restart
Stopping dble-server...
Stopped dble-server.
Starting dble-server...
           

4、測試讀寫分離

[[email protected] ~]# 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

關注我,不走丢!

DBLE讀寫分離