玩转大数据

Kerberos 启用多进程KDC

2023-10-08  本文已影响0人  AlienPaul

背景

KDC默认是单进程单线程的,它只能够串行的处理请求。通常来说性能足够,但是应对一些负载较重的场景可能不满足需求。为了解决这个问题,社区提供了多进程KDC方式,即原来的KDC进程作为主supervisor进程,fork出来多个子worker进程,从而将处理请求的负载分散在多个worker进程中,提高了KDC请求处理的吞吐量。

krb5kdc命令的使用帮助中给出了配置worker进程数量的方法:

usage: krb5kdc [-x db_args]* [-d dbpathname] [-r dbrealmname]
                [-R replaycachename] [-m] [-k masterenctype]
                [-M masterkeyname] [-p port] [-P pid_file]
                [-n] [-w numworkers] [/]

where,
        [-x db_args]* - Any number of database specific arguments.
                        Look at each database module documentation for                  supported arguments

我们可以使用-w参数指定worker进程数。

环境要求

配置方式

下面以配置kdc 3个worker子进程为例,说明配置方法。

在查阅相关资料之前,首先想到的是由于kdc服务是通过systemctl启动的,我们可以从它的服务配置文件入手。

执行systemctl status krb5kdc得到类似如下输出:

[root@manager ~]# systemctl status krb5kdc
● krb5kdc.service - Kerberos 5 KDC
   Loaded: loaded (/usr/lib/systemd/system/krb5kdc.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2023-09-19 02:06:59 CST; 2 weeks 5 days ago
  Process: 1236 ExecStart=/usr/sbin/krb5kdc -P /var/kerberos/run/krb5kdc.pid $KRB5KDC_ARGS (code=exited, status=0/SUCCESS)
 Main PID: 1811 (krb5kdc)
   CGroup: /system.slice/krb5kdc.service
           └─1811 /usr/sbin/krb5kdc -P /var/kerberos/run/krb5kdc.pid

找到krb5kdc service配置文件/usr/lib/systemd/system/krb5kdc.service。编辑它:

[Unit]
Description=Kerberos 5 KDC
After=syslog.target network.target

[Service]
User=kerberos
Type=forking
PIDFile=/var/kerberos/run/krb5kdc.pid
EnvironmentFile=-/etc/sysconfig/krb5kdc
ExecStart=/usr/sbin/krb5kdc -P /var/kerberos/run/krb5kdc.pid $KRB5KDC_ARGS
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

修改其中的:

ExecStart=/usr/sbin/krb5kdc -P /var/kerberos/run/krb5kdc.pid $KRB5KDC_ARGS

为:

ExecStart=/usr/sbin/krb5kdc -w 3 -P /var/kerberos/run/krb5kdc.pid $KRB5KDC_ARGS

然后执行:

systemctl daemon-reload
systemctl restart krb5kdc

worker进程数已修改生效。

我们注意到$KEB5KDC_ARGS这个变量。查阅资料后可知/etc/sysconfig/krb5kdc配置文件可配置$KEB5KDC_ARGS变量。下面介绍一种更为简单的配置方式(无需再按照前面介绍的方式修改)。

修改/etc/sysconfig/krb5kdc配置文件为:

KRB5KDC_ARGS='-w 3'

然后执行systemctl restart krb5kdc即可生效。

正常启动之后,使用ps -ef | grep kerberos命令,查看kdc有几个进程。观察到类似如下输出:

kerberos 25405     1  0 23:42 ?        00:00:00 /usr/sbin/krb5kdc -w 3 -P /var/kerberos/run/krb5kdc.pid
kerberos 25408 25405  0 23:42 ?        00:00:00 /usr/sbin/krb5kdc -w 3 -P /var/kerberos/run/krb5kdc.pid
kerberos 25411 25405  0 23:42 ?        00:00:00 /usr/sbin/krb5kdc -w 3 -P /var/kerberos/run/krb5kdc.pid
kerberos 25413 25405  0 23:42 ?        00:00:00 /usr/sbin/krb5kdc -w 3 -P /var/kerberos/run/krb5kdc.pid

或者使用systemctl status krb5kdc查看:

[root@manager ~]# systemctl status krb5kdc
● krb5kdc.service - Kerberos 5 KDC
   Loaded: loaded (/usr/lib/systemd/system/krb5kdc.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2023-10-08 23:42:12 CST; 22min ago
  Process: 25403 ExecStart=/usr/sbin/krb5kdc -w 3 -P /var/kerberos/run/krb5kdc.pid $KRB5KDC_ARGS (code=exited, status=0/SUCCESS)
 Main PID: 25405 (krb5kdc)
   CGroup: /system.slice/krb5kdc.service
           ├─25405 /usr/sbin/krb5kdc -w 3 -P /var/kerberos/run/krb5kdc.pid
           ├─25408 /usr/sbin/krb5kdc -w 3 -P /var/kerberos/run/krb5kdc.pid
           ├─25411 /usr/sbin/krb5kdc -w 3 -P /var/kerberos/run/krb5kdc.pid
           └─25413 /usr/sbin/krb5kdc -w 3 -P /var/kerberos/run/krb5kdc.pid

可以看到kdc有一个主进程和3个子进程。修改成功。

参考文献

KDC worker processes feature · krb5/krb5@62c814a (github.com)

Projects/Parallel KDC - K5Wiki (kerberos.org)

7.4. 调整 krb5kdc 进程的数量 Red Hat Enterprise Linux 9 | Red Hat Customer Portal

上一篇 下一篇

猜你喜欢

热点阅读