單純使用讀寫分離功能
- 3.20.10.0版本開始dble⽀持單純的讀寫分離,可以和分庫分表功能分開單獨使⽤。
- 若想啟⽤dble的讀寫分離,僅需在 user.xml ⽂件中配置 rwSplitUser并指定對應的dbGroup即可。
1、修改 user.xml
配置檔案
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中注釋
使用者時,dble不會加載sharding.xml配置檔案,即dble不具備分庫分表的功能。shardingUser
2、修改 db.xml
配置檔案
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
[[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、讀寫分離功能限制
- 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 會在客⼾端拆分語句,⼀次隻發送⼀條語句,故不會有該條限制 ;
因為有悔,是以披星戴月;因為有夢,是以奮不顧身! 個人部落格首發: easydb.net
微信公衆号: easydb
關注我,不走丢!
easydb.net
easydb