hadoop集成kerberos错误排查-core dump

本文记录了一次安装配置 Kerberos 过程中遇到的 KDC coredump 问题及其解决过程。作者通过排查日志发现磁盘空间不足导致数据库异常,清理磁盘并重建数据库后成功解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近研究kerberos,刚开始安装就遇到了个棘手的问题,core dump了。
好些年不写c程序,这东西还真有点陌生。

[root@hadoop165 ~]# service krb5kdc start
Redirecting to /bin/systemctl start  krb5kdc.service
Job for krb5kdc.service failed because a fatal signal was delivered causing the control process to dump core. See "systemctl status krb5kdc.service" and "journalctl -xe" for details.

[root@hadoop165 ~]# systemctl status krb5kdc.service
● krb5kdc.service - Kerberos 5 KDC
   Loaded: loaded (/usr/lib/systemd/system/krb5kdc.service; enabled; vendor preset: disabled)
   Active: failed (Result: core-dump) since 一 2017-08-28 16:31:20 CST; 4s ago
  Process: 792 ExecStart=/usr/sbin/krb5kdc -P /var/run/krb5kdc.pid $KRB5KDC_ARGS (code=dumped, signal=SEGV)
 Main PID: 9146 (code=dumped, signal=SEGV)

828 16:31:08 hadoop165 systemd[1]: Starting Kerberos 5 KDC...
828 16:31:20 hadoop165 systemd[1]: krb5kdc.service: control process exited, code=dumped status=11
828 16:31:20 hadoop165 systemd[1]: Failed to start Kerberos 5 KDC.
828 16:31:20 hadoop165 systemd[1]: Unit krb5kdc.service entered failed state.
828 16:31:20 hadoop165 systemd[1]: krb5kdc.service failed.

根据提示又查看了下journalctl -xe。
发现一连串磁盘空间满的报错。
df查看还真是满了。

[root@hadoop165 sbin]# df
文件系统                   1K-块     已用     可用 已用% 挂载点
/dev/mapper/centos-root 52464612 52464592       20  100% /
devtmpfs                 3995156        0  3995156    0% /dev
tmpfs                    4005608        0  4005608    0% /dev/shm
tmpfs                    4005608   410992  3594616   11% /run
tmpfs                    4005608        0  4005608    0% /sys/fs/cgroup
/dev/mapper/centos-home 94919392   247052 94672340    1% /home
/dev/sda1                 508588   128924   379664   26% /boot
tmpfs                     801124        0   801124    0% /run/user/0
tmpfs                     801124        0   801124    0% /run/user/1000

清理磁盘,空间剩余42%。
重新测试,还是报原来的错误。
systemctl status的信息没有说明。
继续查看journalctl -xe的报错,根据时间点发现了具体的报错。
这里发现核心报错为db2.so的segment,怀疑是存储出了问题,结合上面的磁盘空间满了的情况怀疑数据库处于一种中间状态导致程序异常。

[root@hadoop165 logs]# journalctl -xe --no-pager

8月 29 09:45:09 hadoop165 polkitd[931]: Registered Authentication Agent for unix-process:12871:411771162 (system bus name :1.193646 [/usr/bin/pkttyagent --notify-fd 5 --fallback], object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale zh_CN.UTF-8)
8月 29 09:45:09 hadoop165 systemd[1]: Starting Kerberos 5 KDC...
-- Subject: Unit krb5kdc.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit krb5kdc.service has begun starting up.
8月 29 09:45:10 hadoop165 kernel: krb5kdc[12917]: segfault at 7fd000053166 ip 00007fd0694cafa6 sp 00007ffd92e568e0 error 6 in db2.so[7fd0694bc000+18000]
8月 29 09:45:58 hadoop165 abrt-hook-ccpp[12919]: /var/spool/abrt is 3445558898 bytes (more than 1279MiB), deleting 'ccpp-2017-08-29-09:41:58-12318'
8月 29 09:45:59 hadoop165 systemd[1]: krb5kdc.service: control process exited, code=dumped status=11
8月 29 09:45:59 hadoop165 systemd[1]: Failed to start Kerberos 5 KDC.
-- Subject: Unit krb5kdc.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit krb5kdc.service has failed.
-- 
-- The result is failed.
8月 29 09:45:59 hadoop165 systemd[1]: Unit krb5kdc.service entered failed state.
8月 29 09:45:59 hadoop165 systemd[1]: krb5kdc.service failed.
8月 29 09:45:59 hadoop165 polkitd[931]: Unregistered Authentication Agent for unix-process:12871:411771162 (system bus name :1.193646, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale zh_CN.UTF-8) (disconnected from bus)
8月 29 09:46:00 hadoop165 abrt-server[12991]: 正在生成核心转储

