前提条件
- Hadoop3.x HA集群已经正常运行
- FreeIPA 高可用集群已经正常运行
- 主机服务部署清单说明
IP | 主机别名 | 完全限定域名(FQDN) | 部署服务 |
---|---|---|---|
192.168.18.141 | master | master.tobehacker.com | Hadoop集群master |
192.168.18.142 | slave1 | slave1.tobehacker.com | Hadoop集群slave1 |
192.168.18.143 | slave2 | slave2.tobehacker.com | Hadoop集群slave2 |
192.168.18.151 | ipa1 | ipa1.tobehacker.com | FreeIPA集群ipa1 |
192.168.18.152 | ipa2 | ipa2.tobehacker.com | FreeIPA集群ipa2 |
- 每个主机 hostname设置为完全限定域名,如下以 192.168.18.141 master 为例
hostnamectl set-hostname master.tobehacker.com
- 每个主机配置/etc/hosts,以我的集群环境为例
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.18.141 master.tobehacker.com master
192.168.18.142 slave1.tobehacker.com slave1
192.168.18.143 slave2.tobehacker.com slave2
192.168.18.110 manager.tobehacker.com manager
192.168.18.149 ranger.tobehacker.com ranger
192.168.18.148 knox.tobehacker.com knox
192.168.18.151 ipa1.tobehacker.com ipa1
192.168.18.152 ipa2.tobehacker.com ipa2
- 每个主机配置DNS1指向ipa1的ip、DNS2指向ipa2的ip
编辑网卡配置(请编辑自己的网卡配置文件), vim /etc/sysconfig/network-scripts/ifcfg-ens33,下面以其中一台主机192.168.18.141为例,DNS1、DNS2为ipa1、ipa2上安装的DNS服务
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="d59e05f3-70cf-4bbf-91f2-d1de99c66697"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.18.141
GATEWAY=192.168.18.2
DNS1=192.168.18.151
DNS2=192.168.18.152
NETMASK=255.255.255.0
注意 BOOTPROTO和DNS1、DNS2的设置,网络相关的配置尤为重要!;
重启:
systemctl restart network
- 关闭每个主机Hadoop组件的服务:journalnode、namenode、datanode、yarn、zkfc
zkServer.sh stop
hdfs --daemon stop xxx服务
- ipa界面上创建bigdata用户组 、创建hadoop用户
bigdata用户组gid 就填写linux主机上面bigdata用户组gid,我的三台主机gid都是1000
注意: 添加hadoop用户到bigdata组
- 集群主机配置时间同步
yum -y install ntpdate
ntpdate ntp1.aliyun.com
echo "*/10 * * * * /usr/sbin/ntpdate time1.aliyun.com" >> /var/spool/cron/root
timedatectl set-timezone Asia/Shanghai
hwclock --systohc
Hadoop集群三台主机安装和配置IPA客户端
安装客户端软件包
yum -y install freeipa-client
配置安装ipa-client
- 高可用 基础配置 安装
sudo ipa-client-install --mkhomedir --no-ntp --enable-dns-updates --principal=admin --password=admin123456
- ipa界面查看各个加入的客户端主机
安装 FreeIPA 客户端命令参数解释:
--mkhomedir: 安装过程中自动为每个用户创建主目录,以确保用户主目录的权限和所有权正确设置。
--no-ntp: 禁用客户端上的 NTP 时间同步。如果您的环境中有其他时间同步机制,或者您不需要使用时间同步功能,则可以使用此参数。
--enable-dns-updates: 它指示客户端在加入 FreeIPA 域时自动更新 DNS 记录,以便其他主机可以找到该客户端。FreeIPA 客户端会在加入域时向 DNS 服务器自动添加 A 记录和 PTR 记录。这些记录包含有关客户端的信息,例如客户端的 IP 地址和主机名。这些记录可以被其他主机和服务使用来查找和连接该客户端。
请注意,在启用 DNS 更新选项时,需要确保客户端的 DNS 设置正确,并且客户端能够与 DNS 服务器通信。否则,客户端可能无法加入 FreeIPA 域或更新 DNS 记录。
--principal=admin: 指定连接到 FreeIPA 服务器时使用的管理员用户的名称。
--password=admin123456: 指定管理员用户的密码。
自动发现说明: 上面安装命令并没用指定很多参数如Realm、IPA Server、BaseDN、DNS Domain 等信息,因为之前Hadoop集群主机配置了DNS1、DNS2,所以能够自动发现服务。
测试自动发现:
(1)任意一台未安装ipa客户端主机执行 ipa-client-install --mkhomedir --no-ntp --enable-dns-updates --principal=admin --password=admin123456
(2)停止ipa1主机的服务 : systemctl stop ipa
(3)再次执行 ipa-client-install --mkhomedir --no-ntp --enable-dns-updates --principal=admin --password=admin123456
查看客户端 /etc/krb5.conf 配置
cat /etc/krb5.conf
全部客户端安装完成,界面查看是否全部成功
添加服务主体
ipa界面设置密码策略和kerberos票策略(可选)
命令行查看 keytab有效期,默认是24小时,可以在界面上设置kerberos策略最大存活期久一点
命令行设置服务主体的密码过期时间(可选)
ipa service-mod --setattr krbpasswordexpiration="20991231235959Z" hadoop/master.tobehacker.com@TOBEHACKER.COM
查看master节点hadoop服务主体的所有信息
ipa service-show --all hadoop/master.tobehacker.com@TOBEHACKER.COM
相关目录准备
说明:hadoop是要作为启动用户,hadoop用户属于bigdata组
# 新建keytabs目录
mkdir /etc/security/keytabs
chown -R hadoop:bigdata /opt/bigdata
chmod -R 775 /opt/bigdata
chown -R hadoop:bigdata /data/bigdata
chmod -R 775 /data/bigdata
chown -R hadoop:bigdata /etc/security/keytabs
chmod -R 755 /etc/security/keytabs
添加服务主体
每个服务器节点添加三个principals:hadoop、zookeeper、zkcli
在ipa1 服务器登录,创建三个服务主体,其中 TOBEHACKER.COM 是默认的Kerberos域。
admin登录
kinit admin
创建hadoop服务主体
sudo ipa service-add hadoop/master.tobehacker.com
sudo ipa service-add hadoop/slave1.tobehacker.com
sudo ipa service-add hadoop/slave2.tobehacker.com
创建HTTP 服务主体
此主体是必须的,官网关于WebHDFS的kerberos配置说明
sudo ipa service-add HTTP/master.tobehacker.com
sudo ipa service-add HTTP/slave1.tobehacker.com
sudo ipa service-add HTTP/slave2.tobehacker.com
可以登录IPA 界面查看一下 各个服务主体是否添加成功
添加zookeeper服务主体
sudo ipa service-add zookeeper/master.tobehacker.com
sudo ipa service-add zookeeper/slave1.tobehacker.com
sudo ipa service-add zookeeper/slave2.tobehacker.com
添加zkcli服务主体
sudo ipa service-add zkcli/master.tobehacker.com
sudo ipa service-add zkcli/slave1.tobehacker.com
sudo ipa service-add zkcli/slave2.tobehacker.com
创建/etc/security/keytabs/目录
mkdir /etc/security/keytabs/
chown -R hadoop:bigdata /etc/security/keytabs/
chmod -R 755 /etc/security/keytabs/
生成服务主体的keytab
在ipa1服务器 命令行admin登录
kinit admin
以下命令均在ipa1下面执行
mkdir /etc/security/keytabs/
chown -R bigdata:bigdata /etc/security/keytabs/
chmod -R 770 /etc/security/keytabs/
hadoop服务主体生成keytab:
ipa-getkeytab -s ipa1.tobehacker.com -p hadoop/master.tobehacker.com@TOBEHACKER.COM -k /etc/security/keytabs/hadoop.keytab
ipa-getkeytab -s ipa1.tobehacker.com -p hadoop/slave1.tobehacker.com@TOBEHACKER.COM -k /etc/security/keytabs/hadoop.keytab
ipa-getkeytab -s ipa1.tobehacker.com -p hadoop/slave2.tobehacker.com@TOBEHACKER.COM -k /etc/security/keytabs/hadoop.keytab
HTTP服务主体生成keytab:
这里也写入hadoop.keytab,减少运维复杂度。
ipa-getkeytab -s ipa1.tobehacker.com -p HTTP/master.tobehacker.com@TOBEHACKER.COM -k /etc/security/keytabs/hadoop.keytab
ipa-getkeytab -s ipa1.tobehacker.com -p HTTP/slave1.tobehacker.com@TOBEHACKER.COM -k /etc/security/keytabs/hadoop.keytab
ipa-getkeytab -s ipa1.tobehacker.com -p HTTP/slave2.tobehacker.com@TOBEHACKER.COM -k /etc/security/keytabs/hadoop.keytab
zk服务端生成keytab:
ipa-getkeytab -s ipa1.tobehacker.com -p zookeeper/master.tobehacker.com@TOBEHACKER.COM -k /etc/security/keytabs/zookeeper.keytab
ipa-getkeytab -s ipa1.tobehacker.com -p zookeeper/slave1.tobehacker.com@TOBEHACKER.COM -k /etc/security/keytabs/zookeeper.keytab
ipa-getkeytab -s ipa1.tobehacker.com -p zookeeper/slave2.tobehacker.com@TOBEHACKER.COM -k /etc/security/keytabs/zookeeper.keytab
zkcli服务主体生成keytab:
ipa-getkeytab -s ipa1.tobehacker.com -p zkcli/master.tobehacker.com@TOBEHACKER.COM -k /etc/security/keytabs/zkcli.keytab
ipa-getkeytab -s ipa1.tobehacker.com -p zkcli/slave1.tobehacker.com@TOBEHACKER.COM -k /etc/security/keytabs/zkcli.keytab
ipa-getkeytab -s ipa1.tobehacker.com -p zkcli/slave2.tobehacker.com@TOBEHACKER.COM -k /etc/security/keytabs/zkcli.keytab
分发keytab
分发ipa1上生成的keytab到每个集群主机
scp -r /etc/security/keytabs hadoop@master:/etc/security
scp -r /etc/security/keytabs hadoop@slave1:/etc/security
scp -r /etc/security/keytabs hadoop@slave2:/etc/security
强调:keytabs目录所有者是hadoop
chown -R hadoop:bigdata /etc/security/keytabs
chmod -R 755 /etc/security/keytabs
Hadoop集成kerberos
hadoop添加用户组映射
ipa界面新建ldapbind用户
ldapbind用户添加到bigdata组
初始化重置密码
[root@ipa1 ~]# kinit ldapbind
Password for ldapbind@TOBEHACKER.COM:
Password expired. You must change it now.
Enter new password:
Enter it again:
[root@ipa1 ~]# kinit ldapbind
Password for ldapbind@TOBEHACKER.COM:
将密码写入一个txt文件
如密码是admin123456
echo 'admin123456' > /etc/security/hadoop-ldapbind-pwd.txt
注意:这样并不安全,会在历史命令里留下记录,建议使用随机密码生成工具生成
分发hadoop-ldapbind-pwd.txt到其他集群主机
scp /etc/security/hadoop-ldapbind-pwd.txt hadoop@master:/opt/bigdata/hadoop/hadoop-3.3.4/etc/
scp /etc/security/hadoop-ldapbind-pwd.txt hadoop@slave1:/opt/bigdata/hadoop/hadoop-3.3.4/etc/
scp /etc/security/hadoop-ldapbind-pwd.txt hadoop@slave2:/opt/bigdata/hadoop/hadoop-3.3.4/etc/
设置权限
只能hadoop用户可读,即启动hadoop的用户
chmod 600 /opt/bigdata/hadoop/hadoop-3.3.4/etc/hadoop-ldapbind-pwd.txt
修改hadoop配置文件
下载更新的配置文件:点我下载hadoop conf
HTTP Authentication密钥文件生成
生成随机密钥
openssl rand -base64 32 > /etc/security/signature-secret-file
分发密钥
scp /etc/security/signature-secret-file hadoop@master:/opt/bigdata/hadoop/hadoop-3.3.4/etc/
scp /etc/security/signature-secret-file hadoop@slave1:/opt/bigdata/hadoop/hadoop-3.3.4/etc/
scp /etc/security/signature-secret-file hadoop@slave2:/opt/bigdata/hadoop/hadoop-3.3.4/etc/
修改zookeeper配置、zkfc配置
1. conf/zoo.cfg 添加如下
kerberos.removeHostFromPrincipal=true
kerberos.removeRealmFromPrincipal=true
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
jaasLoginRenew=3600000
2. conf/目录下创建jaas.conf配置文件
每个主机的principal 有所不同,请修改下面的 principal , xxx修改为对应的主机名称
principal这里必须是zookeeper,否则zk的客户端后面启动报错
Server {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab="/etc/security/keytabs/zookeeper.keytab" #keytab证书的位置
storeKey=true
useTicketCache=false
principal="zookeeper/xxx.tobehacker.com@TOBEHACKER.COM"
};
Client {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab="/etc/security/keytabs/zkcli.keytab"
storeKey=true
useTicketCache=false
principal="zkcli/xxx.tobehacker.com@TOBEHACKER.COM"
};
测试kerberos 客户端认证
测试master节点
kinit -kt /etc/security/keytabs/hadoop.keytab hadoop/master.tobehacker.com@TOBEHACKER.COM
重启
重启三台zookeeper
zkServer.sh start
重启hadoop
- 三个节点启动journalnode:
hdfs --daemon start journalnode
- 启动master的namenode
hdfs --daemon start namenode
- 启动slave1的namenode
hdfs --daemon start namenode
- 启动三个节点的datanode:
hdfs --daemon start datanode
- 启动 yarn集群
# master 、slave1
yarn --daemon start resourcemanager
# 三个节点
yarn --daemon start nodemanager
检查ResourceManager服务状态:
yarn rmadmin -getServiceState rm1
检查NodeManager服务状态:
yarn node -list
- 启动master、slave1的DFSZKFailoverController
hdfs --daemon start zkfc
注意: 上述启动过程是基于已经运行过的hadoop集群,进程都是以hadoop用户启动,请确保hadoop用户在bigdata用户组下,且具备大数据组件目录、文件的读写权限,比如hadoop用户具备keytab文件的读权限,否则会启动失败。
填坑环节——票据的缓存目录
每个集群节点注释下/etc/krb5.conf关于default_ccache_name的配置,如下图
或者写死 然后给足权限也行应该(暂未测试)
default_ccache_name = /xx/xx/krb5cc_%
命令行验证kerberos
hadoop fs 验证
在ipa界面可以新建一个用户,如tust,用户加到bigdata用户组,然后测试在masetr节点登录
kinit tust
验证,目前没有文件就是无任何输出
hadoop fs -ls /
HTTP WebHDFS验证
注意下面命令中的tst用户,请改成你自己的用户
还有master.tobehacker.com改为自己的主机域名
curl -i --negotiate -u tst : "http://master.tobehacker.com:9870/webhdfs/v1?op=LISTSTATUS"
win10安装MIT kerberos
目的说明
为了实现win10浏览器能够使用kerberos认证去浏览Hadoop组件界面
下载安装包
安装并修改配置
(1) 建议默认经典安装即可,安装完成需要重启电脑
安装的默认位置:C:\Program Files\MIT\Kerberos
(2) C:\ProgramData\MIT\Kerberos5\krb5.ini 添加如下信息:
[libdefaults]
default_realm = TOBEHACKER.COM
rdns = false
ticket_lifetime = 24h
forwardable = true
# default_ccache_name = KEYRING:persistent:%{uid}
[realms]
TOBEHACKER.COM = {
kdc = ipa1.tobehacker.com
admin_server = ipa1.tobehacker.com
}
[domain_realm]
.tobehacker.com = TOBEHACKER.COM
tobehacker.com = TOBEHACKER.COM
环境变量配置
系统环境变量 上移到最前面
使用MIT Kerberos软件
成功获得凭证
如果不成功请看下面 问题链接
kinit: Configuration file does not specify default realm when parsing name tust
火狐浏览器使用kerberos认证
下载安装
配置火狐浏览器
地址栏输入
about:config
(1)修改首选项
network.negotiate-auth.trusted-uris
填入集群主机FQDN
master.tobehacker.com,slave1.tobehacker.com,slave2.tobehacker.com
(2)设置network.auth.use-sspi为false,关闭sspi验证协议
network.auth.use-sspi
重启火狐浏览器
访问hadoop namenode UI界面 :
http://master.tobehacker.com:9870/
idea的bigdata tool插件使用
该工具暂不支持kerberos认证方式,此处仅是记录一下。
安装
解压放到任意目录即可
点我下载win10安装包
环境变量配置
添加 HADOOP_HOME
path里添加 %HADOOP_HOME%\bin
评论区