前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >slurm--核算和资源限制

slurm--核算和资源限制

作者头像
姚华
发布2023-03-08 12:39:27
2.8K0
发布2023-03-08 12:39:27
举报
文章被收录于专栏:运维民工运维民工

概览

Slurm可以被配置为收集每个作业和作业步骤执行的核算信息。核算记录可以被写入一个简单的文本文件或一个数据库。目前正在执行的作业和已经终止的作业的信息都是可用的。sacct命令可以报告正在运行或已经终止的作业的资源使用情况,包括单个任务,这对于检测任务之间的负载不平衡非常有用。sstat命令可用于仅对当前正在运行的作业进行统计。它也可以为你提供关于任务之间不平衡的有价值的信息。sreport可以用来生成基于特定时间间隔内执行的所有作业的报告。

有三种不同的插件类型与资源核算有关。与这些插件相关的Slurm配置参数(在slurm.conf中)包括:

  • AccountingStorageType控制如何记录详细的作业和作业步骤信息。你可以把这些信息存储在一个文本文件或SlurmDBD中。
  • JobAcctGatherType与操作系统有关,它控制了使用什么机制来收集核算信息。支持的值是jobacct_gather/linux, jobacct_gather/cgroup和jobacct_gather/none(不收集信息)。
  • JobCompType控制工作完成信息的记录方式。这可以用来记录基本作业信息,如作业名称、用户名、分配的节点、开始时间、完成时间、退出状态等。如果只需要保存基本作业信息,这个插件应该能满足你的需求,而且开销最小。你可以将这些信息存储在一个文本文件,或者MySQL或MariaDB数据库中。

使用sacct查看工作信息,取决于AccountingStorageType被配置为收集和存储该信息。sreport的使用取决于一些数据库被用来存储这些信息。

使用 sacct 或 sstat 来查看作业中的资源使用信息,取决于 JobAcctGatherType 和 AccountingStorageType 被配置为收集和存储该信息。

将核算信息存储到文本文件中是非常简单的。只要配置适当的插件(如JobCompType=jobcomp/filetxt),然后指定文件的路径名(如JobCompLoc=/var/log/slurm/job_completions)。使用logrotate或类似工具,防止日志文件过大。在移动文件后,但在压缩文件前,向slurmctld守护进程发送一个SIGUSR2信号,这样就会有新的日志文件产生。

将数据直接从Slurm中存储到数据库中似乎很有吸引力,但它不仅需要为Slurm控制守护进程(slurmctld)提供用户名和密码数据,还需要为需要访问数据的用户命令(sacct、sreport和sacctmgr)提供。将潜在的敏感信息提供给所有用户,使得数据库的安全性更难提供。通过一个中间守护程序发送数据可以提供更好的安全性和性能(通过缓存数据)。SlurmDBD(Slurm Database Daemon)提供了这样的服务。SlurmDBD是用C语言编写的,多线程,安全且快速。下面将介绍使用SlurmDBD所需的配置。直接将信息存储到数据库中的做法类似于

注意,SlurmDBD依赖于现有的Slurm插件来进行身份验证,以及Slurm SQL来使用数据库,但在安装SlurmDBD的主机上不需要其他的Slurm命令和守护程序。在要运行SlurmDBD的服务器上安装slurm和slurm-slurmdbd RPMs。

注意,如果你从使用MySQL插件切换到使用SlurmDBD插件,你必须确保集群已经被添加到数据库中。MySQL插件没有这个要求,但如果你在使用MySQL插件时有这个要求,也不会有什么影响。你可以通过以下方式验证

代码语言:javascript
复制
sacctmgr list cluster

如果集群不在那里,就添加它(其中我的集群的名字是snowflake)。

代码语言:javascript
复制
sacctmgr add cluster snowflake

如果不这样做,将导致slurmctld在切换后无法与slurmdbd对话。如果你打算升级到新版本的Slurm,不要同时切换插件,否则你可能得到意想不到的结果。先做一个再做另一个。

