大数据平台-kerberos安装部署文档

更新时间:2024-02-01 23:48:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1. 环境准备

1.1. 操作系统

本次安装部署要求在操作系统为CentOS release 6.5 (Final)的版本下进行部署,所以在安装部署kerberos之前请先确保操作系统为以上版本,并且集群中各机器已做时钟同步。

本次安装部署以csdm-hadoop-04作为主kdc服务器,以csdm-hadoop-05作为从kdc服务器,以csdm-hadoop-03作为客户端。一般不建议在服务器上再安装其他应用程序,比如hadoop。但为了节省资源本次安装在这三台机器均已安装hadoop相关软件。

1.2. 创建操作用户

创建操作系统hdfs、yarn、mapred用户,并使其归属于hadoop用户组: adduserhdfs-g Hadoop adduser yarn -g Hadoop addusermapred-g Hadoop

1.3. 配置hosts文件

为各台机器修改/etc/hosts文件,将真实ip与主机名对应配置,服务端与客户端均需配置,形如:(不能存在127.0.0.1的配置,否则hadoop进行kerberos验证时将会出错)

1.4. 关闭防火墙

执行以下命令关闭防火墙:

serviceiptables stop 出现以下界面表示关闭成功

1.5. 注册服务与端口的对应

在/etc/service文件最后增加以下信息,以便后续使用:

krb5_prop 754/tcp # Kerberos slave propagation 2. 安装配置Kerberos

2.1. 安装rpm包

? 以root用户登录并创建目录存放安装包:

mkdir /var/kerberos ? 上传安装包文件到创建的目录,包括

krb5-libs-1.10.3-10.el6_4.6.x86_64.rpm、krb5-server-1.10.3-10.el6_4.6.x86_64.rpm(客户端可不安装)、krb5-workstation-1.10.3-10.el6_4.6.x86_64.rpm ? 执行安装命令:

rpm -ivhkrb5-libs-1.10.3-10.el6_4.6.x86_64.rpm rpm -ivhkrb5-server-1.10.3-10.el6_4.6.x86_64.rpm【客户端可不安装】 rpm -ivhkrb5-workstation-1.10.3-10.el6_4.6.x86_64.rpm ? 查看上述包是否已安装成功:

rpm –qa krb5*

若出现以下情况则代表安装成功。

2.2. 配置主KDC服务器 2.2.1. 设置全局环境变量

需要以root身份登录系统在/etc/profile末尾增加配置文件的全局环境变量: export KRB5_CONFIG=/etc/krb5.conf

export KRB5_KDC_PROFILE=/var/kerberos/krb5kdc/kdc.conf

保存后并执行source /etc/profile 使之生效。

2.2.2. 配置krb5.conf

执行vi编辑/etc/krb5.conf,内容如下:

[libdefaults]

default_realm = ERICSSON.COM dns_lookup_realm = false dns_lookup_kdc = false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true

[realms]

ERICSSON.COM = { kdc = csdm-hadoop-04 kdc = csdm-hadoop-05

admin_server =csdm-hadoop-04 }

[domain_realm]

.ericsson.com = ERICSSON.COM ericsson.com = ERICSSON.COM

2.2.3. 配置kdc.conf

执行vi编辑/var/kerberos/krb5kdc/kdc.conf,内容如下: [kdcdefaults]

Kdc_ports=750,88 [realms]

ERICSSON.COM ={ kadmind_port = 749 max_life=10h 0m 0s

max_renewable_life=7d 0h 0m 0s

database_name=/var/kerberos/krb5kdc/principal admin_keytab=/var/kerberos/krb5kdc/kadm5.keytab acl_file=/var/kerberos/krb5kdc/kadm5.acl

key_stash_file=/var/kerberos/krb5kdc/.k5.ERICSSON.COM } [logging]

default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log

admin_server = FILE:/var/log/kadmind.log

集群机器如果开启selinux,请在机器上执行restorecon -R -v /etc/krb5.conf

