Skip to content

Latest commit

 

History

History
135 lines (109 loc) · 5.04 KB

README.md

File metadata and controls

135 lines (109 loc) · 5.04 KB

配置源作业信息数据库

此项目负责定时地将slurm集群中的已完成的作业信息移动到另一个数据库中,主要用于SCOW的计费收费。

https://pkuhpc.github.io/SCOW/docs/deploy/SCOW/mis

配置说明

配置内容在config.py中:

字段名 说明
cluster_name slurm中集群的名称
cluster_db_conf 集群slurm数据库信息
cluster_db_conf.host slurm数据库ip
cluster_db_conf.port slurm数据库端口
cluster_db_conf.user slurm数据库用户名
cluster_db_conf.passwd slurm数据库密码
cluster_db_conf.db slurm数据库名
cluster_db_conf.gres_id slurm中gpu资源的id
mgt_db_conf 存放作业的远端数据库配置
mgt_db_conf.host 源作业信息数据库ip
mgt_db_conf.port 源作业信息数据库端口
mgt_db_conf.user 源作业信息数据库用户名
mgt_db_conf.passwd 源作业信息数据库密码
mgt_db_conf.db 源作业信息数据库数据库名

运行说明

需要Python 3环境。

  1. 部署源作业数据库
# (1) 创建mysql数据库
# SCOW部署节点已安装docker,可在该节点上用docker起一个mysql作为源作业数据库
# 源作业数据库需要将3306端口暴露给export-jobs使用,host_port为宿主机端口,确保该端口未被其他服务占用。可通过宿主机ip:host_port访问到源作业数据库,password为数据库的root密码。
docker run --restart=always --name sourcedb -p {host_port}:3306 -e MYSQL_ROOT_PASSWORD='{password}' -d mysql:8

# (2) 设置允许远程访问
#  进入容器
docker exec -it sourcedb /bin/bash
# 登录
mysql -uroot -p

# 允许远程访问
grant all privileges on *.* to 'root'@'%' ;
flush privileges;

# (3) 创建数据库
CREATE DATABASE hpc;
use hpc;

# (4) 数据库初始化,创建job_table表,建表语句为export-jobs/job_table.sql文件
CREATE TABLE `job_table` (
  `bi_job_index` int(10) NOT NULL AUTO_INCREMENT,
  `id_job` int(10) unsigned NOT NULL,
  `account` tinytext NOT NULL COMMENT '账户',
  `user` varchar(127) NOT NULL COMMENT '用户名',
  `partition` tinytext NOT NULL COMMENT '分区',
  `nodelist` text NOT NULL COMMENT '使用节点列表',
  `job_name` tinytext NOT NULL COMMENT '作业名',
  `cluster` varchar(50) NOT NULL COMMENT '集群名',
  `time_submit` datetime NOT NULL COMMENT '提交时间',
  `time_start` datetime NOT NULL COMMENT '开始时间',
  `time_end` datetime NOT NULL COMMENT '结束时间',
  `gpu` int(10) NOT NULL DEFAULT '0' COMMENT '使用GPU数,来自gres_req字段',
  `cpus_req` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '申请CPU数tres_req',
  `mem_req` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '申请的内存,单位MB,来自tres_req',
  `nodes_req` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '申请节点数tres_req',
  `cpus_alloc` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '分配CPU数tres_alloc',
  `mem_alloc` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '分配的内存,单位MB,来自tres_alloc',
  `nodes_alloc` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '分配节点数tres_alloc',
  `timelimit` int(10) unsigned NOT NULL COMMENT '作业时间限制',
  `time_used` bigint(20) unsigned NOT NULL COMMENT '作业执行时间',
  `time_wait` bigint(20) unsigned NOT NULL COMMENT '作业等待时间',
  `qos` varchar(255) NOT NULL,
  `record_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录时间',
  PRIMARY KEY (`bi_job_index`),
  KEY `time_submit` (`time_submit`) USING BTREE,
  KEY `time_start` (`time_start`) USING BTREE,
  KEY `time_end` (`time_end`) USING BTREE,
  KEY `time_used` (`time_used`) USING BTREE,
  KEY `time_wait` (`time_wait`) USING BTREE,
  KEY `user` (`user`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=25559 DEFAULT CHARSET=utf8;
  1. 修改配置文件
# cat  config.py

# slurm集群名称
cluster_name = 'hpc01'

# slurm数据库相关配置
cluster_db_conf = {
    'host':'localhost',			# 修改为部署slurm数据库的节点IP
    'port':3306,
    'user':'username',
    'passwd':'passwd',
    'db':'slurm_acct_db',
    'gres_id' : 1001
}

# 源数据库相关配置
mgt_db_conf = {
    'host':'remote_host',		# 部署源作业数据库节点的IP
    'port':3306,				# 修改为docker -p 的{host_port}
    'user':'username',
    'passwd':'password',
    'db':'hpc'
}
  1. 安装Python依赖。以下/path/to/export_jobs替换为clone本仓库后的地址。
pip3 install -f /path/to/export_jobs/requirements.txt
  1. 尝试获取信息
python3 /path/to/export_jobs/main.py
  1. 设置每10分钟执行的定时任务(取前一个10分钟的作业,任务执行时间间隔不能大于10分钟,建议设置为10分钟)
echo "*/10 * * * * root python3 /path/to/export_jobs/main.py >> /path/to/export_jobs/job_export.log 2>&1" >> /etc/crontab