如果SlurmDBD被配置为使用但没有响应,那么slurmctld将利用一个内部缓存,直到SlurmDBD返回服务。缓存的数据在关机时由slurmctld写入本地存储,并在启动时恢复。如果SlurmDBD在slurmctld启动时不可用,将使用基于守护进程最后一次通信时状态的有效银行账户、用户限额等的缓存。注意,SlurmDBD必须在slurmctld首次启动时进行响应,因为没有这种关键数据的缓存。由slurmctld生成的作业和步骤记录将根据需要写入缓存,并在返回服务时传输给SlurmDBD。注意,如果SlurmDBD宕机的时间足够长,排队记录的数量超过了最大队列大小,那么消息将开始被丢弃。

架构

通过SlurmDBD,我们能够在一个地方收集多个集群的数据。这确实对用户的命名和ID施加了一些限制。核算是通过用户名(而不是用户ID)来维护的,但是一个给定的用户名应该在所有的计算机上指的是同一个人。认证依赖于用户ID号码,所以这些号码必须在与每个SlurmDBD通信的所有计算机上统一,至少对需要认证的用户来说是如此。特别是,配置的SlurmUser必须在所有集群中具有相同的名称和ID。如果你计划有用户账户、限制等的管理员,他们也必须在所有集群中拥有一致的名称和ID。如果你计划限制对核算记录的访问(例如,只允许一个用户查看他的工作记录),那么所有用户都应该有一致的名字和ID。

注意:只支持小写的用户名。

确保数据安全的最好方法是对SlurmDBD的通信进行认证,我们推荐MUNGE来实现这一目的。如果你有一个由Slurm管理的集群,并在这一个集群上执行SlurmDBD,正常的MUNGE配置就足够了。否则,MUNGE应该被安装在所有Slurm管理的集群的所有节点上,加上执行SlurmDBD的机器。然后,你可以选择为所有这些计算机安装一个MUNGE密钥,或者为每个集群维护一个唯一的密钥,再加上集群之间通信的第二个密钥,以提高安全性。MUNGE的改进计划是在一个配置文件中支持两个密钥,但目前必须用不同的配置启动两个不同的守护程序,以支持两个不同的密钥(创建两个密钥文件,用--密钥文件选项启动守护程序,以找到适当的密钥,再加上--套接字选项,为每个密钥指定不同的本地域套接字)。在Slurm和SlurmDBD配置文件(分别为slurm.conf和slurmdbd.conf,更多细节将在下面提供)中需要本地域套接字的路径名。

无论你是否使用任何认证模块,你都需要有一种方法让SlurmDBD为用户和/或管理员获得UID。如果使用MUNGE,最理想的是你的用户在所有的集群上都有相同的ID。如果是这样的话,你应该在数据库服务器上有一个每个集群的/etc/passwd文件的组合,以允许DBD解析名字进行认证。如果使用MUNGE,而用户的名字不在passwd文件中,行动将失败。如果不使用MUNGE,你应该把任何你想成为管理员或操作员的人加入到passwd文件中。如果他们打算运行sacctmgr或任何核算工具,他们应该有相同的UID,否则他们将无法正确认证。一个LDAP服务器也可以作为收集这些信息的途径。

Slurm JobComp配置

目前,SlurmDBD不支持作业完成,但可以直接写入数据库、脚本或平面文件。如果你正在使用核算存储插件运行,使用作业完成插件可能是多余的。如果你想对此进行配置,一些比较重要的参数包括。

  • JobCompHost:只有在使用数据库时才需要。数据库服务器执行的主机的名称或地址。
  • JobCompLoc:只有在使用平面文件时才需要。写入作业完成数据的文件的位置。
  • JobCompPass:只有在使用数据库时才需要。连接到数据库的用户的密码。由于密码不能被安全地维护,不建议直接将信息存储在数据库中。
  • JobCompPort:只有在使用数据库时才需要。数据库接受通信的网络端口。
  • JobCompType:设置为 "jobcomp/mysql "或 "jobcomp/filetxt "的jobcomp插件的类型。
  • JobCompUser:只有在使用数据库时才需要。用来连接数据库的用户名。
  • JobCompParams:传递任意的文本字符串给作业完成插件。

