作者:吴金玲
爱可生 dble 项目团队成员,主要负责 dble 相关的日常测试工作,擅长对 dble 中出现的问题进行排查。热爱测试工作,余生欲将测试工作进行到底。
本文来源:原创投稿
*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。
本文谨献给 dble 的新粉。在初次使用 dble 的时候,新手们经常会遭遇 dble 启动失败的情况,而且启动失败一般都是由于配置不正确导致的。众所周知,dble 启动失败了,我们可以去 wrapper.log 里面查找启动失败的原因,并且可喜的是一般都能从 wrapper.log 里很直观的找到启动失败的原因。但少数启动失败的原因就不是那么直观,要想快速的定位及解决问题,那就需要我们对dble启动时具体都做了些什么有所了解。本文以 3.22.01.0 版本为例,简单介绍一下 dble 在启动的时候是如何对配置文件的正确性进行校验的。
具体如何配置请参考 dble 的官方文档:https://actiontech.github.io/dble-docs-cn/1.config_file/1.00_config_file.html 。
一、首先让我们简单了解一下 dble 都有哪些配置文件,以及他们的主要作用是什么下载 3.22.01.0 版本的安装压缩包,解压后进入 dble 安装目录的根目录,里面有个 conf 的配置文件目录(常用的配置文件里面都有模板文件),从配置文件目录可知,dble 主要分为4种类型的配置文件(.cnf、.xml、.properties、.txt),每个配置文件的主要作用如下表:
文件名 | 主要作用 | 注意点 | 参考链接 |
cluster.cnf | 集群参数配置文件 | 修改此文件需要停止多个dble实例,重新初始化集群元数据,然后再逐个启动dble | https://actiontech.github.io/dble-docs-cn/1.config_file/1.01_cluster.cnf.html |
bootstrap.cnf | dble实例启动时加载的系统参数配置文件 | 文件分为两部分,第一部分为JVM启动参数,第二部分为dble系统参数 | https://actiontech.github.io/dble-docs-cn/1.config_file/1.02_bootstrap.cnf.html |
bootstrap.dynamic.cnf | 一般为可以通过管理命令热生效的系统参数 | 当dble重启时会替换bootstrap.cnf中对应的值来生效配置 | https://github.com/actiontech/dble-docs-cn/blob/master/1.config_file/1.02_bootstrap.cnf.md |
user.xml | 登录用户配置文件(dble主要分四种用户) | 主要注意sql权限和ip白名单的配置 | https://actiontech.github.io/dble-docs-cn/1.config_file/1.03_user.xml.html |
db.xml | 后端数据库和组的配置文件 | 为了dble能正常工作,后端MySQL用户需开启特定的权限 | https://actiontech.github.io/dble-docs-cn/1.config_file/1.04_db.xml.html |
sharding.xml | 虚拟库、表、算法的配置文件 | 注意全局序列的配置方法 | https://actiontech.github.io/dble-docs-cn/1.config_file/1.05_sharding.xml.html |
sequence_conf.propertie | 分布式offset-step方式的全局序列配置文件 | 结合cluster.cnf配置,sequenceHandlerType=4 | https://actiontech.github.io/dble-docs-cn/1.config_file/1.7_global_sequence/1.7.4_distribute_offset-step.html |
sequence_db_conf.properties | MySQL-offset-step方式的全局序列配置文件 | 结合cluster.cnf配置,sequenceHandlerType=1 | https://actiontech.github.io/dble-docs-cn/1.config_file/1.7_global_sequence/1.7.1_MySQL-offset-setp.html |
.txt文件 | 不同分片算法对应的配置文件 | 常用,需要时可参照文档配置 | https://actiontech.github.io/dble-docs-cn/1.config_file/1.05_sharding.xml.html |
log4j2.xml | 日志归档规则及日志记录级别配置 | 当出错时可将日志级别调整为debug来定位详细的错误信息 | https://actiontech.github.io/dble-docs-cn/1.config_file/1.06_log4j2.xml.html |
cacheservice.properties | dble的cache的总配置文件 | 不常用,需要时可自行参照文档配置 | https://actiontech.github.io/dble-docs-cn/1.config_file/1.8_cache/1.8.1_cache_setting.html |
ehcache.xm | dble的缓存实现配置文件 | 不常用,需要时可自行参照文档配置 | https://actiontech.github.io/dble-docs-cn/1.config_file/1.8_cache/1.8.2_ehcache_setting.html |
$DBLE_HOME/lib目录下jar包 | 自定义拆分算法文件 | 不常用,需要时可自行参照文档配置 | https://actiontech.github.io/dble-docs-cn/1.config_file/1.09_dble_route_function_spec.html |
dble_alert.properties | 自定义告警配置文件 | 不常用,需要时可自行参照文档配置 | https://actiontech.github.io/dble-docs-cn/1.config_file/1.11_customized_alert.html |
进入 dble 安装的根目录,执行 dble 启动命令 bin/dble start ,然后执行 bin/dble status 查看 dble 的状态,发现启动失败了:
进入 wrapper.log 中查看,发现报错如下:
从日志中可以看出,报错是由于22端口被占用。这是由于 dble 在启动的时候会初始化一个虚拟机,从 bootstrap.cnf 读取 JVM 参数。dble 启动过程中会占用三个端口:业务端口(默认8066),管理端口(默认9066),jvm 对外提供 jmx 服务端口,所以配置的时候这三个端口不能相同,且不能被其他程序占用。具体参考:https://actiontech.github.io/dble-docs-cn/A.Faq/ErrorCode/Content/PortAlreadyInUse1984.html 。所以将端口改为未被占用的端口即可启动成功。
2.再以以下 boostrap.cnf 配置启动(其他配置文件请按需配置,此处省略):