2.2.4. 生成数据库

在主KDC服务器上执行以下命令创建数据库,在执行的过程中会提示输入密码和确认密码,两次输入相同的密码即可:

kdb5_util create -r ericsson.com –s

等待片刻后在提示输入密码界面输入密码后会出现以下界面:

2.2.5. 创建管理用户

运行管理入口命令:

kadmin.local 在提示符下执行以下命令

addprinc kadmin/admin@ERICSSON.COM addprinc kadmin/changepw@ERICSSON.COM

会提示输入密码,输入两次一样的密码后会提示成功创建。

将主体添加至密钥文件中

ktadd -k /var/kerberos/krb5kdc/kadm5.keytab kadmin/admin ktadd -k /var/kerberos/krb5kdc/kadm5.keytab kadmin/changepw

2.2.6.

启动krb5kdc 和kadmind服务

执行以下命令启动krb5kdc和kadmind服务:

krb5kdcstart kadmind 出现以下界面表示启动成功

2.3. 配置从KDC服务器

2.3.1. 为从kdc服务器创建创建授权票证

每一个kdc服务器都需要一个host票证,用于在迁移数据库数据市在各kdc服务器之间进行交互验证。注意,创建host票据需要在主kdc服务器上执行而不是在从kdc服务器。在csdm-hadoop-04上执行以下命令创建票证:

kadmin addprinc –randkeyhost/csdm-hadoop-04@ERICSSON.COM addprinc –randkey host/csdm-hadoop-05@ERICSSON.COM ktaddhost/csdm-hadoop-05@ERICSSON.COM

2.3.2. 设置从kdc服务器的配置文件

将主kdc服务器中的配置文件(kdc.conf、 krb5.conf、 .k5.ERICSSON.COM、 kadm5.acl)复制到从kdc服务器上相应的目录中;在从kdc服务器的/var/Kerberos/krb5kdc的目录下创建kpropd.acl文件并增加以下信息:

host/csdm-hadoop-04@ERICSSON.COM host/csdm-hadoop-05@ERICSSON.COM

2.4. 复制数据库数据到KDC从服务器

? 在主服务器上创建数据库的dump文件

kdb5_util dump /var/kerberos/krb5kdc/slave_datatrans ? 在从服务器上执行数据迁移

kprop -f /var/Kerberos/krb5kdc/slave_datatrans csdm-hadoop-05

定时将主KDC服务器上的数据库数据,更新到从KDC服务器上 由于KDC不提供数据库数据的同步服务功能,因此需要使用脚本或者手工将主KDC服务器上的数据同步到从KDC服务器上,可以参考以下脚本,并配置到定时器中 #!/bin/sh

kdclist = \ kdb5_util dump /var/kerberos/krb5kdc/slave_datatrans forkdc in $kdclist do kprop -f /var/kerberos/krb5kdc/slave_datatrans $kdc

2.5. 启动从服务器的krb5kdc程序

在从服务器上启动命令执行启动: krb5kdc 2.6. 配置自启动

在/etc/inittab中增加以下信息可使进程随系统自启动: /etc/init.d/krb5kdc start Kadmind

2.7. 客户端配置

下面以csdm-hadoop-03这台机器作为客户端说明相关配置 1、在csdm-hadoop-03上安装客户端软件

rpm -ivhkrb5-libs-1.10.3-10.el6_4.6.x86_64.rpm rpm -ivhkrb5-workstation-1.10.3-10.el6_4.6.x86_64.rpm 2、在主KDC服务器csdm-hadoop-04上,把/etc/krb5.conf复制到csdm-hadoop-03本地对应目录

3、在客户端csdm-hadoop-03上启动命令执行启动:

krb5kdc 此时即可在客户端csdm-hadoop-03上连接KDC服务器 4、生成可访问csdm-hadoop-03机器应用程序的验证

