Cluster Packの利用方法¶
概要¶
クラスタパックはユーザーに対してmdx環境におけるクラスタ環境構築の手順を提供します。
クラスタパックはLDAP, NFS, SLURMから構成されており、LDAPによるユーザー情報管理、 NFSによるファイル共有、SLURMによるジョブ管理を行うことができます。
本書では、クラスタパックの環境構築(LDAP, NFS, SLURMそれぞれの環境構築の方法)および 操作方法(LDAPでのユーザー追加方法およびSLURMによるジョブ投入方法)について記載しています。
環境構築について¶
コントロールノード、計算ノードに用いるマシンについて¶
コントロールノード(LDAPサーバー兼NFSサーバー兼SLURMコントロールノード)
マシン名: ubuntu-2204
IP: 10.5.4.45
グローバルIP: 163.220.177.146
計算ノード(LDAPクライアント兼NFSクライアント兼SLURM計算ノード)
マシン名: ubuntu-2204-test
IP: 10.5.0.121
インストールするパッケージ¶
クラスタパックにおいては、コントロールノードに下記のLDAP-server, NFS-server, SLURM, ansibleに 記載されたパッケージをインストールし、計算ノードに下記のLDAP-client, NFS-client, SLURM に記載されたパッケージをインストールします。
機能 |
パッケージ |
---|---|
LDAP-server |
slapd, ldap-utils, ldap-account-manager, libnss-sss, libpam-sss, libsss-sudo |
LDAP-client |
libnss-sss, libpam-sss, libsss-sudo |
NFS-server |
nfs-kernel-server |
NFS-client |
nfs-common |
SLURM |
slurm-wlm, munge, libmunge2, libmunge-dev |
ansible |
ansible |
設定について¶
ログイン前、初期ログイン時の設定について¶
ACLの設定
Cluster Packで作成したマシンに対して、必要なACLを設定してください。
出てきた「Recordの追加」Windowで、下記の設定をしてください。
プロトコル: TCP
Srcアドレス: xxx.xxx.xxx.xxx (1)
SrcPrefix長: 24
Srcポート: 80 (2)
Dstアドレス: yyy.yyy.yyy.yyy (3)
DstPrefix長: 32
Dstポート: 3389
お使いの環境のグローバルIPに基づいて入力してください。
例: グローバルIPが192.0.2.123の場合、192.0.2.0としてください。
すべてのマシンに関して、HTTPのポート80を設定してください。コントロールノードに関しては合わせてSSHのポート22も設定してください。
ポート80の設定は初回ログイン時のパスワード設定エラーを避けるために行なっています。ポート22の設定は外部からコントロールノードにSSH接続するためです。
Cluster Packで作成したマシンのIPv4アドレスを入力してください。
この情報は、「仮想マシン」タブの「コントロール」を選択した時に表示される仮想マシン名を選択した時に、 画面右側サマリの「サービスネットワーク 1」「IPv4アドレス」に表示されます。
初回ログイン時
sudo systemctl restart NetworkManager.service
SSH鍵の作成
また、コントロールノードと計算ノードの間で行き来ができるように、コントロールノードでSSH鍵を作り、それを各計算ノードのauthorized_keysに追加してください。
ssh-keygen -t ed25519
Ansibleのインベントリファイルの準備¶
[control_nodes]
ubntu-2204 ansible_host=10.5.4.45
[compute_nodes]
ubuntu-2204-test ansible_host=10.5.0.121 cpus=3
[all:vars]
ldap_server_uri=ldap://10.5.4.45
cluster-setting-filesディレクトリは下記のファイルを含みます。
add-ldapPublicKey-schema.ldif: LDAPにSSHキーを追加するためのスキーマファイル
cluster.ini: 上記のインベントリファイル
hosts.j2: /etc/hostsに追加する情報のテンプレート
ldap-setting.yml: LDAPの設定用Playbook
ldap-ssh.yml: LDAPにSSHキーを追加するためのPlaybook
ldapAuthSSH.sh.j2: LDAPにSSHキーを追加するためのスクリプトのテンプレート
nfs.yml: NFSの設定用Playbook
slurm.conf.j2: SLURMの設定ファイルのテンプレート
slurm.yml: SLURMの設定用Playbook
sssd.conf.j2: /etc/sssd/sssd.confに追加する情報のテンプレート
LDAP¶
ansible-playbook -i cluster.ini ldap-setting.yml
上記の後、コントロールノードにてLAMを用いて設定を行います。http://localhost/lam/ にアクセスし、LAMの設定を行います。
右上の「LAM configuration」をクリック、続いて「Edit server profiles」をクリックします。
初期パスワードlamを入力し、「OK」をクリックします。
「Tool settings」内の「Tree suffix」と「Security settings」内の「List of valid users」を設定した情報に合わせて変更してください。
また、「Account types」内の「Active account types」のdcを書き換えてください。
ログイン画面に戻り、初期設定時に設定したパスワードでログインしてください。
初期グループを作成します。「Create」をクリックしてください。
成功すれば、下記のような画面が表示されます。
次に、LDAPからSSHキーを追加出来るようにします。
cluster-setting-files内の設定ファイルldap-ssh.ymlを用いればこの設定を行うことができます。
ansible-playbook -i cluster.ini ldap-ssh.yml
上記の後、LAMの設定画面からSSHキーを追加できるように設定します。
これで、LAMからSSHキーを追加できるようになりました。
LAMに手元環境のブラウザからアクセスする場合¶
LAMに手元環境のブラウザからアクセスする場合は、sshポートフォワードを使い
ssh -L 8080:localhost:80 username@163.220.177.146
などとし、ブラウザで http://localhost:8080/lam/ にアクセスしてください。
NFS¶
cluster-setting-files内の設定ファイルnfs.ymlを用いる事で、サーバー側とクライアント側の設定を一括で行うことができます。
下記のコマンドを実行してください。
ansible-playbook -i cluster.ini nfs.yml
SLURM¶
# slurm.conf file generated by configurator.html
# Put this file on all nodes of your cluster.
# See the slurm.conf man page for more information.
#
ControlMachine={{ groups['control_nodes'][0] }}
# ControlAddr=
# BackupController=
# BackupAddr=
AuthType=auth/munge
#CacheGroups=0
CryptoType=crypto/munge
MpiDefault=none
ProctrackType=proctrack/pgid
ReturnToService=2
SlurmctldPidFile=/var/run/slurmctld.pid
SlurmctldPort=6817
SlurmdPidFile=/var/run/slurmd.pid
SlurmdPort=6818
SlurmdSpoolDir=/var/spool/slurmd
SlurmUser=slurm
StateSaveLocation=/var/spool/slurmctld
SwitchType=switch/none
TaskPlugin=task/affinity
#
#
# TIMERS
# KillWait=30
# MinJobAge=300
# SlurmctldTimeout=120
# SlurmdTimeout=300
#
#
# SCHEDULING
SchedulerType=sched/backfill
SelectType=select/cons_res
SelectTypeParameters=CR_Core
#
#
# LOGGING AND ACCOUNTING
AccountingStorageType=accounting_storage/none
ClusterName=cluster
JobCompType=jobcomp/none
JobAcctGatherType=jobacct_gather/none
SlurmctldDebug=info
SlurmctldLogFile=/var/log/slurm/slurmctld.log
#
#
# COMPUTE NODES
{% for node in groups['compute_nodes'] %}
NodeName={{ node }} CPUs={{ hostvars[node]['cpus'] }} State=UNKNOWN
{% endfor %}
PartitionName=debug Nodes={{ groups['compute_nodes'] | join(',') }} Default=YES MaxTime=INFINITE State=UP
設定が完了したら、下記のコマンドを実行してください。
ansible-playbook -i cluster.ini slurm.yml
操作方法について¶
LDAPでのユーザー追加方法¶
こちらの画面で「Add SSH public key extention」ボタンをクリックすると、下記のような画面が表示されます。
ここで、空欄にSSHキーを入力するか、「Upload file」横のBrowseボタンをクリックしてSSHキーを選択してください。
ユーザーを追加すると下記のような画面が表示されます。
sudo su - testuser
この時に、ssh公開鍵の作成、配置を実施すると利用時に便利です。
ssh-keygen -t ed25519
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
SLURMを用いたジョブの投入方法¶
ここでは、SLURMを用いたジョブの投入方法について記載します。
例として以下のようなコードを実行する場合を考えます。
#include <unistd.h>
#include <stdio.h>
int main(){
int i;
for(i=0; i<10; i++){
sleep(10);
printf("loop no %i\n", i);
}
return 0;
}
このコードをtest.cという名前で保存し、コンパイルします。
gcc test.c
これでa.outという実行ファイルが生成されます。
次に、ジョブスクリプトを作成します。
#!/bin/bash
#SBATCH --job-name=test_job
#SBATCH --ntasks=1
#SBATCH --nodes=1
#SBATCH --time=00:02:00
#SBATCH --partition=debug
#SBATCH --output=test_job.out
echo "Start job"
date
./a.out
date
echo "End job"
このジョブスクリプトをtest_job.shという名前で保存します。
SLURMのジョブを投入するには、sbatchコマンドを用います。
sbatch test_job.sh
上記を実行すると下記のようにジョブIDが表示されます。
Submitted batch job 6
ジョブの状態を確認するには、squeueコマンドを用います。
squeue
これを実行すると、ジョブが実行されている場合下記のように出力されます。
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
6 debug test_job mdxuser R 0:05 1 ubuntu-2204-test
scancel 6
Start job
Tue Mar 5 15:33:50 JST 2024
loop no 0
loop no 1
loop no 2
loop no 3
loop no 4
loop no 5
loop no 6
loop no 7
loop no 8
loop no 9
Tue Mar 5 15:34:00 JST 2024
End job
これで、ジョブの投入から終了までの一連の流れが完了しました。