天天看点

my.ini修改后服务无法启动_0520-如何使用非root用户启动CM的Server和Agent服务1.文档编写目的2.修改cloudera-scm-agent服务2.1.移除agent服务2.2.修改启动脚本2.3.手动启动agent服务3.修改cloudera-scm-server服务3.1.停止server服务3.2.手动启动server服务4.总结

1.文档编写目的

根据前面的安装文档,我们知道CDH的安装只能使用root或者具有sudo权限的用户进行安装,但大多数企业对于服务器的root用户的管控比较严格,大多数情况下都不能够直接使用或者需要申请比较麻烦。对于这种情况,Cloudera官方提供了一种单用户安装CDH的模式,参考Fayson前面的文章《0517-如何在CDH5中使用单用户模式》。但实际情况是这种方法非常麻烦,官方其实也不建议使用,而且从CDH6开始也已经废弃了这种安装或使用方式。

本文基于一个实际需求,即CDH相关的所有服务都使用非root用户来管理,主要是Cloudera Manager Server和Agent服务(其他Hadoop服务默认都是使用相应自己的用户比如hdfs或者hive用户),我们知道这2个服务默认会被放到操作系统的/etc/rc.d/init.d下,即会开机自启动,而且Server使用cloudera-scm用户启动而Agent使用root用户启动。实现思路是先从操作系统自启动里移除,然后设置相关脚本,文件和日志的权限来实现使用非root用户的手动启动,这样可以实现未来的非root用户来管理Server和Agent服务,而Hadoop相关服务大部分情况下都可以通过Cloudera Manager界面化来管理。以下Fayson进行实操演示。

  • 测试环境

1.CDH5.16.1

2.Redhat7.4

3.采用root进行操作

2.修改cloudera-scm-agent服务

2.1.移除agent服务

1.停止Agent服务

systemctl stop cloudera-scm-agent
           

2.Kill supervisord进程,如果存在

[[email protected] ~]# ps -ef |grep supervisordroot 1470 1 0 12:39 ? 00:00:11 /usr/lib64/cmf/agent/build/env/bin/python /usr/lib64/cmf/agent/build/env/bin/supervisordroot 14521 13742 0 13:09 pts/0 00:00:00 grep --color=auto supervisord[[email protected] ~]# kill 1470[[email protected] ~]#
           
my.ini修改后服务无法启动_0520-如何使用非root用户启动CM的Server和Agent服务1.文档编写目的2.修改cloudera-scm-agent服务2.1.移除agent服务2.2.修改启动脚本2.3.手动启动agent服务3.修改cloudera-scm-server服务3.1.停止server服务3.2.手动启动server服务4.总结

3.将/etc/rc.d/init.d/cloudera-scm-agent脚本移到/root/agent_bak下:

[[email protected] ~]# mkdir agent_bak[[email protected] ~]# cd /etc/rc.d/init.d/[[email protected] init.d]# mv cloudera-scm-agent /root/agent_bak/
           
my.ini修改后服务无法启动_0520-如何使用非root用户启动CM的Server和Agent服务1.文档编写目的2.修改cloudera-scm-agent服务2.1.移除agent服务2.2.修改启动脚本2.3.手动启动agent服务3.修改cloudera-scm-server服务3.1.停止server服务3.2.手动启动server服务4.总结

4.重载systemd服务,并确认agent服务已经被移除。

[[email protected] init.d]# systemctl daemon-reload[[email protected] init.d]# systemctl start cloudera-scm-agentFailed to start cloudera-scm-agent.service: Unit not found.[[email protected] init.d]#
           
my.ini修改后服务无法启动_0520-如何使用非root用户启动CM的Server和Agent服务1.文档编写目的2.修改cloudera-scm-agent服务2.1.移除agent服务2.2.修改启动脚本2.3.手动启动agent服务3.修改cloudera-scm-server服务3.1.停止server服务3.2.手动启动server服务4.总结

2.2.修改启动脚本

1.修改启动脚本cloudera-scm-agent

