開源分佈式中間件 DBLE Server.xml 配置解析

DBLE是基於開源項目MyCat發展的企業級開源分佈式中間件,適用於高併發及TB級海量數據處理場景;江湖人送外號 “MyCat Plus”;其簡單穩定,持續維護,良好的社區環境和廣大的羣衆基礎使DBLE得到了社區的大力支持。


DBLE項目介紹


DBLE 官方項目:
github.com/actiontech/d
如對源碼有興趣或者需要定製的功能的可以通過源碼編譯安裝
DBLE 下載地址:
github.com/actiontech/d
DBLE 官方社區交流羣:669663113

DBLE的主要配置文件


前兩篇文章"DBLE Rule.xml 配置解析""DBLE Schema.xml 配置解析" 分別介紹DBLE中Rule.xml和Schema.xml的配置,今天繼續介紹DBLE中Server.xml文件的配置,希望通過本篇的介紹,能對Server.xml文件的整體結構和內容有較爲清晰的認識,方便大家能快速地入門。

DBLE的配置文件都在conf目錄裏面,常用的幾個配置文件如下:

文件說明server.xmlDBLE server相關參數定義,包括dble性能,定時任務,端口,用戶配置等schema.xmlDBLE具體分片定義,規定table和schema以及dataNode之間的關係,指定每個表格使用哪種類型的分片方法,定義每個dataNode的連接信息等rule.xmlDBLE實際用到的分片算法的配置

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定位,以下簡單列出了一些最重要的也是最基礎的功能配置。

property作用serverPort業務用戶連接端口managerPort管理用戶連接端口charset字符集maxCon控制最大連接數processorsNIO前端處理器的數量,默認java虛擬機核數enableSlowLog是否允許慢查詢,默認不開啓sqlSlowTime慢查詢閾值,類似MySQL中的long_query_time,單位是毫秒。


用戶配置


用戶配置在<user>段進行配置,因爲在Schema.xml中允許多個schema的存在,因此業務用戶也是允許多個用戶同時存在,並且還可以給這些用戶進行更小粒度的權限劃分。


以實際場景來舉例,比如當前配置了兩個邏輯庫advmotor,分別是汽車和廣告業務,這兩個庫直接沒有任何的關聯,因此需要分別配置兩個用戶來使用這兩個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,它對motoradv庫都需要有權限訪問,別擔心,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, updateselect權限, 即如果沒有像tb01那樣詳細地列出來的情況,所有表的權限繼承權限1110,上面例子中,ta01作爲特殊指定的邏輯表的權限,adv_user對該表的權限是1111


我們可以看到DBLE可以將權限劃分到DML,並且是可以精確到某一邏輯表級別,對於只需要DML權限的場景是足夠了,但是這種權限控制還是很粗略,比如如果想讓adv_user除了有dml權限之外,還需要有drop table權限,這時候在用DBLE的privileges權限控制就顯得無能爲力了,因此可行的建議是:


  1. 控制連接後端MySQL的用戶的權限,將DBLE側的權限完全放開, 換句話說只嚴格限制schema.xml的writehost中配置的連接用戶的權限。

  2. 使用後面要講的黑名單提供的權限控制。


黑白名單配置


針對上的權限粒度略顯粗略的限制(事實上大多數場景下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>



對於黑白名單,需要注意:


  1. DBLE針對來源IP和用戶名進行限制,放行白名單連接,對於不在白名單列之中的連接,統統拒絕而無法登陸。 白名單中的來源ip,只能指定固定IP, 暫不支持MySQL "%''類似的ip通配符。

想象一種場景,需要像MySQL一樣指定一個ip範圍能允許連接DBLE,這時只能一行一行增加允許ip了,此處略顯笨拙。

  1. 如果配置了黑名單,則再根據黑名單中的權限property 來進一步限制白名單中的用戶權限,例如是否允許查詢,是否允許INSERT,是否允許UPDATE。可以看出DBLE中黑名單更像是對用戶的權限審計,DBLE在黑名單中將上面只能粗糙地限制到DML權限的用戶配置做了較多較細的擴展,這樣權限粒度更小,從實際場景來說,這更符合生產需要,由此我們可以針對性地去掉一些危險的SQL。

總結


本文簡單介紹了Server.xml中的三個重要的配置段落,分別是DBLE的系統配置,用戶配置以及黑白名單功能,針對用戶配置則介紹了實際應用場景下的配置以及對應的DML權限配置,並詳細介紹了DBLE黑白名單配置實踐。


往期精選

| 社區投稿

DBLE和Mycat跨分片查詢結果不一致案例分析

DBLE 自定義拆分算法

DBLE rule.xml 配置解析

| 使用指南

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

DBLE Schema.xml 配置解析

| 社區活動

如何獲取全國 25場 MySQL 主題大會免費入場券





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