開源分散式中介軟體 DBLE Server.xml 配置解析
DBLE 是基於開源專案MyCat發展的企業級開源分散式中介軟體,適用於高併發及TB級海量資料處理場景;江湖人送外號 “MyCat Plus”;其簡單穩定,持續維護,良好的社群環境和廣大的群眾基礎使DBLE得到了社群的大力支援。
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檔案的整體結構和內容有較為清晰的認識,方便大家能快速地入門。
DBLE的配置檔案都在conf目錄裡面,常用的幾個配置檔案如下:
DBLE是一個JAVA分庫分表中介軟體,既然是JAVA應用肯定會有JVM相關的配置,在DBLE中我們選擇wrapper來作為管理DBLE程序的工具,配置檔案在conf/wrapper.conf中,關於JVM的詳細介紹在wrapp.conf。
Server.xml配置解析
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許可權控制就顯得無能為力了,因此可行的建議是:
- 控制連線後端MySQL的使用者的許可權,將DBLE側的許可權完全放開,
- 換句話說只嚴格限制schema.xml的writehost中配置的連線使用者的許可權。 使用後面要講的黑名單提供的許可權控制。
黑白名單配置
針對上的許可權粒度略顯粗略的限制(事實上大多數場景下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>
對於黑白名單,需要注意:
- DBLE針對來源IP和使用者名稱進行限制,放行白名單連線,對於不在白名單列之中的連線,統統拒絕而無法登陸。白名單中的來源ip,只能指定固定IP, 暫不支援MySQL "%''類似的ip萬用字元。
想象一種場景,需要像MySQL一樣指定一個ip範圍能允許連線DBLE,這時只能一行一行增加允許ip了,此處略顯笨拙。 - 如果配置了黑名單,則再根據黑名單中的許可權property來進一步限制白名單中的使用者許可權,例如是否允許查詢,是否允許INSERT,是否允許UPDATE。可以看出DBLE中黑名單更像是對使用者的許可權審計,DBLE在黑名單中將上面只能粗糙地限制到DML許可權的使用者配置做了較多較細的擴充套件,這樣許可權粒度更小,從實際場景來說,這更符合生產需要,由此我們可以針對性地去掉一些危險的SQL。
總結
本文簡單介紹了Server.xml中的三個重要的配置段落,分別是DBLE的系統配置,使用者配置以及黑白名單功能,針對使用者配置則介紹了實際應用場景下的配置以及對應的DML許可權配置,並詳細介紹了DBLE黑白名單配置實踐。