DBLE項目介紹html
DBLE官方網站:前端
https://opensource.actionsky.com java
能夠詳細瞭解DBLE的背景和應用場景,本文不涉及到的細節均可在官方文檔得到更多信息;對於剛瞭解的同窗,本文能夠做爲快速入門的基礎git
DBLE 官方項目:github
https://github.com/actiontech/dble算法
如對源碼有興趣或者須要定製的功能的能夠經過源碼編譯安裝sql
DBLE 下載地址:後端
https://github.com/actiontech/dble/releasesapp
DBLE 官方社區交流羣:669663113ide
DBLE的主要配置文件
前兩篇文章"DBLE Rule.xml 配置解析"、"DBLE Schema.xml 配置解析" 分別介紹DBLE中Rule.xml和Schema.xml的配置,今天繼續介紹DBLE中Server.xml文件的配置,但願經過本篇的介紹,能對Server.xml文件的總體結構和內容有較爲清晰的認識,方便你們快速入門。
DBLE的配置文件都在conf目錄裏面,經常使用的幾個配置文件以下:
文件 | 說明 |
---|---|
server.xml | DBLE server相關參數定義,包括dble性能,定時任務,端口,用戶配置等 |
schema.xml | DBLE具體分片定義,規定table和schema以及dataNode之間的關係,指定每一個表格使用哪一種類型的分片方法,定義每一個dataNode的鏈接信息等 |
rule.xml | DBLE實際用到的分片算法的配置 |
DBLE是一個JAVA分庫分表中間件,既然是JAVA應用確定會有JVM相關的配置,在DBLE中咱們選擇wrapper來做爲管理DBLE進程的工具,配置文件在conf/wrapper.conf
中,關於JVM的詳細介紹在wrapp.conf。
wrapp.conf:
https://actiontech.github.io/dble-docs-cn/1.config_file/1.4_wrapper.conf.html
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管理端命令。
管理端命令:
https://actiontech.github.io/dble-docs-cn/2.Function/2.01_manager_cmd.html
一樣以思惟導圖的方式概括以下,其中個別參數配置只是粗略地將最重要的參數羅列出來,詳細的參數還請參考官方文檔。
system配置
DBLE經過Server.xml配置文件來定義相關管理行爲,如監聽端口,sql統計和控制鏈接行爲等功能,DBLE除了支持分庫分表功能外,還實現了相似MySQL的慢查詢日誌功能,而且支持使用pt-query-digest這樣的工具進行慢查詢SQL分析,極大地方便了DBA的SQL性能分析與問題SQL定位,如下簡單列出了一些最重要的也是最基礎的功能配置。
property | 做用 |
serverPort |
業務用戶鏈接端口 |
managerPort |
管理用戶鏈接端口 |
charset |
字符集 |
maxCon |
控制最大鏈接數 |
processors |
NIO前端處理器的數量,默認java虛擬機核數 |
enableSlowLog |
是否容許慢查詢,默認不開啓 |
sqlSlowTime |
慢查詢閾值,相似MySQL中的long_query_time,單位是毫秒 |
用戶配置
用戶配置在<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黑白名單配置實踐。