构建前的Slurm核算配置

虽然SlurmDBD可以用一个平面文本文件来记录工作完成情况和类似的数据,但这种配置不允许在用户和账户之间建立 "关联"。一个数据库允许这样的配置。

MySQL或MariaDB是首选的数据库。

注意:如果你有一个现有的Slurm核算数据库,并计划将你的数据库服务器从10.2.1之前的版本升级到MariaDB 10.2.1(或更新的版本),或从任何版本的MySQL,请联系SchedMD寻求帮助。

要启用这种数据库支持,人们只需要在系统上拥有他们希望使用的数据库的开发包。Slurm使用MySQL中的InnoDB存储引擎,使回滚成为可能。这必须在你的MySQL安装中可用,否则回滚将无法工作。

slurm配置脚本使用mysql_config来查找它需要的关于已安装的库和头文件的信息。在配置slurm构建时,你可以用--with-mysql_conf=/path/to/mysql_config选项指定你的mysql_config脚本的位置。在一个成功的配置中,输出是这样的。

代码语言:javascript
复制
checking for mysql_config... /usr/bin/mysql_config
MySQL test program built properly.

注意:在第一次运行slurmdbd之前,查看MySQL的innodb_buffer_pool_size的当前设置。考虑将这个值设置得足够大,以处理数据库的大小。当把大表转换到新的数据库模式或清除旧记录时,这个值太小会有问题。我们建议将系统内存的很大一部分分配给它,记住运行MySQL/MariaDB的机器上的其他资源需求,大约在可用内存的5%到50%之间。也建议将innodb_lock_wait_timeout和innodb_log_file_size设置为比默认值大的值。

请看下面的例子。

代码语言:javascript
复制
mysql> SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
+-------------------------+------------+
| Variable_name           | Value      |
+-------------------------+------------+
| innodb_buffer_pool_size | 4294967296 |
+-------------------------+------------+
1 row in set (0.001 sec)
$cat my.cnf
...
[mysqld]
innodb_buffer_pool_size=4096M
innodb_log_file_size=64M
innodb_lock_wait_timeout=900
...

此外,在5.7之前的MySQL版本中,默认的行格式被设置为COMPACT,这可能会在升级期间创建表时造成一些问题。在最近的版本中,它被改变为动态格式。表的行格式决定了其行在页面中的物理存储方式,并直接影响到查询和DML操作的性能。在非常特殊的情况下,使用DYNAMIC以外的格式可能会导致行不适合放入页面,MySQL可能会因此在创建表的过程中抛出一个错误。因此,建议在创建你的数据库表之前,如果你默认不使用DYNAMIC,请仔细阅读关于行的格式,如果你的数据库版本支持,请考虑设置。如果在升级过程中出现以下InnoDB错误,这时可以对表进行修改(可能需要一些时间),将行格式设置为DYNAMIC,以便让转换继续进行。

代码语言:javascript
复制
[Warning] InnoDB: Cannot add field ... in table ... because after adding it, the row size is Y which is greater than max

你可以通过显示innodb_default_row_format变量看到默认的行格式是什么。

代码语言:javascript
复制
mysql> SHOW VARIABLES LIKE 'innodb_default_row_format';
+---------------------------+---------+
| Variable_name             | Value   |
+---------------------------+---------+
| innodb_default_row_format | dynamic |
+---------------------------+---------+
1 row in set (0.001 sec)

你也可以通过运行以下命令看到表是如何被创建的,其中db_name是你在slurmdbd.conf中设置的Slurm数据库(StorageLoc)的名称。

代码语言:javascript
复制
mysql> SHOW TABLE STATUS IN db_name;

构建后的Slurm核算配置

为了简单起见,我们将在假设你是用SlurmDBD运行的情况下进行。你可以直接与一个存储插件进行通信,但这提供了最小的安全性。