在主KDC服务器csdm-hadoop-04,生成csdm-hadoop-03的principals和keytab, 为客户端csdm-hadoop-03添加principals(可以为host或者所要进行验证的机器用户)

addprinc –randkey host/csdm-hadoop-03@ERICSSON.COM

为客户端csdm-hadoop-03生成keytab

Ktadd–k

/var/kerberos/krb5kdc/keytab/host.keytabhost/csdm-hadoop-03@ERICSSON.COM

把csdm-hadoop-04上生成的keytab复制到csdm-hadoop-03机器上

3. 测试服务器

3.1. 服务器端测试客户端连接

运行kinit admin/admin,显示提示输入密码则代表配置成功:

3.2. 远程客户机连接测试

在客户机运行kinit admin/admin连接服务端,显示提示输入密码则代表配置成功:

4. Hadoop集成kerberos配置 4.1 kerberos配置

Hadoop官方网站建议的操作系统用户及权限如下,下面我们按照这三个用户的权限进行配

置,要求使用下面三种用户分别具有各自启动相应进程的权限。 User:Group hdfs:hadoop yarn:hadoop mapred:hadoop

Daemons NameNode, Secondary NameNode, JournalNode, DataNode ResourceManager, NodeManager MapReduce,JobHistory Server 4.1.1 为所有机器的用户生成principal

从主KDC服务器csdm-hadoop-04上,把/etc/krb5.conf复制到csdm-hadoop-03本地对应目录,

在主KDC服务器上为hadoop集群中每台机器的用户创建principal,下面以csdm-hadoop-03这台机器为例,运行管理入口命令:

kadmin.local 在提示符下执行以下命令:

addprinc -randkeyhdfs/csdm-hadoop-03@ERICSSON.COM addprinc -randkeyhost/csdm-hadoop-03@ERICSSON.COM

addprinc -randkeyyarn/csdm-hadoop-03@ERICSSON.COM addprinc -randkeyhost/csdm-hadoop-03@ERICSSON.COM

addprinc -randkeymapred/csdm-hadoop-03@ERICSSON.COM addprinc -randkeyhost/csdm-hadoop-03@ERICSSON.COM

注:

? 集群中的每台机器所用到的用户都需执行上面的命令生成principal

? 每个用户必须执行addprinc -randkeyhost/XX@XX的命令,这个命令生成的是基于

Kerberos 的应用程序(例如klist和kprop)和服务(例如ftp和telnet)使用的主体。此主体称为host主体或服务主体。

4.1.2 生成keytab文件

完成5.1.1后在主KDC服务器上为所有principal生成keytab文件,运行管理入口命令:

kadmin.local 在提示符下执行以下命令:

xst -norandkey -k /var/kerberos/krb5kdc/keytab/hdfs.keytab hdfs/csdm-hadoop-03@ERICSSON.COM host/csdm-hadoop-03@ERICSSON.COM xst -norandkey -k /var/kerberos/krb5kdc/keytab/mapred.keytab mapred/csdm-hadoop-03@ ERICSSON.COM host/csdm-hadoop-03@ERICSSON.COM xst -norandkey -k /var/kerberos/krb5kdc/keytab/yarn.keytab yarn/csdm-hadoop-03@ERICSSON.COM host/csdm-hadoop-03@ERICSSON.COM

生成授权文件后,使用以下命令检查生成的keytab是否可用: kinit -k -t

/var/kerberos/krb5kdc/keytab/hdfs.keytabhdfs/csdm-hadoop-03@ERICSSON.COM kinit -k -t

/var/kerberos/krb5kdc/keytab/mapred.keytabmapred/csdm-hadoop-03@ERICSSON.COM

kinit -k -t

/var/kerberos/krb5kdc/keytab/yarn.keytab yarn/csdm-hadoop-03@ERICSSON.COM

检查没问题后,把生成的keytab文件分发到整个集群中的所有机器。

4.2 修改HADOOP配置文件 4.2.1Jsvc安装配置