将数据库数据清空,并重新生成,测试问题解决。

[root@hadoop165 ~]# cd /var/kerberos/krb5kdc/
[root@hadoop165 krb5kdc]# ls
kadm5.acl  kdc.conf  principal  principal.kadm5  principal.kadm5.lock  principal.ok
[root@hadoop165 krb5kdc]# rm principal* -rf
[root@hadoop165 krb5kdc]# kdb5_util create -r BONC -s
Loading random data
Initializing database '/var/kerberos/krb5kdc/principal' for realm 'BONC',
master key name 'K/M@BONC'
You will be prompted for the database Master Password.
It is important that you NOT FORGET this password.
Enter KDC database master key: 
Re-enter KDC database master key to verify: 
[root@hadoop165 krb5kdc]# 
在 Kafka 的 Kerberos 配置中,`kerberos.domain.name`(或等价的配置项 `sasl.kerberos.domain.name`)用于指定 Kerberos Realm 的域名映射,其取值会影响 Kafka Broker 或客户端在进行 Kerberos 认证时如何解析 Realm 名称和 Principal 的匹配逻辑。 ### Realm 名称与主机域名的映射 Kerberos 使用 `krb5.conf` 文件中的 `[domain_realm]` 配置段来定义主机域名与 Realm 名称之间的映射关系。例如: ```ini [domain_realm] .hadoop.com = HADOOP.COM hadoop.com = HADOOP.COM ``` 当 Kafka 配置中将 `kerberos.domain.name` 设置为 `hadoop.hadoop.com` 或 `hadoop.com` 时,Kafka 会将该值用于查找对应的 Realm 名称。如果 `krb5.conf` 中定义了 `.hadoop.com = HADOOP.COM`,那么 `hadoop.com` 会被映射到 `HADOOP.COM` Realm,而 `hadoop.hadoop.com` 则可能不会匹配到该映射规则,除非有额外的配置支持[^2]。 ### 不同取值对认证行为的影响 - **设置为 `hadoop.com`** 如果 Kafka 的 `kerberos.domain.name` 设置为 `hadoop.com`,并且 `krb5.conf` 中有 `.hadoop.com = HADOOP.COM` 的映射规则,那么 Kafka 会正确解析出 Realm 名称为 `HADOOP.COM`,并使用该 Realm 进行 Kerberos 认证。这种配置适用于大多数标准部署场景,能确保 Principal 名称与 Realm 匹配[^1]。 - **设置为 `hadoop.hadoop.com`** 如果设置为 `hadoop.hadoop.com`,而 `krb5.conf` 中没有明确映射 `.hadoop.hadoop.com` 到 `HADOOP.COM`,那么 Kafka 可能无法正确识别 Realm,从而导致认证失败。这种情况通常需要额外配置 `krb5.conf` 来确保域名与 Realm 的映射正确[^2]。 ### 实际配置示例 假设 Kafka Broker 的 Principal 为 `kafka/node1.hadoop.com@HADOOP.COM`,则 Kafka 配置中 `kerberos.domain.name` 应设置为 `hadoop.com`,以便正确匹配 Realm 和 Principal。 ```java KafkaServer { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true keyTab="/path/to/kafka.keytab" principal="kafka/node1.hadoop.com@HADOOP.COM" storeKey=true; }; ``` 同时,`server.properties` 中应配置: ```properties sasl.kerberos.service.name=kafka sasl.kerberos.realm=HADOOP.COM ``` 如果使用 `kerberos.domain.name=hadoop.hadoop.com`,则必须确保 `krb5.conf` 中有: ```ini .hadoop.hadoop.com = HADOOP.COM ``` 否则将无法正确解析 Realm,导致认证失败。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值