0520-如何使用非root用户启动CM的Server和Agent服务

2019-11-27 18:51:32 浏览数 (1)

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服务

代码语言:javascript复制
systemctl stop cloudera-scm-agent

2.Kill supervisord进程,如果存在

代码语言:javascript复制
[root@ip-172-31-13-38 ~]# ps -ef |grep supervisord
root      1470     1  0 12:39 ?        00:00:11 /usr/lib64/cmf/agent/build/env/bin/python /usr/lib64/cmf/agent/build/env/bin/supervisord
root     14521 13742  0 13:09 pts/0    00:00:00 grep --color=auto supervisord
[root@ip-172-31-13-38 ~]# kill 1470
[root@ip-172-31-13-38 ~]#

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

代码语言:javascript复制
[root@ip-172-31-13-38 ~]# mkdir agent_bak
[root@ip-172-31-13-38 ~]# cd /etc/rc.d/init.d/
[root@ip-172-31-13-38 init.d]# mv cloudera-scm-agent /root/agent_bak/

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

代码语言:javascript复制
[root@ip-172-31-13-38 init.d]# systemctl daemon-reload
[root@ip-172-31-13-38 init.d]# systemctl start cloudera-scm-agent
Failed to start cloudera-scm-agent.service: Unit not found.
[root@ip-172-31-13-38 init.d]#

2.2

修改启动脚本

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

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

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

代码语言:javascript复制
chown cloudera-scm:cloudera-scm /var/log/cloudera-scm-agent/*
chown -R cloudera-scm:cloudera-scm /var/run/cloudera-scm-agent

2.3

手动启动agent服务

1.手动启动agent服务

代码语言:javascript复制
sudo -u cloudera-scm sh cloudera-scm-agent start

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

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

4.重启CMS服务

重启失败

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

代码语言:javascript复制
Error found before invoking supervisord: Non-root agent cannot execute process as user 'hdfs'

3

修改cloudera-scm-server服务

3.1

停止server服务

1.停止cloudera-scm-server服务

代码语言:javascript复制
systemctl stop cloudera-scm-server

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

代码语言:javascript复制
[root@ip-172-31-13-38 ~]# cd /etc/rc.d/init.d
[root@ip-172-31-13-38 init.d]# mv cloudera-scm-server /root/bak

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

代码语言:javascript复制
[root@ip-172-31-13-38 init.d]# systemctl daemon-reload
You have new mail in /var/spool/mail/root
[root@ip-172-31-13-38 init.d]# systemctl start cloudera-scm-server
Failed to start cloudera-scm-server.service: Unit not found.
[root@ip-172-31-13-38 init.d]#

4.修改相应目录的权限

代码语言:javascript复制
chown cloudera-scm:cloudera-scm /var/log/cloudera-scm-server/*

3.2

手动启动server服务

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

代码语言:javascript复制
[root@ip-172-31-13-38 bak]# sudo -u cloudera-scm sh cloudera-scm-server start
Starting cloudera-scm-server: cloudera-scm-server: line 249: /var/run/cloudera-scm-server.pid: Permission denied
[FAILED]
[root@ip-172-31-13-38 bak]#

启动失败,这里报错是/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的启停用户。

0 人点赞