Datanode的安全机制需要以root用户身份用jsvc来启动,因此首先需要检查是否安装是jsvc如果没有,按以下步骤进行安装:

1、 下载commons-daemon-1.0.15-src.tar.gz 包并上传至自定义的目录(本操作目录为

/home/hadoop) 2、 解压缩后

以root用户登录进入目录/home/Hadoop执行: tar –xvfcommons-daemon-1.0.15-bin.tar.gz 解压完成后进入

/home/Hadoop/commons-daemon-1.0.15-src/src/native/unix 执行命令:configure 执行命令:make 编译完成后,会在/home/hadoop/commons-daemon-1.0.15-src/src/native/unix目录下生成jsvc可执行文件,如下图

在该目录下执行file jsvc如果出现下图所示,则jsvc安装成功

这里,我们把该执行文件复制到$HADOOP_HOME/bin以便后续的配置

执行命令:cp/home/hadoop/commons-daemon-1.0.15-src/src/native/unix/jsvc /home/hadoop/hadoop/bin

4.2.2 hadoop-env.sh配置

找到以下两项配置,并修改

export HADOOP_SECURE_DN_USER=hdfs(配置为要执行datanode的用户,这里为hdfs)

export JSVC_HOME=/home/hadoop/hadoop/bin(配置为jsvc所在的目录)

4.2.3 core-site.xml

在集群中所有节点的core-site.xml文件中添加下面的配置

hadoop.security.authorization true

hadoop.security.authentication kerberos

hadoop.rpc.protection authentication

hadoop.security.auth_to_local DEFAULT

4.2.4hdfs-site.xml

在集群中所有节点的hdfs-site.xml文件中添加下面的配置,下面配置以节点csdm-hadoop-04为例:

dfs.block.access.token.enable true

dfs.encrypt.data.transfer true

dfs.https.address

csdm-hadoop-04:50470

dfs.https.port 50470

dfs.namenode.keytab.file

/var/kerberos/krb5kdc/keytab/hdfs.keytab

dfs.namenode.kerberos.principal hdfs/_HOST@ERICSSON.COM

dfs.namenode.kerberos.https.principal host/_HOST@ERICSSON.COM

dfs.secondary.https.address csdm-hadoop-04:50495

dfs.secondary.https.port 50495

dfs.secondary.namenode.keytab.file

/var/kerberos/krb5kdc/keytab/hdfs.keytab

dfs.secondary.namenode.kerberos.principal hdfs/_HOST@ERICSSON.COM

dfs.secondary.namenode.kerberos.https.principal host/_HOST@ERICSSON.COM

dfs.datanode.data.dir.perm 700

dfs.datanode.address 0.0.0.0:1004

dfs.datanode.http.address 0.0.0.0:1006

dfs.datanode.keytab.file

/var/kerberos/krb5kdc/keytab/hdfs.keytab

dfs.datanode.kerberos.principal hdfs/_HOST@ERICSSON.COM

dfs.datanode.kerberos.https.principal host/_HOST@ERICSSON.COM

dfs.web.authentication.kerberos.principal hdfs/_HOST@ERICSSON.COM

dfs.web.authentication.kerberos.keytab

/var/kerberos/krb5kdc/keytab/hdfs.keytab

The Kerberos keytab file with the credentials for the HTTP Kerberos principal used by Hadoop-Auth in the HTTP endpoint.

配置中有几点要注意的

? . dfs.datanode.address表示data transceiver RPC server所绑定的hostname或IP

地址,如果开启security,端口号必须小于1024(privileged port),否则的话启动datanode时候会报“Cannot start secure cluster without privileged resources”错误

? . principal中的instance部分可以使用'_HOST'标记,系统会自动替换它为全称域名

? . 如果开启了security, hadoop会对hdfs block data做permission check,方式用

户的代码不是调用hdfsapi而是直接本地读block data,这样就绕过了kerberos和文件权限验证,管理员可以通过设置dfs.datanode.data.dir.perm来修改datanode文件权限,这里我们设置为700

