DBLE是基於開源項目MyCat發展的企業級開源分佈式中間件,適用於高併發及TB級海量數據處理場景;江湖人送外號 「MyCat Plus」;其簡單穩定,持續維護,良好的社區環境和廣大的羣衆基礎使DBLE獲得了社區的大力支持。git
DBLE項目介紹github
DBLE 官方項目:
https://github.com/actiontech...
如對源碼有興趣或者須要定製的功能的能夠經過源碼編譯安裝
DBLE 下載地址:
https://github.com/actiontech...
DBLE 官方社區交流羣:669663113
DBLE的主要配置文件算法
前兩篇文章"DBLE Rule.xml 配置解析"、"DBLE Schema.xml 配置解析" 分別介紹DBLE中Rule.xml和Schema.xml的配置,今天繼續介紹DBLE中Server.xml文件的配置,但願經過本篇的介紹,能對Server.xml文件的總體結構和內容有較爲清晰的認識,方便你們能快速地入門。sql
DBLE的配置文件都在conf目錄裏面,經常使用的幾個配置文件以下:後端
DBLE是一個JAVA分庫分表中間件,既然是JAVA應用確定會有JVM相關的配置,在DBLE中咱們選擇wrapper來做爲管理DBLE進程的工具,配置文件在conf/wrapper.conf中,關於JVM的詳細介紹在wrapp.conf。併發
Server.xml配置解析app
Server.xml是DBLE的重要配置文件之一, 總體配置能夠分爲三段,<system>段,<user>段和<firewall>段,分別定義了DBLE軟件的相關配置,用戶配置和針對用戶的權限控制功能。分佈式
<dble:server> <system></system> <user></user> <firewall> <whitehost></whitehost> </firewall> </dble:server>
關於配置文件,若是在DBLE運行途中修改了配置,要想配置動態生效,只須要使用reload @@config命令,可是須要提醒的是reload @@config對Server.mxl中的<system>段中的內容沒法生效,即若是修改了server.xml的system的配置,須要從新啓動DBLE使其生效 ,更多關於DBLE管理命令請參考DBLE管理端命令高併發
一樣以思惟導圖的方式概括以下,其中個別參數配置只是粗略地將最重要的參數羅列出來,詳細的參數還請參考官方文檔。工具
system配置
DBLE經過Server.xml配置文件來定義相關管理行爲,如監聽端口,sql統計和控制鏈接行爲等功能,DBLE除了支持分庫分表功能外,還實現了相似MySQL的慢查詢日誌功能,而且支持使用pt-query-digest這樣的工具進行慢查詢SQL分析,極大地方便了DBA的SQL性能分析與問題SQL定位,如下簡單列出了一些最重要的也是最基礎的功能配置。
用戶配置
用戶配置在<user>段進行配置,由於在Schema.xml中容許多個schema的存在,所以業務用戶也是容許多個用戶同時存在,而且還能夠給這些用戶進行更小粒度的權限劃分。
以實際場景來舉例,好比當前配置了兩個邏輯庫adv和motor,分別是汽車和廣告業務,這兩個庫直接沒有任何的關聯,所以須要分別配置兩個用戶來使用這兩個schema,一個是adv_user,另外一個是motor_user,這兩個用戶登陸上去DBLE能看到只有本身的schema,其餘schema不可見,兩個用戶的配置以下:
<user name="adv_user"> <property name="password">adv_user</property> <property name="schemas">adv</property> <property name="readOnly">false</property> </user> <user name="motor_user"> <property name="password">motor_user</property> <property name="schemas">motor</property> <property name="readOnly">false</property> </user>
可是你可能會想萬一這兩個庫之中的表有關聯查詢呢?對應場景是:咱們須要有個用戶叫adv_motor_user,它對motor和adv庫都須要有權限訪問,別擔憂,DBLE提供了對單個用戶能夠訪問多個schema的配置方式,咱們能夠在schemas中指定多個schema,之間用逗號分隔,配置生效後使用這個用戶就能登陸看到兩個schema。
<user name="adv_motor_user"> <property name="password">adv_motor_user</property> <property name="schemas">motor,adv</property> <!--多個邏輯庫之間使用逗號分隔,這些邏輯庫必須在Schema.xml中定義--> <property name="readOnly">false</property> <!--用來作只讀用戶--> </user>
你可能還會想,這樣的權限粒度依然不夠細,咱們須要更細粒度的權限控制,好比須要adv_user的權限僅限於增刪改查權限,即須要將權限細分到dml語句, DBLE仍然提供這樣的配置,咱們能夠繼續增長privileges的配置,以下圖示:
<user name="adv_user"> <property name="password">adv_user</property> <property name="schemas">adv</property> <property name="readOnly">false</property> <privileges check="true"> <schema name="adv" dml="1110" > <!-- 默認庫中全部邏輯表的繼承權限 --> <table name="tb01" dml="1111"></table> <!-- 單獨指定表權限 --> </schema> </privileges> </user>
privileges的check參數做用因而否對用戶權限進行檢查,默認是不檢查,dml的權限是分別是INSERT UPDATE SELECT DELETE四種權限,用4個數字0或1的組合來表示是否開啓, 1表示開啓,0表示關閉。
在上圖中, adv_user對adv庫中全部表的默認權限是'1110', 即只有insert, update和select權限, 即若是沒有像tb01那樣詳細地列出來的狀況,全部表的權限繼承權限1110,上面例子中,ta01做爲特殊指定的邏輯表的權限,adv_user對該表的權限是1111。
咱們能夠看到DBLE能夠將權限劃分到DML,而且是能夠精確到某一邏輯表級別,對於只須要DML權限的場景是足夠了,可是這種權限控制仍是很粗略,好比若是想讓adv_user除了有dml權限以外,還須要有drop table權限,這時候在用DBLE的privileges權限控制就顯得無能爲力了,所以可行的建議是:
黑白名單配置
針對上的權限粒度略顯粗略的限制(事實上大多數場景下DML的權限也已經足夠了),DBLE提供黑白名單的功能,白名單就是隻容許白名單的鏈接,而黑名單則是詳細的針對已經經過白名單的鏈接的權限控制,黑名單更相似於SQL審計, 黑名單配置以firewall分隔開來, 典型配置以下:
<firewall> <whitehost> <host host="127.0.0.1" user="adv_user"/> <host host="127.0.0.1" user="admin"/> </whitehost> <blacklist check="true"> <property name="selelctAllow">false</property> <!-- 容許select--> <property name="insertAllow">false</property> <!-- 容許insert--> <property name="updateAllow">false</property> ...... </blacklist> </firewall>
對於黑白名單,須要注意:
總結
本文簡單介紹了Server.xml中的三個重要的配置段落,分別是DBLE的系統配置,用戶配置以及黑白名單功能,針對用戶配置則介紹了實際應用場景下的配置以及對應的DML權限配置,並詳細介紹了DBLE黑白名單配置實踐。
往期精選
| 社區投稿
DBLE和Mycat跨分片查詢結果不一致案例分析
DBLE 自定義拆分算法
DBLE rule.xml 配置解析
| 使用指南
開源分佈式中間件 DBLE 快速入門指南
DBLE Schema.xml 配置解析
| 社區活動