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 的安裝其實只要解壓下載的目錄就能夠了,很是簡單。
安裝完成後,目錄以下:
配置 DBLE
DBLE 的配置文件都在 conf 目錄裏面,這裏介紹幾個經常使用的文件:
應用場景一:數據拆分
▽ 後端 MySQL 節點
DBLE 的架構其實很好理解,DBLE 是代理中間件,DBLE 後面就是物理數據庫。對於使用者來講,訪問的都是 DBLE,不會接觸到後端的數據庫。
咱們先演示簡單的數據拆分的功能。物理部署結構以下表:
備註:爲了演示簡單,這裏將實例都部署在了一臺機器上並用不一樣端口作區分,同窗們也能夠用三臺機器來作環境搭建。
在MySQL A和MySQL B中建立庫表testdb.users來方便後續的驗證,表結構以下:
▽ server.xml
server.xml 裏能夠配置跟 DBLE 自身相關的許多參數,這裏重點只關注下面這段訪問用戶相關的配置,其餘默認便可;
第一段 「< system >」 爲 DBLE 的服務端口(默認8066)和管理端口(默認9066)的配置
第二段「< user >」配置管理理用戶,默認爲 man1,密碼爲 654321
第三段「< user >」配置業務用戶,配置了一個帳號 test 密碼 password,針對數據庫 testdb,讀寫權限都有,沒有針對表作任何特殊的權限,故把表配置作了註釋
▽ schema.xml
schema.xml 是最主要的配置項,咱們將 users 用戶表按照取模的方式平均拆分到了 MySQL A 和 MySQL B 兩個數據數據庫實例上, 詳細請看配置文件:
· schema 邏輯數據庫信息,此數據庫爲邏輯數據庫,name 與 server.xml 中 schema對應;
· dataNode 分片信息,此爲分片節點的定義;分片名字和schema的dataNode對應;分片與下面的dataHost 物理實例進行關聯;
· dataHost 物理實例組信息,dataHost下能夠掛載同組的讀寫物理實例節點,實現高可用或者讀寫分離;
每一個節點的重點屬性逐一說明:
屬性說明 :
· name 邏輯數據庫名,與 server.xml 中的 schema 對應;
· table:
子屬性說明 :
- name 表名,物理數據庫中表名
- dataNode 表存儲到哪些節點,多個節點用逗號分隔
- primaryKey 主鍵,用於主鍵緩存和自增識別,不做主鍵約束
- autoIncrement 是否自增
- rule 分片規則名,具體規則下文 rule 詳細介紹
屬性說明:
· name 節點名,與 table 中 dataNode 對應
· datahost 物理實例組名,與 datahost 中 name 對應
· database 物理數據庫中數據庫名;
屬性說明:
· 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 下發的查詢會被 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