開源分佈式中間件 DBLE 快速入門指南

一、環境準備
DBLE項目資料
安裝JDK環境
二、安裝DBLE
三、配置DBLE
應用場景一:數據拆分
應用場景二:讀寫分離
四、總結



環境準備



 DBLE 項目資料



DBLE 是企業級開源分佈式中間件,江湖人送外號 “MyCat Plus以其簡單穩定,持續維護,良好的社區環境和廣大的羣衆基礎得到了社區的大力支持;


DBLE官方網站:

https://opensource.actionsky.com 

可以詳細瞭解DBLE的背景和應用場景,本文不涉及到的細節都可在官方文檔獲得更細節都信息;對於剛瞭解到同學,可以以本文爲快速入門基礎

DBLE 官方項目:

https://github.com/actiontech/dble

如對源碼有興趣或者需要定製的功能的可以通過源碼編譯安裝

DBLE 下載地址:

https://github.com/actiontech/dble/releases

DBLE 官方社區交流羣:669663113


 安裝 JDK 環境



DBLE 是使用 java 開發的,所以啓動 DBLE 需要先在機器上安裝 java 版本 1.8 或以上,並且確保 JAVA_HOME 參數被正確的設置;

這裏通過 yum 源的方式安裝 openjdk ,同學們可以自行 google jdk 的幾百種安裝方式,這裏不再贅述;

1.png

確認 java 環境已配置完成;

2.png


 安裝 DBLE


DBLE 的安裝其實只要解壓下載的目錄就可以了,非常簡單。

  • 通過此連接下載最新安裝包:https://github.com/actiontech/dble/releases

  • 解壓並安裝 DBLE 到指定文件夾中


4.png


安裝完成後,目錄如下:



 配置 DBLE


DBLE 的配置文件都在 conf 目錄裏面,這裏介紹幾個常用的文件:


 應用場景一:數據拆分



▽ 後端 MySQL 節點


DBLE 的架構其實很好理解,DBLE 是代理中間件,DBLE 後面就是物理數據庫。對於使用者來說,訪問的都是 DBLE,不會接觸到後端的數據庫。

我們先演示簡單的數據拆分的功能。物理部署結構如下表:

備註:爲了演示簡單,這裏將實例都部署在了一臺機器上並用不同端口做區分,同學們也可以用三臺機器來做環境搭建。


在MySQL A和MySQL B中創建庫表testdb.users來方便後續的驗證,表結構如下:


5.png

▽ server.xml

server.xml 裏可以配置跟 DBLE 自身相關的許多參數,這裏重點只關注下面這段訪問用戶相關的配置,其他默認即可;


第一段 “< system >” 爲 DBLE 的服務端口(默認8066)和管理端口(默認9066)的配置

  • 管理端口只能接受 DBLE 的管理命令,這裏不做展開

  • 服務端口即 DBLE 的業務訪問端口,可以接受SQL語句


第二段“< user >”配置管理理用戶,默認爲 man1,密碼爲 654321

  • 即可以通過 mysql -P9066 -h 127.0.0.1 -u man1 -p654321 來下發管理命令


第三段“< user >”配置業務用戶,配置了一個賬號 test 密碼 password,針對數據庫 testdb,讀寫權限都有,沒有針對表做任何特殊的權限,故把表配置做了註釋

  • 即可以通過 mysql -P8066 -h 127.0.0.1 -utest -ppassword 下發 SQL 語句

6.png



▽ schema.xml


schema.xml 是最主要的配置項,我們將 users 用戶表按照取模的方式平均拆分到了 MySQL A 和 MySQL B 兩個數據數據庫實例上, 詳細請看配置文件:



7.png


  • 參數說明 

· schema 邏輯數據庫信息,此數據庫爲邏輯數據庫,name 與 server.xml 中 schema對應; 
· dataNode 分片信息,此爲分片節點的定義;分片名字和schema的dataNode對應;分片與下面的dataHost 物理實例進行關聯;

· dataHost 物理實例組信息,dataHost下可以掛載同組的讀寫物理實例節點,實現高可用或者讀寫分離;


