В настоящее время я пытаюсь сделать очередь заданий и механизм отправки локального изолированного кластера HTCondor высокодоступным. Кластер состоит из 2 главных серверов (ранее - 1), нескольких вычислительных узлов и центральной системы хранения. DNS, LDAP и другие услуги предоставляются главными серверами. Версия HTCondor - 8.6.8 на Ubuntu 20.04.1 на всех машинах.
Я следовал инструкциям в https://htcondor.readthedocs.io/en/latest/admin-manual/high-availability.html . Полученный конфиг смотрите ниже.
Каталог спула (/ clients / condor / spool) находится в общем ресурсе NFS v3, к которому каждый сервер имеет доступ (/ clients). У всех машин есть локальный пользователь (r-admin) с uid и gid 1000, а каталог спула принадлежит этому пользователю, поскольку он настроен как пользователь Condor. Все остальные пользователи отображаются через LDAP на каждом сервере, включая кластер хранения. На обоих главных серверах пользователь condor имеет одинаковые uid и gid.
HADLog регулярно обновляется и не сообщает об ошибках. Только один мастер играет главную роль одновременно. ReplicationLog тоже кажется прекрасным.
Однако есть несколько проблем:
Предположим, что master1 в настоящее время является основным. Использование condor_q без каких-либо параметров работает только на этом компьютере и показывает правильную очередь заданий. На master2 использование condor_q приводит к ошибке сегментации. Если задано SCHEDD_NAME в качестве аргумента ("condor_q master @"), вывод есть, но с IP-адресом master2 в нем и без каких-либо заданий. Также задания не запускаются, они находятся в состоянии ожидания.
Кто-нибудь знает, что может быть не так с конфигурацией или где я могу найти больше информации по этой теме? Любая помощь будет оценена по достоинству!
Edit
Ниже вы можете найти запись SchedLog на master1 при попытке запустить condor_q на master2:
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)
Master Daemons
DAEMON_LIST = MASTER, SCHEDD, COLLECTOR, NEGOTIATOR
Node Daemons
DAEMON_LIST = MASTER, STARTD
Local Config (/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
С помощью списка рассылки и некоторых экспериментов мне удалось решить проблему.
Поскольку теперь есть два мастер-сервера, им нужна не только общая файловая система для буферизации (как описано в руководстве по высокой доступности и показано выше), но и одна для аутентификации. По крайней мере, настройка 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 каким-то образом все еще ссылается на это имя пользователя внутри (см. ниже), которое кажется новым после обновления. После добавления "condor" в QUEUE_SUPER_USERS проблема была решена, и задания завершились нормально.
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"