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黑白名单配置实践。