项目场景:
Druid集群规划:
centos 01:coordinator,overlord
centos 02:historical,middle_manager
centos 03:router,broker
注:apache druid是一个时序数据库,并非阿里的druid数据库连接池。同时,druid 需要安装MySQL,以此储存元数据。
问题描述1:
druid 启动时报错:
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/usr/local/mysql/tmp/mysql.sock’
原因分析:
这是由于druid 启动服务后会将元数据存储进入MySQL,但是MySQL连接失败导致的异常。一般情况下,如果 MySQL 服务启动正常的话,是由于 *.pid 文件未生成造成的,pid 文件是记录服务启动的进程号的文件。
解决方案:
可以使用以下两个方法之一(建议选择第二个,第一个治标不治本): 1. 手动创建 hostname.pid 文件(如:centos 01.pid)。同时,在文件里写入当前并不存在的一个进程号。保存后启动服务。(但是,这样的方法每次启动都需要手动创建 pid 文件,因为启动服务后该文件会被删除) 2. 编辑/etc/init.d/mysql,找到start模块,添加--user=root到mysqld_safe 即可问题描述2:
druid 启动时报错:
Unknown provider[mysql] of Key[type=io.druid.metadata.MetadataStorageConnector, annotation=[none]], known options[[derby]
原因分析:
这是由于druid 指定 Mysql 存储metadata信息,而缺少相关配置信息或者连接的 jar 包所导致的错误。
解决方案:
需要在 config/_common/common.runtime.properties 内加入关于配置MySQL储存数据的配置信息;下载并导入 Mysql 的 jdbc 的 jar 包到 extensions/mysql-metadata-storage/中druid.extensions.loadList=["mysql-metadata-storage"]
问题描述3:
druid 启动时报错:
java.sql.SQLException: null, message from server: “Host ‘***.***.***.***’ is not allowed to connect this Mysql server”
原因分析:
这是表示该对象不是远程对象,不能通过该对象远程访问数据。也就是说需要配置允许远程连接。
解决方案:
'root'@'%' : root是用户名,%是主机名或IP地址,这里的%代表任意主机或IP地址;第二个'root'是给授权用户指定的登录数据库的密码。grant all privileges on *.* to 'root'@'%' identified by 'root';
问题描述4:
druid 启动时报错:
Not enough direct memory. Please adjust -XX:MaxDirectMemorySize, druid.processing.buffer.sizeBytes, druid.processing.numThreads, or druid.processing.numMergeBuffers: maxDirectMemory[134,217,728], memoryNeeded[4,194,304,000] = druid.processing.buffer.sizeBytes[524,288,000] * (druid.processing.numMergeBuffers[6] + druid.processing.numThreads[1] + 1)
原因分析:
这是由于分配的内存资源不合理,不符合 MaxDirectMemorySize >= druid.processing.buffer.sizeBytes[536,870,912] * (druid.processing.numMergeBuffers[2] + druid.processing.numThreads[2] + 1) 的公式。
解决方案:
需要重新分配内存资源,主要是各个 jvm 内存值、并发线程数需要调整。在以下各个文件中调整对应的属性的值。vim conf/druid/cluster/master/coordinator-overlord/jvm.config
vim conf/druid/cluster/data/historical/jvm.config
vim conf/druid/cluster/data/historical/runtime.properties
vim conf/druid/cluster/data/middleManager/jvm.config
vim conf/druid/cluster/data/middleManager/runtime.properties
vim conf/druid/cluster/query/broker/jvm.config
vim conf/druid/cluster/query/broker/runtime.properties
vim conf/druid/cluster/query/router/jvm.config
vim conf/druid/cluster/query/router/runtime.properties
问题描述5:
druid 启动时报错:
ERROR [main] org.apache.druid.cli.CliHistorical - Error when starting up. Failing. com.google.inject.ProvisionException: Unable to provision, see the following errors:1) Error in custom provider, java.lang.OutOfMemoryError.
原因分析:
内存泄露异常,配置的 historical 内存不合理。