配置完成后,修改hdfs.keytab所有者为hdfs

chown -R hdfs:hadoop/var/kerberos/krb5kdc/keytab/hdfs.keytab chmod700 /var/kerberos/krb5kdc/keytab/hdfs.keytab

同时保证以下表格中各个目录的对于hdfs用户的权限 Filesystem local Path User:Group hdfs:hadoop Permissions drwx------ dfs.namenode.name.dir local dfs.datanode.data.dir hdfs:hadoop drwx------ local Hdfs Hdfs Hdfs $HADOOP_LOG_DIR / /tmp /user hdfs:hadoop hdfs:hadoop hdfs:hadoop hdfs:hadoop drwxrwxr-x drwxr-xr-x drwxrwxrwxt drwxr-xr-x

1、测试namenode进程启动是否正常

切换到hdfs用户,首先执行klist命令,查看当前是否获取了ticket,经测试,如果已经获取了ticket那么启动namenode进程的时候会报以下错误

使用kdestroy销毁获取的ticket

切换到hdfs用户,启动namenode进程(已经执行过HDFS格式化的操作) 执行命令:hadoopnamenode

如果配置正常,应该会看到以下的日志信息输出

验证namenode是否启动正常 ? 可打开网页

http://XX:50070/dfshealth.html#tab-overview验证 ? hadoopfs -ls /

注:如果在你的凭据缓存中没有有效的kerberos ticket,执行hadoopfs–ls /将会失败。 可以使用klist来查看是否有有有效的ticket。

如果为空,使用kinit来获取ticket.命令如下 kinit -k -t

/var/kerberos/krb5kdc/keytab/hdfs.keytabhdfs/csdm-hadoop-03@ERICSSON.COM

2、测试datanode启动是否正常

切换到root用户,

执行命令:hadoop-daemon.sh start datanode

如果启动正常,能在日志文件看到以下日志内容

在日志目录,启动datanode进程会有以下几个日志文件,其中jsvc.err记录了jsvc的错误信息

启动datanode进程,只能使用root用户,如果使用其他用户启动,只会报以下错误

4.2.5mapred-site.xml

在mapred-site.xml中添加

mapreduce.jobtracker.kerberos.principal mapred/_HOST@ERICSSON.COM

mapreduce.jobtracker.kerberos.https.principal host/_HOST@ERICSSON.COM

mapreduce.jobtracker.keytab.file

/var/kerberos/krb5kdc/keytab/mapred.keytab

mapreduce.tasktracker.kerberos.principal mapred/_HOST@ERICSSON.COM

mapreduce.tasktracker.kerberos.https.principal host/_HOST@ERICSSON.COM

mapreduce.tasktracker.keytab.file

/var/kerberos/krb5kdc/keytab/mapred.keytab

10020

mapreduce.jobhistory.keytab

/var/kerberos/krb5kdc/keytab/mapred.keytab

mapreduce.jobhistory.principal mapred/_HOST@ERICSSON.COM

将mapred.keytab文件赋权给mapred用户,执行以下命令:

chown -R mapred:hadoop/var/kerberos/krb5kdc/keytab/mapred.keytab chmod700/var/kerberos/krb5kdc/keytab/mapred.keytab

确保以下表格中各个路径的执行权限 Filesystem hdfs Path User:Group mapred:hadoop Permissions drwxrwxrwxt mapreduce.jobhistory.intermediate-done-dir mapreduce.jobhistory.done-dir hdfs mapred:hadoop drwxr-x---

测试historyserver进程

执行命令:mr-jobhistory-daemon.sh start historyserver 配置正常,则会看到以下日志内容

4.2.6yarn-site.xml

在yarn-site.xml追加以下内容:

yarn.resourcemanager.keytab

/var/kerberos/krb5kdc/keytab/yarn.keytab

yarn.resourcemanager.principal yarn/_HOST@ERICSSON.COM

yarn.nodemanager.keytab

