我在使用 SLURM(用于作业调度)与 MySQL 数据库配合使用时遇到了问题。我使用的是这作为参考,但也许我误解了其中的一些东西。如果有人能告诉我我错过了什么,那就太好了……
这是 Ubuntu 22.10 上的 SLURM 21.08。我正在使用 MySQL 8.0.32。
我之前已将 SLURM 配置为将完成和记账存储在一个文件中。它似乎运行良好;控制器已启动,我成功运行了一两个作业。
然后,我切换到 MySQL。我/etc/slurm/slurm.conf
更新了以下值:
Job Completion Logging | MySQL
JobCompLoc | slurm_complete_db
JobCompHost | localhost
JobCompPort | <blank>
JobCompUser | slurm
JobCompPass | ...some password...
Job Accounting Storage | SlurmDBD
AccountingStorageLoc | slurm_acct_db
AccountingStorageHost | localhost
AccountingStoragePort | <blank>
AccountingStorageUser | slurm
AccountingStoragePass | ...
AccountingStoreFlags | job_script,job_env
并且/etc/slurm/slurmdbd.conf
:
AuthType=auth/munge
DbdHost=xps8930
DebugLevel=info
StorageHost=xps8930
StorageLoc=slurm_acct_db
StoragePass=...
StorageType=accounting_storage/mysql
StorageUser=slurm
LogFile=/var/log/slurm/slurmdbd.log
PidFile=/run/slurmdbd.pid
SlurmUser=slurm
我创建了两个 MySQL 数据库,一个名为“slurm”的用户,并授予如下权限:
CREATE DATABASE slurm_complete_db DEFAULT CHARACTER SET utf8 COLLATE
utf8_unicode_ci ;
CREATE DATABASE slurm_acct_db DEFAULT CHARACTER SET utf8 COLLATE
utf8_unicode_ci ;
CREATE USER 'slurm'@'%' IDENTIFIED WITH caching_sha2_password BY '' ;
GRANT ALL ON slurm_complete_db.* TO 'slurm'@'%';
GRANT ALL ON slurm_acct_db.* TO 'slurm'@'%';
我使用“show engines”命令确认已启用 InnoDB 支持。
由于数据库是空的,我认为下一步应该是配置数据库。在 中slurm.conf
,我将 ClusterName 称为“personal”。因此,我执行了以下操作:
$ sacctmgr add cluster personal
sacctmgr: error: slurm_persist_conn_open_without_init: failed to open
persistent connection to host:localhost:6819: Connection refused
sacctmgr: error: Sending PersistInit msg: Connection refused
slurm
并且slurmdbd
正在运行(SLURM 和 MySQL 在同一台计算机上):
$ ps -aef | grep slurm
root 1407 1 0 09:42 ? 00:00:08 /usr/sbin/slurmd -D -s
root 1857 1 0 09:43 ? 00:00:03 /usr/sbin/slurmdbd -D -s
在 中/var/log/slurm/slurmdbd.log
,我看到了这一点:
[2023-01-26T18:06:02.541] error: mysql_real_connect failed: 2003 Can't
connect to MySQL server on 'xps8930:3306' (111)
[2023-01-26T18:06:02.541] error: The database must be up when starting
the MYSQL plugin. Trying again in 5 seconds.
在 中/var/log/slurm/slurmctld.log
,我有这个:
[2023-01-26T09:42:33.264] error: Configured MailProg is invalid
[2023-01-26T09:42:33.350] slurmctld version 21.08.5 started on cluster personal
[2023-01-26T09:42:36.121] error: slurm_persist_conn_open_without_init: failed to open persistent connection to host:localhost:6819:
Connection refused
[2023-01-26T09:42:36.121] error: Sending PersistInit msg: Connection refused
[2023-01-26T09:42:36.153] accounting_storage/slurmdbd: clusteracct_storage_p_register_ctld: Registering slurmctld at port 6817 with slurmdbd
[2023-01-26T09:42:36.153] error: Sending PersistInit msg: Connection refused
[2023-01-26T09:42:36.154] error: Sending PersistInit msg: Connection refused
[2023-01-26T09:42:37.456] No memory enforcing mechanism configured.
[2023-01-26T09:42:39.924] error: mysql_real_connect failed: 2002 Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
[2023-01-26T09:42:39.924] fatal: You haven't inited this storage yet.
我不确定下一步该做什么,或者我遗漏了哪些步骤。我想在slurmdbd
和之间slurmctld
,我应该首先关注什么slurmdbd
?一旦它正常工作,那么slurmctld
应该会出现和/或我可以尝试让它工作。
抱歉,帖子太长了!如有任何建议,我们将不胜感激!
PS:命令munge -n | unmunge
执行成功。
答案1
这个问题搁置了好几个月后,我终于决定要解决这个问题。希望这些信息能帮助其他试图解决这个问题的人。
hostname
返回了xps8930
,这就是我在进行基于文件的记账时所使用的。我所要做的就是设置这些值(配置文件中的其他值与问题无关)。
在/etc/slurm/slurm.conf
:
ClusterName=personal
SlurmctldPidFile=/run/slurm/slurmctld.pid
SlurmdPidFile=/run/slurm/slurmd.pid
AccountingStorageHost=localhost
AccountingStoragePass=/var/run/munge/munge.socket.2
AccountingStorageType=accounting_storage/slurmdbd
AccountingStorageUser=slurm
AccountingStoreFlags=job_script,job_env
JobCompHost=localhost
JobCompPass=<some MySQL password>
JobCompType=jobcomp/mysql
JobCompUser=slurm
## Database defaults to slurm_jobcomp_db
#JobCompLoc=slurm_complete_db
在/etc/slurm/slurmdbd.conf
:
AuthInfo=/var/run/munge/munge.socket.2
AuthType=auth/munge
DbdHost=localhost
DebugLevel=info
LogFile=/var/log/slurm/slurmdbd.log
PidFile=/run/slurm/slurmdbd.pid
SlurmUser=slurm
StorageHost=localhost
StoragePass=<same MySQL password as above, since it's the same user>
StorageType=accounting_storage/mysql
StorageUser=slurm
StorageLoc=slurm_acct_db
AccountingStoragePass
第一个文件中的值与第二个文件中的值相同AuthInfo
。我想它们可以留空,以便使用默认值。一个 10 岁的孩子发帖猜测这可能是一个错误。但目前文档因为AuthInfo
说这很好。
启动slurmdbd
(sudo service slurmdbd start
)后,sacctmgr
可以运行:
$ sudo sacctmgr add cluster personal
Adding Cluster(s)
Name = personal
Would you like to commit changes? (You have 30 seconds to decide)
(N/y): y
$ sacctmgr list cluster
Cluster ControlHost ControlPort RPC Share GrpJobs GrpTRES GrpSubmit MaxJobs MaxTRES MaxSubmit MaxWall QOS Def QOS
---------- --------------- ------------ ----- --------- ------- ------------- --------- ------- ------------- --------- ----------- -------------------- ---------
personal 0 0 1 normal
一旦启动正常,我就会启动slurmctld
和slurmd
服务。到目前为止,一切看起来都很好。
端口等保留为默认值。也许可以省略几个值,因为默认值似乎没问题。
简而言之,与我之前相比有什么变化:
- 使用
localhost
slurmdbd.conf
- 并且没有在 中输入密码
AccountingStoragePass
。由于它有“密码”,我认为我必须在那里输入密码。
希望这对其他人有用!