my.ini修改后服务无法启动_0520-如何使用非root用户启动CM的Server和Agent服务1.文档编写目的2.修改cloudera-scm-agent服务2.1.移除agent服务2.2.修改启动脚本2.3.手动启动agent服务3.修改cloudera-scm-server服务3.1.停止server服务3.2.手动启动server服务4.总结

我们编辑cloudera-scm-agent脚本,可以看到如上图一行的启动命令,标红部分为当用户启动cloudera-scm-agent时,会su root来执行该脚本,这也是为什么我们看到的cloudera-scm-agent服务的启动用户是root的原因。因为我们现在要演示用其他用户启动该脚本,所以删掉这部分,然后保存。

my.ini修改后服务无法启动_0520-如何使用非root用户启动CM的Server和Agent服务1.文档编写目的2.修改cloudera-scm-agent服务2.1.移除agent服务2.2.修改启动脚本2.3.手动启动agent服务3.修改cloudera-scm-server服务3.1.停止server服务3.2.手动启动server服务4.总结

2.修改文件夹属组,这里我们计划使用cloudera-scm用户来启动agent服务

chown cloudera-scm:cloudera-scm /var/log/cloudera-scm-agent/*chown -R cloudera-scm:cloudera-scm /var/run/cloudera-scm-agent
           
my.ini修改后服务无法启动_0520-如何使用非root用户启动CM的Server和Agent服务1.文档编写目的2.修改cloudera-scm-agent服务2.1.移除agent服务2.2.修改启动脚本2.3.手动启动agent服务3.修改cloudera-scm-server服务3.1.停止server服务3.2.手动启动server服务4.总结

2.3.手动启动agent服务

1.手动启动agent服务

sudo -u cloudera-scm sh cloudera-scm-agent start
           
my.ini修改后服务无法启动_0520-如何使用非root用户启动CM的Server和Agent服务1.文档编写目的2.修改cloudera-scm-agent服务2.1.移除agent服务2.2.修改启动脚本2.3.手动启动agent服务3.修改cloudera-scm-server服务3.1.停止server服务3.2.手动启动server服务4.总结

2.查看CM页面可以检测到该agent的心跳

my.ini修改后服务无法启动_0520-如何使用非root用户启动CM的Server和Agent服务1.文档编写目的2.修改cloudera-scm-agent服务2.1.移除agent服务2.2.修改启动脚本2.3.手动启动agent服务3.修改cloudera-scm-server服务3.1.停止server服务3.2.手动启动server服务4.总结

3.但是发现该节点上的CMS和Hadoop相关服务显示异常。

my.ini修改后服务无法启动_0520-如何使用非root用户启动CM的Server和Agent服务1.文档编写目的2.修改cloudera-scm-agent服务2.1.移除agent服务2.2.修改启动脚本2.3.手动启动agent服务3.修改cloudera-scm-server服务3.1.停止server服务3.2.手动启动server服务4.总结

4.重启CMS服务

my.ini修改后服务无法启动_0520-如何使用非root用户启动CM的Server和Agent服务1.文档编写目的2.修改cloudera-scm-agent服务2.1.移除agent服务2.2.修改启动脚本2.3.手动启动agent服务3.修改cloudera-scm-server服务3.1.停止server服务3.2.手动启动server服务4.总结
my.ini修改后服务无法启动_0520-如何使用非root用户启动CM的Server和Agent服务1.文档编写目的2.修改cloudera-scm-agent服务2.1.移除agent服务2.2.修改启动脚本2.3.手动启动agent服务3.修改cloudera-scm-server服务3.1.停止server服务3.2.手动启动server服务4.总结

重启失败

5.重启172.31.13.38节点上的NameNode服务,报错如下

Error found before invoking supervisord: Non-root agent cannot execute process as user 'hdfs'
           
my.ini修改后服务无法启动_0520-如何使用非root用户启动CM的Server和Agent服务1.文档编写目的2.修改cloudera-scm-agent服务2.1.移除agent服务2.2.修改启动脚本2.3.手动启动agent服务3.修改cloudera-scm-server服务3.1.停止server服务3.2.手动启动server服务4.总结

3.修改cloudera-scm-server服务

3.1.停止server服务

1.停止cloudera-scm-server服务

systemctl stop cloudera-scm-server
           

2.将/etc/rc.d/init.d/cloudera-scm-server脚本移到/root/agent_bak下:

[[email protected] ~]# cd /etc/rc.d/init.d[[email protected] init.d]# mv cloudera-scm-server /root/bak
           
my.ini修改后服务无法启动_0520-如何使用非root用户启动CM的Server和Agent服务1.文档编写目的2.修改cloudera-scm-agent服务2.1.移除agent服务2.2.修改启动脚本2.3.手动启动agent服务3.修改cloudera-scm-server服务3.1.停止server服务3.2.手动启动server服务4.总结

3.重载systemd服务,并确认server服务已经被移除。

[[email protected] init.d]# systemctl daemon-reloadYou have new mail in /var/spool/mail/root[[email protected] init.d]# systemctl start cloudera-scm-serverFailed to start cloudera-scm-server.service: Unit not found.[[email protected] init.d]#
           
my.ini修改后服务无法启动_0520-如何使用非root用户启动CM的Server和Agent服务1.文档编写目的2.修改cloudera-scm-agent服务2.1.移除agent服务2.2.修改启动脚本2.3.手动启动agent服务3.修改cloudera-scm-server服务3.1.停止server服务3.2.手动启动server服务4.总结

4.修改相应目录的权限

chown cloudera-scm:cloudera-scm /var/log/cloudera-scm-server/*
           

3.2.手动启动server服务

1.使用cloudera-scm用户启动Cloudera Manager Server服务

[[email protected] bak]# sudo -u cloudera-scm sh cloudera-scm-server startStarting cloudera-scm-server: cloudera-scm-server: line 249: /var/run/cloudera-scm-server.pid: Permission denied[FAILED][[email protected] bak]#
           
my.ini修改后服务无法启动_0520-如何使用非root用户启动CM的Server和Agent服务1.文档编写目的2.修改cloudera-scm-agent服务2.1.移除agent服务2.2.修改启动脚本2.3.手动启动agent服务3.修改cloudera-scm-server服务3.1.停止server服务3.2.手动启动server服务4.总结

启动失败,这里报错是/var/run的权限,这个目录会挂载到/run下,修改这个目录的权限后可以启动成功,但是重启系统之后,该目录的权限又会还原,最终还是失败。

4.总结

1.本文Fayson尝试手动做一些修改后,使用非root用户来启停server和agent服务,都以失败告终。

2.Agent服务可以配置为使用别的用户来启动,本文是使用cloudera-scm,但是带来的问题是该节点上的CMS服务或者Hadoop相关服务无法管理,因为CM管理节点的原理是通过通过向agent发送相关指令,然后通过agent的用户root来sudo到相关的的组件用户来管理相应的服务,比如sudo到hdfs用户来管理HDFS服务,实际还有CM搜集诊断包也需要通过agent调用很多系统命令来进行搜集。本文其实可以通过配置其他用户比如cloudera-scm用户的免密sudo到其他用户来进行尝试,但是没有再这么做的原因是因为agent管理服务或者调用操作系统本身的系统命令太多,逐项配置是非常麻烦的基本不现实,具体可以参考《0517-如何在CDH5中使用单用户模式》。

3.Server服务主要是因为/var/run目录的权限问题,我们可以临时修改该目录的权限来实现。但因为/var/run最终会挂载到OS的内存系统tmpfs中,一旦重启OS,该目录又会还原,又需要手动设置。

4.综上所述,无论是Cloudera Manager Server还是Agent服务都无法配置为其他用户来启停,只能通过root用户来管理。

5.其实这2个服务如果你配置为其他用户来管理,也不是官方支持的方式,所以无论从技术可行性还是能否享受正式支持的角度来说,都不建议去修改Server和Agent的启停用户。