必须设置几个Slurm配置参数以支持在SlurmDBD中归档信息。SlurmDBD有一个单独的配置文件,它在一个单独的章节中被记录。请注意,你可以将核算信息写入SlurmDBD,而作业完成记录则写入文本文件或根本就不维护。如果你不设置以 "AccountingStorage "开头的配置参数,那么核算信息将不会被引用或记录。

  • AccountingStorageEnforce: 这个选项包含一个逗号分隔的选项列表,你可能想强制执行。有效的选项是以下任何逗号分隔的组合
    • associations 如果用户的关联不在数据库中,这将阻止用户运行作业。这个选项将防止用户访问无效的账户。
    • limits - 这将强制执行设置在关联和qos上的限制。通过设置这个选项,"关联 "选项被自动设置。如果使用qos,限制将被强制执行,但如果你想强制访问qos,仍然需要下面描述的'qos'。
    • nojobs - 这将使得没有工作信息被存储在核算中。通过设置它,'nosteps'也被设置。
    • nosteps - 这将使核算中不存储步骤信息。nojobs和nosteps在你想使用限制但并不真正关心利用率的环境中都很有用。
    • qos - 这将要求所有作业指定(公开地或默认地)一个有效的qos(服务质量)。QOS值是为数据库中的每个关联定义的。通过设置这个选项,"关联 "选项被自动设置。如果你想强制执行QOS限制,你需要使用'限制'选项。
    • safe - 这将确保作业只有在使用设置了GrpTRESMins限制的关联或QOS时才会被启动,如果该作业能够运行到完成。如果不设置这个选项,只要作业的使用量没有达到TRES-分钟的限制,作业就会被启动,这可能会导致作业被启动,但在达到限制时又被杀死。通过设置这个选项,"关联 "选项和 "限制 "选项都会自动设置。
    • wckeys - 这将防止用户在他们没有权限的wckey下运行作业。通过使用这个选项,"关联 "选项被自动设置。'TrackWCKey'选项也被设置为真。
  • (注意:associations 是集群、账户、用户名和可选分区名称的组合)。 如果没有设置AccountingStorageEnforce(默认行为),作业将根据每个集群上在Slurm中配置的策略来执行。
  • AccountingStorageExternalHost。一个逗号分隔的外部slurmdbds列表([:port][,...]),用于注册。如果没有给出端口,将使用AccountingStoragePort。这允许在外部slurmdbd注册的集群使用--cluster/-M客户端命令选项互相通信。如果外部slurmdbd不存在,该集群将把自己添加到外部slurmdbd中。如果外部slurmdbd上已经存在一个非外部集群,slurmctld将忽略向外部slurmdbd的注册。
  • AccountingStorageHost。SlurmDBD执行的主机的名称或地址
  • AccountingStoragePass。如果将SlurmDBD与第二个MUNGE守护进程一起使用,请存储MUNGE用来提供全企业范围内的认证的命名套接字的路径名(即/var/run/munge/moab.socket.2) 。否则将使用默认的MUNGE守护程序。
  • AccountingStoragePort: SlurmDBD接受通信的网络端口。
  • AccountingStorageType。设置为 "accounting_storage/slurmdbd"。
  • ClusterName。设置为每个Slurm管理的集群的唯一名称,以便可以识别每个集群的核算记录。
  • TrackWCKey: 布尔值。如果你想跟踪用户的wckeys(工作量特征键)。Wckey是一种正交的方式,针对可能不相关的账户进行核算。当一个作业运行时,使用-wckey选项指定一个值,核算记录将由这个wckey收集。

SlurmDBD配置

