“The CM is using external DB” bug的解决办法

上周升级CDH5的jdk 从1.8_131到1.8_151,照常升完之后重启集群,结果集群挂了。
无奈手动命令行关闭集群所有服务然后重启。

service cloudera-scm-server-db stop
service cloudera-scm-server stop
service cloudera-scm-agent stop

然后就启动不了。
系统报错显示,缺了几个必要的日志文件
推测可能是强行重启导致的文件丢失

进一步,自己手动添加缺失的log文件。
起初,我是用root添加的,并未授予777权限,导致日志无法被写入,总是空的。
后来,索性登入cloudera-scm账户,创建日志文件,至此才从日志文件中发现了出问题的地方。

日志文件的目录
/var/log/cloudera-scm-server
/var/log/cloudera-scm-server-db
/var/log/cloudera-scm-agent

OK,到达这一步,server和agent服务已经可以正常启动了。但是postgresql还是有问题。迷瞪了好久,就是下面这个错误。

Starting cloudera-scm-server-db (via systemctl): Job for cloudera-scm-server-db.service failed because the control process exited with error code. See "systemctl status cloudera-scm-server-db.service" and "journalctl -xe" for details

后来发现集群使用的是内嵌的postgre数据库,而网上大部分人使用的都是外部的数据库(postgre,mysql等等等等)。
之前我排查数据库不能启动的原因时,尝试使用如下方式连接postgresql数据库。

/usr/share/cmf/schema/scm_prepare_database.sh postgresql scm scm scm_password

但是查阅cloudera官方文档发现,这条命令是针对外部数据库的!!!,会更改数据库的配置文件:

cat /etc/cloudera-scm-server/db.properties
Auto-generated by scm_prepare_database.sh
#
Sat Oct 1 12:19:15 PDT 201
#
com.cloudera.cmf.db.type=postgresql
com.cloudera.cmf.db.host=localhost
com.cloudera.cmf.db.name=scm
com.cloudera.cmf.db.user=scm
com.cloudera.cmf.db.password=scm_password
com.cloudera.cmf.db.setupType=EXTERNAL

上边是被改过的,可以看到postgre默认的7432端口变成了localhost,数据库类型也变成了EXTERNAL,这就是报External错误的原因。改一改,改成下面这个样子,

#vim cat /etc/cloudera-scm-server/db.properties
Auto-generated by scm_prepare_database.sh
Sat Oct 1 12:19:15 PDT 201
com.cloudera.cmf.db.type=postgresql
com.cloudera.cmf.db.host=localhost:7432
com.cloudera.cmf.db.name=scm
com.cloudera.cmf.db.user=scm
com.cloudera.cmf.db.password=scm_password
com.cloudera.cmf.db.setupType=EMBEDDED

如果发现不知道scm的密码,还可以改改密码,挺方便的。
至此,重启所有服务就OK啦。

Tips:

  1. service --status-all 可以查看所有服务的运行状态。例如postgre is running 这种。
  2. 登入到cloudera-scm 账户时,发现他是不可登陆的,通过cat/etc/passwd查看发现cloudera-scm:x:998:996:Cloudera Manager:/var/lib/cloudera-scm-server:/sbin/nologin,把/sbin/nologin 改成/bin/bash就好了。
  3. cloudera 官方的问答社区挺好用的,有了bug 会有官方的工作人员给你解答,这个十分nice!
  4. 每次对系统操作的时候一定要慎重!不要像我一样,网上大部分人用的外部数据库,我不假思索就用了外部数据库的操作,导致浪费了那么多时间!尤其集群不是自己搭建的这种,更要注意。
阅读 2.5k

推荐阅读
Spark学习之路
用户专栏

从数据分析开始,自学spark经验分享

0 人关注
2 篇文章
专栏主页