Cloudera集群安装报错:未检测到主机上运行的数据库服务器
解决Cloudera集群安装中“No database server found running on host server”报错的方案
先别慌,这个报错大概率是数据库连通性、权限或者服务配置的问题,咱们一步步来排查:
首先确认数据库服务是否正常运行
登录到数据库所在的主机(看你的描述应该是Cloudera Manager节点),执行对应数据库的状态检查命令:- 如果是MySQL/MariaDB:
systemctl status mysqld - 如果是PostgreSQL:
systemctl status postgresql
如果服务没启动,先启动它:systemctl start mysqld,顺便设置开机自启避免后续麻烦:systemctl enable mysqld
- 如果是MySQL/MariaDB:
检查网络连通性
从Cloudera Manager节点测试能不能访问数据库的端口,比如MySQL默认3306端口:nc -zv <数据库主机IP> 3306
如果返回“Connection refused”,说明网络不通,先确认主机间的IP是否能ping通,再检查端口是否被占用或者防火墙拦截。核对数据库权限配置细节
你已经执行了授权命令,但还有几个关键点要确认:- 检查数据库的配置文件(比如MySQL的
/etc/my.cnf或/etc/mysql/my.cnf),看bind-address是不是设成了0.0.0.0(允许所有IP远程连接),如果是127.0.0.1的话,只能本地访问,修改后记得重启数据库服务。 - 执行授权命令后,一定要刷新权限让配置生效:
FLUSH PRIVILEGES; - 确认你授权的数据库名称和实际创建的一致,比如你授权的是
hive.*,那要确保已经创建了hive数据库:CREATE DATABASE hive;
- 检查数据库的配置文件(比如MySQL的
排查防火墙和SELinux的拦截
- 防火墙:如果用firewalld,开放数据库端口:
firewall-cmd --add-port=3306/tcp --permanentfirewall-cmd --reload
如果是iptables,也要对应添加开放端口的规则。 - SELinux:临时关闭测试一下:
setenforce 0,如果关闭后能正常连接,再修改/etc/selinux/config里的SELINUX=permissive来永久生效(不建议直接关闭,也可以配置SELinux规则允许数据库远程连接)。
- 防火墙:如果用firewalld,开放数据库端口:
确认JDBC驱动是否正确部署
Cloudera Manager需要对应数据库的JDBC驱动才能连接,比如MySQL的话,要把mysql-connector-java.jar放到/usr/share/java/目录下,并且设置正确的权限:chmod 644 /usr/share/java/mysql-connector-java.jar,注意驱动版本要和你的数据库版本兼容。检查主机名解析
确保所有节点的/etc/hosts文件里都正确配置了数据库主机的IP和主机名映射,比如添加一行:<数据库主机IP> <数据库主机名>,然后在CM节点执行ping <数据库主机名>,确认能解析到正确的IP。
按照上面的步骤逐一排查,应该就能解决这个连接问题了。
内容的提问来源于stack exchange,提问作者Saurabh Rana
相关产品推荐
相关产品推荐