SlurmDBD需要它自己的配置文件,称为 "slurmdbd.conf"。这个文件应该只存在于执行SlurmDBD的计算机上,并且只能由执行SlurmDBD的用户(例如 "slurm")阅读。这个文件应该被保护起来,防止未经授权的访问,因为它包含了数据库的登录名和密码。参见 "man slurmdbd.conf "以获得更完整的配置参数描述。一些比较重要的参数包括。

  • AuthInfo:如果将SlurmDBD与第二个MUNGE守护进程一起使用,请存储MUNGE用来提供企业范围内的命名套接字的路径名。否则将使用默认的MUNGE守护进程。
  • AuthType。定义Slurm组件之间通信的认证方法。建议使用 "auth/munge "的值。
  • DbdHost。执行Slurm数据库守护程序的机器的名称。这应该是一个没有完整域名的节点名称(例如:"lx0001")。默认为localhost,但应该提供以避免出现警告信息。
  • DbdPort:Slurm数据库守护程序(slurmdbd)工作时监听的端口号。默认值是系统建立时的SLURMDBD_PORT。如果没有明确指定,它将被设置为6819。这个值必须等于slurm.conf文件中的AccountingStoragePort参数。
  • LogFile: 写入Slurm数据库守护程序日志的文件的完全合格的路径名。默认值是无(通过syslog执行日志)。
  • PluginDir: 确定寻找Slurm插件的地方。这是一个用冒号分隔的目录列表,像PATH环境变量。默认值是在配置时给出的前缀+"/lib/slurm"。
  • SlurmUser:slurmdbd守护进程执行的用户名称。这个用户必须存在于执行Slurm数据库守护程序的机器上,并且与执行slurmctld的主机具有相同的UID。为了安全起见,建议使用 "root "以外的用户。默认值是 "root"。这个名字也应该是所有向SlurmDBD报告的集群上的同一个SlurmUser。注意:如果这个用户与为slurmctld设置的用户不同,并且不是root,则必须用AdminLevel=Admin将其加入核算,并且必须重新启动slurmctld。
  • StorageHost。定义数据库运行的主机名称,我们将在那里存储数据。理想情况下,这应该是SlurmDBD执行的主机,但也可以是另一台机器。
  • StorageLoc:指定写入核算记录的数据库的名称。对于数据库来说,默认的数据库是slurm_acct_db。注意名称中不能有'/',否则将使用默认值。
  • StoragePass:定义用于访问数据库的密码,以存储作业核算数据。
  • StoragePort:定义数据库的监听端口。
  • StorageType:定义核算存储机制。目前唯一可接受的值是 "accounting_storage/mysql"。accounting_storage/mysql "这个值表示核算记录应该写到StorageLoc参数指定的MySQL或MariaDB数据库中。这个值必须被指定。
  • StorageUser:定义我们要连接到数据库的用户名称,以存储工作核算数据。

MySQL配置

注意:如果你有一个现有的Slurm核算数据库,并计划将你的数据库服务器从10.2.1之前的版本升级到MariaDB 10.2.1(或更新的版本),或从任何版本的MySQL,请联系SchedMD寻求帮助。

虽然Slurm会自动创建数据库表,但你需要确保StorageUser在MySQL或MariaDB数据库中被赋予权限,以便这样做。作为mysql用户,使用诸如以下命令授予该用户权限。

GRANT ALL ON StorageLoc.* TO 'StorageUser'@'StorageHost';

(需要打钩)

(你需要以root身份来做这件事。另外,在密码使用信息中,有一行是以'->'开头的。这是一个继续提示,因为之前的mysql语句没有以';'结束。它假定你希望输入更多信息)。

如果你想让Slurm自己创建数据库,以及任何未来的数据库,你可以将你的授予行改为*.而不是StorageLoc.

例子:

代码语言:javascript
复制
mysql@snowflake:~$ mysql
Welcome to the MySQL monitor.Commands end with ; or \g.
Your MySQL connection id is 538
Server version: 5.0.51a-3ubuntu5.1 (Ubuntu)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> create user 'slurm'@'localhost' identified by 'password';
Query OK, 0 rows affected (0.00 sec)
mysql> grant all on slurm_acct_db.* TO 'slurm'@'localhost';
Query OK, 0 rows affected (0.00 sec)

你可能也需要对系统名称做同样的处理,以便使mysql正确工作。

代码语言:javascript
复制
mysql> grant all on slurm_acct_db.* TO 'slurm'@'system0';
Query OK, 0 rows affected (0.00 sec)
where 'system0' is the localhost or database storage host.

或者使用密码

