更新CDH5的JDK后操作失误,Cloudera Manager无法启动求助
修复Cloudera Manager无法启动及ZooKeeper启动失败问题
兄弟,你这操作确实有点猛——kill -9 PostgreSQL绝对是数据库操作的大忌,很容易搞坏数据。我之前也踩过类似的坑,给你一步步梳理修复方案:
先搞定Cloudera Manager(CM)无法启动的问题
首先得搞清楚CM用的是内置数据库还是外部数据库,这决定了后续的修复方向:
第一步:确认CM的数据库配置
先看CM的数据库配置文件,执行:
cat /etc/cloudera-scm-server/db.properties
重点看com.cloudera.cmf.db.type和com.cloudera.cmf.db.host这两个字段:
- 如果
db.host是localhost且db.type是postgresql,那就是内置的CM数据库; - 如果是其他主机IP,那就是用了外部PostgreSQL。
情况1:用的是内置CM数据库
你之前启动cloudera-scm-server-db报错,大概率是kill -9把PostgreSQL进程干死导致数据损坏了,按下面步骤修复:
- 先停掉所有相关服务,避免冲突:
service cloudera-scm-server stop service cloudera-scm-agent stop
- 清掉PostgreSQL的残留进程(如果还有的话):
ps aux | grep postgres | grep -v grep | awk '{print $2}' | xargs kill -9
- 强制重新初始化内置数据库(注意:如果之前CM里有重要的集群配置备份,先手动备份下数据库目录
/var/lib/cloudera-scm-server-db/!):
/opt/cloudera/cm/schema/scm_prepare_database.sh postgresql scm scm scm --force
这里的参数依次是:数据库类型、库名、用户名、密码,--force会覆盖损坏的库文件。
4. 启动内置数据库服务:
service cloudera-scm-server-db start
- 启动CM Server:
service cloudera-scm-server start
- 等个3-5分钟,看看CM网页能不能正常访问,也可以用
service cloudera-scm-server status查状态。
情况2:用的是外部PostgreSQL数据库
那你之前kill的可能是本地的postgres进程?或者外部数据库被你搞停了?按下面来:
- 先登录到外部数据库主机,启动PostgreSQL服务:
# 老系统用service service postgresql start # 新系统用systemctl systemctl start postgresql
- 回到CM主机,检查数据库连接配置是否正确:
再核对一遍/etc/cloudera-scm-server/db.properties里的db.host、db.port、db.user、db.password,确保和外部数据库的配置一致。 - 测试CM主机到外部数据库的连通性:
# 用telnet测端口 telnet <外部DB的IP> 5432 # 或者用psql直接连 psql -h <外部DB的IP> -U scm -d scm
如果连不上,先解决网络防火墙或者数据库用户权限的问题。
4. 启动CM Server:
service cloudera-scm-server start
- 如果还是启动失败,看CM日志找原因:
tail -n 100 /var/log/cloudera-scm-server/cloudera-scm-server.log
日志里会明确告诉你是连接失败还是权限问题,针对性调整就行。
搞定CM后,回头解决ZooKeeper启动失败的问题
CM恢复正常后,回到最初的ZK启动失败,这基本是JDK升级后的环境问题:
- 检查所有集群节点的JDK环境:
确保每个节点的JAVA_HOME都指向新的jdk1.8.0_151,PATH里优先加载新JDK的bin目录(可以用echo $JAVA_HOME和java -version验证)。 - 检查CM里ZK的JDK配置:
登录CM网页,进入ZooKeeper服务的配置页面,找到Java Home选项,确认是否已经更新为新的JDK路径,或者是否继承了集群的全局JDK配置。 - 检查ZK数据目录的权限:
ZK的数据目录默认是/var/lib/zookeeper,确保所有者是zookeeper用户,权限正确:
chown -R zookeeper:zookeeper /var/lib/zookeeper chmod -R 700 /var/lib/zookeeper
- 看ZK的启动日志找具体错误:
在CM网页里查看ZK的日志,或者直接到ZK节点上看:
tail -n 100 /var/log/zookeeper/zookeeper.log
比如如果是JDK版本不兼容、端口被占用、数据快照损坏,日志里都会写得很清楚,照着修复就行。
最后给你提个醒
- 以后绝对不要用
kill -9终止数据库进程,正常用service postgresql stop或者systemctl stop postgresql,强制杀进程很容易搞坏数据文件,修复起来麻烦得很。 - 升级JDK的时候,一定要确保所有集群节点的JDK版本完全一致,并且CM和所有服务的JDK配置都同步更新,不然很容易出现这种启动失败的问题。
内容的提问来源于stack exchange,提问作者Chuang
相关产品推荐
相关产品推荐

