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

GitHub:https://github.com/actiontech/dblejava

官方中文文檔:https://actiontech.github.io/dble-docs-cn/mysql

1、環境準備git

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

環境準備

 

DBLE 項目資料github

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 環境sql

DBLE 是使用 java 開發的,因此啓動 DBLE 須要先在機器上安裝 java 版本 1.8 或以上,而且確保 JAVA_HOME 參數被正確的設置;數據庫

這裏經過 yum 源的方式安裝 openjdk ,同窗們能夠自行 google jdk 的幾百種安裝方式,這裏再也不贅述;後端

確認 java 環境已配置完成;緩存

安裝 DBLEsession

DBLE 的安裝其實只要解壓下載的目錄就能夠了,很是簡單。

  • 經過此鏈接下載最新安裝包:https://github.com/actiontech/dble/releases
  • 解壓並安裝 DBLE 到指定文件夾中

安裝完成後,目錄以下:

配置 DBLE

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

應用場景一:數據拆分

▽ 後端 MySQL 節點

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

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

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

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

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 語句

schema.xml

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

  • 參數說明

· 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 ,配置以下:

驗證配置生效

  • 啓動 DBLE

  • 經過 DBLE 流量入口 8066 登錄數據庫

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

  • 獲取 MySQL A 和 MySQL B 的記錄

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

應用場景二:讀寫分離

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

▽ 後端 MySQL 節點

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

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

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

▽ schema.xml

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 這個中間件;更高階的使用方法和細節建議你們參考官方文檔。

 

轉載自:http://www.sohu.com/a/291248428_100251585

相關文章
相關標籤/搜索