每個節點的重點屬性逐一說明

  • schema:

   屬性說明 :

    · name 邏輯數據庫名,與 server.xml 中的 schema 對應; 

    · table:

      子屬性說明 :

      -  name 表名,物理數據庫中表名

      -  dataNode 表存儲到哪些節點,多個節點用逗號分隔

      -  primaryKey 主鍵,用於主鍵緩存和自增識別,不作主鍵約束

      -  autoIncrement 是否自增 

      -  rule 分片規則名,具體規則下文 rule 詳細介紹

  • dataNode

   屬性說明:

    · name 節點名,與 table 中 dataNode 對應

    · datahost 物理實例組名,與 datahost 中 name 對應

    · database 物理數據庫中數據庫名;

  • dataHost

   屬性說明:

    · name 物理數據庫名,與 dataNode 中 dataHost 對應 

    · balance 均衡負載的方式 

    · switchtype 寫節點的高可用切換方式;等於1時,心跳不健康發生切換

    · heartbeat 心跳檢測語句,注意語句結尾的分號要加

    · writehost 寫物理實例

      子屬性說明 :

      -  host 物理實例名

      -  url 物理庫IP+Port

      -  user 物理庫用戶

      -  password 物理庫密碼


▽ rule.xml


主要關注 rule 屬性,rule 屬性的內容來源於 rule.xml 這個文件,DBLE 支持多種分表分庫的規則,基本能滿足你所需要的要求。

table 中的 rule 屬性對應的就是 rule.xml 文件中 tableRule 的 name, 具體有哪些拆分算法實現,建議還是看下文檔。我這裏選擇的 sharding-by-mod2,是 hash算法的特例,就是將數據平均拆分。因爲我後端是兩臺物理庫,所以 rule.xml中hashmod2 對應的 partitionCountt 爲 2 ,配置如下:

8.png


▽ 驗證配置生效


  • 啓動 DBLE

9.png

  • 通過 DBLE 流量入口 8066 登陸數據庫

10.png

  • 插入兩條用戶記錄,並獲取 DBLE 側的查詢記錄

11.png

  • 獲取 MySQL A 和 MySQL B 的記錄

12.png

從上面的驗證流程,往 DBLE 插入的數據,會按照取模的方式下發到真實的物理庫,來實現數據庫的自動分片;同時通過 DBLE 下發的查詢會被 DBLE 自動下發給實際的物理庫,合併返回給客戶端,可以通過 explain 執行計劃觀察到下發的實際下發給物理庫的 SQL 語句。


 應用場景二:讀寫分離



DBLE 除了做數據的分片功能外,也支持讀寫分離功能;開啓讀寫分離功能後,可以將主實例上的讀壓力負載給原本 stand by 的從實例,從而擴展整個集羣的吞吐能力;


▽ 後端 MySQL 節點


我們再通過示例,演示 DBLE 的讀寫分離的功能。物理部署結構如下表:


備註:爲了演示簡單,這裏將實例都部署在了一臺機器上並用不同端口做區分,同學們也可以用三臺機器來做環境搭建。


此場景中,我們將 MySQL A 和 MySQL B 搭建成主從複製關係,同時我們只變更schema.xml 的配置來完成讀寫分離的架構;


▽ schema.xml


13.png


DBLE 通過 balance 參數來控制讀寫分離的負載策略,寫節點是否參與均衡與 datahost 的 balance 屬性有關,本案例中我們將值調整爲 balance=”3” ,並定義了 writeHost 和 readHost。 

balance 的定義具體見下圖:

▽ 驗證配置生效


通過 DBLE 管理入口 9066 登陸數據庫,注意這裏我們通過管理入口的 show @@datasource 來驗證讀寫分離的狀態的正確性;

session 1:

session 2:

session 1:


從 show @@datasource; 這個管理命令上我們能夠觀測到 READ_LOAD 在 slave節點上計數器增加了 5 次,也就是說讀流量順利的下發到了 slave 節點;當然大家也可以通過打開 MySQL 的 general log 來觀測讀寫分離的情況。


總結


本文通過兩個場景來講解 DBLE 的快速入門,希望通過簡單的示例來給大家梳理 DBLE 的基本概念,幫助大家快速熟悉和使用 DBLE 這個中間件;更高階的使用方法和細節建議大家參考官方文檔。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章