代码语言:javascript
复制
mysql> grant all on slurm_acct_db.* TO 'slurm'@'localhost'
    -> identified by 'some_pass' with grant option;
Query OK, 0 rows affected (0.00 sec)

案例中也是如此,你做的是对系统名称进行同样的处理。

代码语言:javascript
复制
mysql> grant all on slurm_acct_db.* TO 'slurm'@'system0'
    -> identified by 'some_pass' with grant option;
where 'system0' is the localhost or database storage host

确认支持innodb

代码语言:javascript
复制
mysql> SHOW ENGINES;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| ...                |         |                                                                |              |      |            |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| ...                |         |                                                                |              |      |            |
+--------------------+---------+----------------------------------------------------------------+-------------

创建数据库

代码语言:javascript
复制
mysql> create database slurm_acct_db;

这将授予用户 "slurm "权限,使其在本地主机或存储主机系统上做它需要做的事情。这必须在SlurmDBD正常工作之前完成。在你授予mysql中的用户 "slurm "权限后,你可以启动SlurmDBD和其他Slurm守护程序。你可以通过输入它的路径名"/usr/sbin/slurmdbd "或"/etc/init.d/slurmdbd start "来启动SlurmDBD。你可以通过输入'ps aux | grep slurmdbd'来验证SlurmDBD正在运行。

如果SlurmDBD没有运行,你可以在启动SlurmDBD时使用-v选项来获得更详细的信息。用'-D'选项在守护模式下启动SlurmDBD也可以帮助调试,这样你就不必去看日志来发现问题。

工具

有几个工具可以用来处理核算数据,sacct、sacctmgr和sreport。这些工具都是通过SlurmDBD守护程序获取或设置数据。

  • sacct用于生成正在运行和已经完成的作业的核算报告。
  • sacctmgr用于管理数据库中的关联:添加或删除集群,添加或删除用户,等等。
  • sreport用于生成在给定时间段内收集到的各种使用报告。

更多信息请参见每个命令的手册页面。

数据库配置

核算记录是根据我们所说的 "Association "来维护的,它由四个元素组成:集群、账户、用户名和一个可选的分区名称。使用 sacctmgr 命令来创建和管理这些记录。

注意:设置核算关联是有顺序的。你必须在添加账户之前定义群集,你必须在添加用户之前添加账户。

例如,要添加一个名为 "snowflake "的集群到数据库中,执行这一行(注意:从20.02版开始,如果集群不存在,slurmctld会在启动时将其添加到数据库中。添加后仍然需要创建关联)。

代码语言:javascript
复制
sacctmgr add cluster snowflake

将账户 "none "和 "test "添加到集群 "snowflake "中,并执行这样的一行。

代码语言:javascript
复制
sacctmgr add account none,test Cluster=snowflake \
  Description="none" Organization="none"

如果你有更多的集群想添加这些账户,你可以不指定集群,这将把账户添加到系统中的所有集群,或者在集群选项中用逗号分隔你想添加的集群名称。注意,可以通过逗号分隔名称,同时添加多个账户。必须指定账户的描述和它所属的组织。这些术语以后可以用来生成核算报告。账户可以按层次排列。例如,化学和物理账户可能是科学账户的子女。层次结构可以有一个任意的深度。只要在添加账户行中指定parent=''选项,就可以构建层次结构。对于上面的例子,执行

代码语言:javascript
复制
sacctmgr add account science \
 Description="science accounts" Organization=science
sacctmgr add account chemistry,physics parent=science \
 Description="physical sciences" Organization=science

使用类似的语法将用户添加到账户中。例如,要允许用户da在所有集群上执行作业,其默认账户为test execute。

代码语言:javascript
复制
sacctmgr add user brian Account=physics
sacctmgr add user da DefaultAccount=test

如果在集群snowflake的slurm.conf中配置了AccountingStorageEnforce=associations,那么用户da将被允许在账户test和将来添加的任何其他账户中运行。任何试图使用其他账户的行为都会导致作业被中止。如果他没有在作业提交命令中指定一个账户,那么账户test将是默认的。

