文档编写目的
在集群安装初期由于未规范集群主机的主机名,这样会带来集群管理的不便,现需要将CDH/CDP集群的主机名统一规范化,在修改主机名的过程中需要注意什么?本篇文章主要介绍如何修改Kerberos环境下的CDP集群的HOSTNAME,在修改CDH集群的主机名采用相同的方法。修改集群所有主机的hostname的步骤如下:
内容概述
- 环境说明及停止集群服务
- 修改集群HOSTNAME、KDC及集群服务配置
- 功能验证
测试环境
- CM为7.4.4版本,Cloudera Runtime版本为7.1.7版本
- 采用root用户操作
- 操作系统Redhat7.6
前置条件
- 集群已启用Kerberos
- 元数据库和KDC服务器都在该节点上
- 如果有使用kudu,则需要提前备份Kudu的数据(这里没有提供对应操作)
环境说明
测试环境为单节点集群,所有的角色和服务都部署在该节点上。
集群原始HOSTNAME说明
IP地址 | HOSTNMAE | 节点说明 |
---|---|---|
10.0.0.100 | cdp.cloudera.aliyun | CM、NN、MySQL、KDC,DN |
该节点的HOSTNAME由cdp.cloudera.aliyun修改为cdp1.cloudera.com
修改后的目标环境的IP和HOSTNAME如下
IP地址 | HOSTNMAE | 节点说明 |
---|---|---|
10.0.0.100 | cdp1.cloudera.com | CM、NN、MySQL、KDC,DN |
停止集群所有服务
停止CDP服务
在CM主页→集群名右侧的三竖点→stop,停止CDP集群的服务,如果有多个集群,按照相同的方法停止所有集群的服务。
停止成功
停止Cloudera Management Service服务
在CM主页→Cloudera Management Service右侧的三竖点→stop,停止CMS的服务
CDP和CMS的所有服务都停止完毕后,如下图所示:
停止Cloudera Manager Server服务
登录CM服务所在节点执行如下命令停止服务
代码语言:javascript复制systemctl stop cloudera-scm-server
7180端口无法访问则表示停止成功
停止集群所有节点的cloudera-scm-agent服务
可以使用批量脚本执行命令来停止所有节点的cloudera-scm-agent服务,本测试中集群为单节点集群,因此直接执行命令即可
代码语言:javascript复制systemctl stop cloudera-scm-agent
修改集群主机的HOSTNAME
修改主机的HOSTNAME
执行如下命令修改集群的HOSTNAME
代码语言:javascript复制hostnamectl set-hostname cdp1.cloudera.com
hostname
注意:按照需求将集群所有节点的HOSTNAME修改为指定的名称
修改/etc/hosts文件
修改一台主机的/etc/hosts文件,将集群的所有节点的hosts信息都配置到该节点上。如果是通过DNS管理的hostname,则需要调整DNS的配置,而不需要配置/etc/hosts文件。
代码语言:javascript复制vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.100 cdp1.cloudera.com cdp1.cloudera.com
Hosts文件同步到所有节点
对于正常的集群,需要将修改后的hosts文件同步至集群所有节点的/etc目录下
代码语言:javascript复制for i in {100..100}; do scp /etc/hosts 10.0.0.$i:/etc/hosts ; done
这里的测试集群为单节点集群,不涉及到文件同步的问题。
检查所有节点的HOSTNAME是否配置正确
使用DNS配置hostname也需要进行该检查。
代码语言:javascript复制for i in {100..100}; do ssh 10.0.0.$i 'hostname' ; done
修改krb5.conf配置文件
修改krb5文件
修改了KDC服务所在服务器的HOSTNAME,需要将相应的客户端配置修改/etc/krb5.conf文件,内容如下:
代码语言:javascript复制[root@cdh01 ~]# vim /etc/krb5.conf
[libdefaults]
default_realm = CLOUDERA.COM
dns_lookup_kdc = false
dns_lookup_realm = false
ticket_lifetime = 86400
renew_lifetime = 604800
forwardable = true
default_tgs_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96 arcfour-hmac-md5
default_tkt_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96 arcfour-hmac-md5
permitted_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96 arcfour-hmac-md5
udp_preference_limit = 1
kdc_timeout = 3000
[realms]
CLOUDERA.COM = {
kdc = cdp1.cloudera.com
admin_server = cdp1.cloudera.com
}
[domain_realm]
.cdp1.cloudera.com = CLOUDERA.COM
cdp1.cloudera.com = CLOUDERA.COM
将/etc/krb5.conf文件同步至集群所有节点
代码语言:javascript复制for i in {100..100}; do scp /etc/krb5.conf 10.0.0.$i:/etc/krb5.conf ; done
重启Kerberos的服务
代码语言:javascript复制systemctl restart krb5kdc
systemctl restart kadmin
systemctl status krb5kdc
systemctl status kadmin
测试Kerberos服务是否正常
代码语言:javascript复制[root@cdp ~]# kinit etl_user
Password for etl_user@CLOUDERA.COM:
[root@cdp ~]# klist
修改CM服务配置并启动
修改Cloudera Manager Server服务的数据库配置
修改CM Server的元数据库信息的配置文件/etc/cloudera-scm-server/db.properties
代码语言:javascript复制vim /etc/cloudera-scm-server/db.properties
将com.cloudera.cmf.db.host地址修改为新的HOSTNAME。这里配置的是localhost,因此不需要调整。在大家的环境中,该值基本上不会是localhost。
修改cloudera-scm-agent服务的配置
CM Agent的配置文件是/etc/cloudera-scm-agent/config.ini,需要将所有节点的该配置文件进行调整。
代码语言:javascript复制vim /etc/cloudera-scm-agent/config.ini
注意:需要修改集群所有节点上的配置。我这台机器因为做成镜像的原因,server_host设置为localhost,大家的集群该属性都是需要修改的。
启动cloudera-scm-server服务
代码语言:javascript复制systemctl start cloudera-scm-server
netstat -apn |grep 7180
启动集群所有节点的cloudera-scm-agent服务
代码语言:javascript复制for i in {100..100}; do ssh 10.0.0.$i 'systemctl start cloudera-scm-agent' ; done
修改集群服务配置
登录Cloudera Manager管理界面
修改集群所有服务的数据库配置信息
CM主页→配置→数据库配置
将所有服务的数据库HOSTNAME更改为修改后的HOSTNAME
搜索host,然后将所有修改的host都进行调整,然后保存修改。
保存配置。
修改CM中Kerberos配置信息
CM主页→管理→设置
进入集群设置界面,类别中选择Kerberos,然后搜索host,将所有涉及修改的host都进行调整
将KDC和KADMIN指向的主机host更改为最新的HOSTNAME,并保存配置。
重新生成集群所有服务的Kerberos信息
CM主页→Hosts→进入主机列表界面
全选主机,然后执行重新生成Keytab
点击确认,生成所有的Keytab。生成成功后显示如下:
进入管理→安全→Kerberos凭据界面查看集群所有服务的prinicipal账号信息
在过滤器中进行过滤,过滤条件为新的主机名,查看Principal是否正确
注意:重新生成Keytab时需要确保所有服务都是停止状态,这里旧的prinicipal信息也存在,但不影响集群服务使用,如果你有强迫症就是不想看到这些,可以在KDC数据库中将cm库下的CREDENTIALS表数据删除,然后再重新生成。
启动Cloudera Management Service服务
在CM页面先启动CMS服务。
CMS服务启动成功
进入Konx服务,修改Knox的匹配白名单
进入Hue,修改代理主机
进入Kudu服务
查看Kudu的Master和tserver的日志和数据目录的配置
进入到操作系统,清空对应的master和tserver的日志和数据目录
完成以上配置后,部署客户端配置
点击“部署客户端配置”
启动CDP集群
集群启动成功
集群各个服务状态正常
功能验证
主机名检查
集群的所有节点的HOSTNAME已修改为最新
运行检查所有主机进行主机健康检查
MR任务验证
向集群提交一个MapReduce作业测试集群功能是否正常
代码语言:javascript复制[[root@cdp1 zookeeper]# kinit etl_user
Password for etl_user@CLOUDERA.COM:
[[root@cdp1 zookeeper]# hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar pi 5 5
作业运行成功
Spark任务验证
向集群提交一个Spark作业验证集群是否正常
代码语言:javascript复制[root@cdp1 ~]# klist
[root@cdp1 ~]# spark-submit --class org.apache.spark.examples.SparkPi --master yarn-client --num-executors 4 --driver-memory 2g --driver-cores 1 --executor-memory 2g --executor-cores 1 /opt/cloudera/parcels/CDH/lib/spark/examples/jars/spark-examples_2.11-2.4.7.7.1.7.0-551.jar 10
作业运行成功
Hive验证
Beeline测试
Beeline连接
代码语言:javascript复制klist
beeline
执行beeline查询
代码语言:javascript复制select count(*) from worldwidebank.ww_customers;
Hue测试
Zeppelin测试
Impala测试
Impala-shell测试
Hue测试
通过Knox自动跳转其他组件
通过Knox跳转到其他应用的页面
总结
- 修改CDP集群的HOSTNAME,需要注意修改CM节点的HOSTNAME需要将集群所有AGENT节点执行CM的HOSTNAME配置信息更新。
- MYSQL服务所在节点的HOSTNAME修改,则需要更新集群所有用到MYSQL服务的配置信息。
- 修改了Kerberos服务器的HOSTNAME,需要更新krb5.conf配置并同步到集群的所有节点。
- 群集启用了Kerberos,需要在Cloudra Manager上为所有服务重新生成Keytab信息,重新生成keytab需要停止停止除cloudera-scm-server外的所有服务和组件。如果是使用CM管理的Kerberos,需要关注/etc/krb5.conf文件是否会被重置,建议取消使用CM管理Kerberos。
- 需要将客户端重新进行部署。
- 如果集群中有Kudu,需要先进行Kudu的数据迁移,否则会导致Kudu的数据丢失。
- 如果是使用DNS来管理主机名和IP地址,则也修改在DNS那边进行调整,否则可能会导致Hive的Metastore找到原来的主机名,从而导致服务不可用。
- 主机名修改完成后,需要进行各种验证来保证正常运行。