/var/kerberos/krb5kdc/keytab/yarn.keytab

yarn.nodemanager.principal yarn/_HOST@ERICSSON.COM

yarn.nodemanager.container-executor.class

org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor

yarn.nodemanager.linux-container-executor.group hadoop

yarn.nodemanager.linux-container-executor.path

/home/hadoop/hadoop/bin/container-executor

YARN提供了两种Container启动实现,DefaultContainerExecutor以及LinuxContainerExecutor

yarn-site.xml

yarn.nodemanager.container-executor.class的启动方式为LinuxContainerExecutor,那么就需要编译安装LinuxContainerExecutor,按如下操作执行:在hadoop的home目录(这里是/home/Hadoop/hadoop)的 /etc/hadoop/目录下创建 container-executor.cfg文件,内容如下:

设置该文件权限:

$ chownroot:hadoop container-executor.cfg $ chmod400 container-executor.cfg

注意:

?

container-executor.cfg 文件读写权限需设置为 400,所有者为 root:hadoop。

并且该文件所在的父目录所有者必须为root用户,并对该文件所在的各个父目录赋

以下权限,例如:chmod 750 /home/hadoop/

?

yarn.nodemanager.linux-container-executor.group 要同时配置在

yarn-site.xml 和 container-executor.cfg,且其值需要为运行NodeManager的用户所在的组,这里为hadoop。

? ?

banned.users 不能为空,默认值为 hfds,yarn,mapred,bin

min.user.id 默认值为 1000,在centos系统中,需要设置为小于500的值

? 确保 yarn.nodemanager.local-dirs 和 yarn.nodemanager.log-dirs 对应的目录权限为 755 。

设置$HADOOP_HOME/bin/container-executor 读写权限为 6050 如下:

$ chownroot:hadoop$HADOOP_HOME/bin/container-executor $ chmod6050$HADOOP_HOME/bin/container-executor

测试是否配置正确:

$ /home/hadoop/hadoop/bin/container-executor –checksetup

出现以下信息,则表示配置正确,如果出错,请检查各个目录的权限及container-executor.cfg文件是否配置正确

修改yarn.keytab权限

chown -R yarn:hadoop/var/kerberos/krb5kdc/keytab/yarn.keytab chmod700 /var/kerberos/krb5kdc/keytab/yarn.keytab 确保以下表格各目录的权限 Filesystem hdfs Path User:Group yarn:hadoop Permissions drwxrwxrwxt yarn.nodemanager.remote-app-log-dir $YARN_LOG_DIR local local yarn:hadoop yarn:hadoop drwxrwxr-x drwxr-xr-x yarn.nodemanager.local-dirs yarn.nodemanager.log-dirs container-executor local yarn:hadoop drwxr-xr-x local local root:hadoop root:hadoop --Sr-s--- r-------- conf/container-executor.cfg

? 测试nodemanager进程 执行命令:yarnnodemanager

如果配置正常,会输出以下日志

? 测试resourcemanager进程 执行命令:yarnresourcemanager

如果配置正常,会输出以下日志

5说明

注:本部署文档部署环境默认机器未配置DNS,如果配置有DNS的机器上创建实体则格式为:用户名/hostname.DNS@领域名。例如:hdfs/csdm-hadoop-04.ericsson.com@ERICSSON.COM

火狐配置使用SPNNEGO

1、 在地址栏输入about:config打开配置界面 2、 network.negotiate-auth.delegation-uris

network.negotiate-auth.trusted-uris

找到以上两个选项,把你要访问的页面地址加进去

LINUX下配置

1、 在/etc/hosts下加入要访问的地址对应关系(包括客户端和服务器) 2、 在KDC服务器上生成浏览器所在客户端的principal:格式如下:HTTP/hd2@ERICSSON.COM,

并把该principal生成到keytab中,在KEYTAB中应该可以看到如下的信息

本文来源:https://www.bwwdw.com/article/otfw.html

Top