还可以创建与特定分区绑定的关联。当使用sacctmgr的 "添加用户 "命令时,你可以包括Partition=选项来创建一个关联,这个关联对于具有相同账户和用户的其他关联是唯一的。

集群选项

当添加或修改一个集群时,这些是sacctmgr的可用选项。

  • Name=Cluster Name

帐户选项

当添加或修改一个帐户时,以下是sacctmgr的选项。

  • Cluster= 只将此帐户添加到这些群集。默认情况下,该账户会被添加到所有定义的群组中。
  • Description= 账户的描述。(默认为账户名称)
  • Name= 账户的名称。注意这个名字必须是唯一的,不能代表账户层次结构中不同的银行账户。
  • Organization= 账户的组织机构。(默认为父账户,除非父账户是根账户,那么组织就被设置为账户名称。)
  • Parent=使这个账户成为这个其他账户的子账户(已经添加)。

用户选项

当添加或修改一个用户时,可以使用以下sacctmgr选项。

  • Account= 要添加用户的账户
  • AdminLevel= 这个字段用于允许用户为这个用户增加核算权限。有效的选项是
    • None
    • Operator:可以添加、修改和删除任何数据库对象(用户、账户等),并添加其他Operator在服务于slurmDBD的slurmctld上,这些用户可以
      • 查看被PrivateData标志阻挡在常规使用之外的信息
      • 创建/改变/删除预订
    • Admin:这些用户在数据库中拥有与操作员相同的权限水平。他们也可以改变服务的slurmctld上的任何东西,就像他们是slurm用户或root一样。
  • Cluster= 只添加到这些集群上的账户(默认是所有集群)。
  • DefaultAccount= 用户的默认账户,当提交作业时没有指定账户时使用。(创建时需要)
  • DefaultWCKey= 用户的默认wckey,在提交作业时没有指定wckey时使用。(只在跟踪wckeys时使用。)
  • Name= 用户名称
  • NewName= 用来在核算数据库中重新命名一个用户
  • Partition= 此关联适用于Slurm分区的名称

限制执行

各种限制和限制执行在资源限制网页上有描述。

要启用任何限制执行,你至少要在slurm.conf中设置AccountingStorageEnforce=limits。否则,即使你设置了限制,它们也不会被强制执行。AccountingStorageEnforce的其他选项以及每个选项的解释可在资源限制文件中找到。

修改实体

当修改实体时,你可以用类似SQL的方式指定许多不同的选项,使用诸如where和set这样的关键词。一个典型的执行行有以下形式。

代码语言:javascript
复制
sacctmgr modify <entity> set <options> where <options>

例子

代码语言:javascript
复制
sacctmgr modify user set default=none where default=test

将把所有默认账户为 "test "的用户改为账户为 "none"。一旦一个实体被添加、修改或删除,该变化就会被发送到相应的Slurm守护进程,并立即可以使用。

移除实体

使用类似于上面的修改例子的执行行来删除实体,但没有设置选项。例如,使用下面的执行行删除所有默认账户为 "test "的用户。

代码语言:javascript
复制
sacctmgr remove user where default=test

将删除默认账户为 "test "的所有用户记录。

代码语言:javascript
复制
sacctmgr remove user brian where account=physic

将从 "physics "账户中删除用户 "brian"。如果用户 "brian "有访问其他账户的权限,这些用户记录将会保留。

注意:在大多数情况下,被删除的实体会保留在slurm数据库中,但被标记为删除。如果一个实体存在的时间少于1天,该实体将被完全删除。这是为了清理打字错误。然而,删除用户关联或账户,将导致slurmctld失去对该用户/账户的使用数据的追踪。

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系外文翻译前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概览
  • 架构
  • Slurm JobComp配置
  • 构建前的Slurm核算配置
  • 构建后的Slurm核算配置
  • SlurmDBD配置
  • MySQL配置
  • 工具
  • 数据库配置
  • 集群选项
  • 帐户选项
  • 用户选项
  • 限制执行
  • 修改实体
  • 移除实体
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档