HTCondor 高可用性

HTCondor 高可用性

我目前正在尝试使本地隔离的 HTCondor 集群的作业队列和提交机制高度可用。该集群由 2 个主服务器(以前是 1 个)和几个计算节点以及一个中央存储系统组成。DNS、LDAP 和其他服务由主服务器提供。所有机器上的 Ubuntu 20.04.1 上的 HTCondor 版本均为 8.6.8。

我按照下面的说明进行操作https://htcondor.readthedocs.io/en/latest/admin-manual/high-availability.html。最终配置请参见下文。

spool 目录 (/clients/condor/spool) 位于每个服务器都可以访问的 NFS v3 共享 (/clients) 上。所有机器都有一个本地用户 (r-admin),uid 和 gid 为 1000,spool 目录归该用户所有,因为它被配置为 Condor 用户。每个其他用户都通过 LDAP 映射到每个服务器(包括存储集群)。在两个主服务器上,用户“condor”具有相同的 uid 和 gid。

HADLog 定期更新,不会显示任何错误。每次只有一个主服务器具有主要角色。ReplicationLog 似乎也很好。

然而,存在几个问题:

假设 master1 目前是主服务器。使用没有任何参数的 condor_q 仅在这台机器上有效,并显示正确的作业队列。在 master2 上,使用 condor_q 会导致分段错误。如果将 SCHEDD_NAME 作为参数(“condor_q master@”),则会出现输出,但其中包含 master2 的 IP 且没有任何作业。而且作业不会启动,它们处于空闲状态。

有人知道配置可能出了什么问题吗?或者我可以在哪里找到有关此主题的更多见解?任何帮助都将不胜感激!


编辑

当尝试在 master2 上运行 condor_q 时,您可以在下面找到 master1 上的 SchedLog 条目:

10/08/20 11:50:30 (pid:47347) Number of Active Workers 0  
10/08/20 11:50:41 (pid:47347) AUTHENTICATE: handshake failed!    
10/08/20 11:50:41 (pid:47347) DC_AUTHENTICATE: authentication of <192.168.1.22:10977>
did not result in a valid mapped user name, which is 
required for this command (519 QUERY_JOB_ADS_WITH_AUTH), so aborting. 
10/08/20 11:50:41 (pid:47347) DC_AUTHENTICATE: reason for authentication failure: 
AUTHENTICATE:1002:Failure performing handshake|AUTHENTICATE:1004:Failed to authenticate using KERBEROS|
AUTHENTICATE:1004:Failed to authenticate using FS|FS:1004:Unable to lstat(/tmp/FS_XXXGNYmKn)  

主恶魔

DAEMON_LIST = MASTER, SCHEDD, COLLECTOR, NEGOTIATOR

节点守护进程

DAEMON_LIST = MASTER, STARTD

本地配置(/etc/condor/condor_config.local,所有服务器)

COLLECTOR_NAME = HPC
CENTRAL_MANAGER_HOST = master1.condor,master2.condor
UID_DOMAIN = condor
FILESYSTEM_DOMAIN = condor

ENABLE_HISTORY_ROTATION = TRUE
MAX_HISTORY_LOG = 2000000000
MAX_HISTORY_ROTATIONS = 100

EMAIL_DOMAIN = condor

ENABLE_IPV6 = FALSE

CONDOR_IDS = 1000.1000

QUEUE_SUPER_USERS = root, r-admin

CONDOR_ADMIN = root@condor

SOFT_UID_DOMAIN = TRUE

ALLOW_READ = *, $(CONDOR_HOST), $(IP_ADDRESS), $(CENTRAL_MANAGER_HOST)
ALLOW_WRITE = *, $(CONDOR_HOST), $(IP_ADDRESS), $(CENTRAL_MANAGER_HOST)
ALLOW_ADMINISTRATOR = *, $(CONDOR_HOST), $(IP_ADDRESS), $(CENTRAL_MANAGER_HOST)

HA 配置(/etc/condor/config.d/ha.conf,仅主服务器)

## HA Konfiguration

## Shared Job Queue
MASTER_HA_LIST = SCHEDD
SPOOL = /clients/condor/spool
HA_LOCK_URL = file:/clients/condor/spool
VALID_SPOOL_FILES = $(VALID_SPOOL_FILES) SCHEDD.lock
SCHEDD_NAME = master@


## Shared Negotiator and Collector
HAD_USE_SHARED_PORT = TRUE
HAD_LIST = master1.condor:$(SHARED_PORT_PORT),master2.condor:$(SHARED_PORT_PORT)

REPLICATION_USE_SHARED_PORT = TRUE
REPLICATION_LIST = master1.condor:$(SHARED_PORT_PORT),master2.condor:$(SHARED_PORT_PORT)

HAD_USE_PRIMARY = TRUE

HAD_CONTROLLEE = NEGOTIATOR
MASTER_NEGOTIATIOR_CONTROLLER = HAD

DAEMON_LIST = $(DAEMON_LIST), HAD, REPLICATION

HAD_USE_REPLICATION = TRUE

STATE_FILE = $(SPOOL)/Accountantnew.log

MASTER_HAD_BACKOFF_CONSTANT = 360

答案1

在邮件列表和一些实验的帮助下,我设法解决了这个问题。

由于现在有两个主服务器,它们不仅需要一个用于假脱机的共享文件系统(如 HA 指南中所述和上文所示),还需要一个用于身份验证的共享文件系统。至少将 FS_REMOTE 配置为身份验证机制是实现此目的的一种方法:

SEC_DEFAULT_AUTHENTICATION_METHODS = FS, FS_REMOTE
FS_REMOTE_DIR = /clients/condor/sec

守护进程正确验证后,作业开始运行,一切似乎都正常。condor_q 生成了正确的输出,故障转移按预期工作。但是,作业完成后并未从作业队列中删除,而是重新排队:

SchedLog: "SetEffectiveOwner security violation: setting owner to r-admin when active owner is "condor""
ShadowLog: "SetEffectiveOwner(r-admin) failed with errno=13: Permission denied."

错误消息指出了有关用户 condor 的一些信息,但实际上根本不应该涉及该信息,因为 CONDOR_IDS 已设置为 1000.1000 (r-admin)。实际上不存在任何文件、进程或其他任何由用户“condor”拥有或引用的内容。

事实证明,condor 以某种方式仍在内部引用这个用户名(见下文),这似乎是升级后的新用户名。在 QUEUE_SUPER_USERS 中添加“condor”后,问题得到解决,作业正常退出。

04/22/21 23:50:25 (fd:19) (pid:2200) (D_COMMAND) Calling HandleReq <handle_q> (0) for command 1112 (QMGMT_WRITE_CMD) from condor@child <XXX.XXX.XXX.XXX:22171>
04/22/21 23:50:25 (fd:19) (pid:2200) (D_SYSCALLS) Got request #10030
04/22/21 23:50:25 (fd:19) (pid:2200) (D_ALWAYS) SetEffectiveOwner security violation: setting owner to r-admin when active owner is "condor"

相关内容