購入したPCをクラスターに追加するのはいいが、OSセットアップ+cudaセットアップの手間を
大幅に削減する方法として

  • disklessCluster
    OSはインストールせず、起動時にマスターノードからOSを授かる
  • kickstart
    chefと組み合わせて実行環境整備の自動化

らがあると思っている.
ここでは前者、PXEbootを使ってサーバから起動ごとにOSイメージを展開させクラスターノードとして
存在させる方法を記す.
また内蔵のSSD/NVMeデバイスはキャッシュ/swapとして適用させる事を想定する

子ノードのファイルシステムを構築(方法1)

マスターノードの一部に子ノード向けのファイルシステムを構築して、そこを丸ごと nfs exportさせます
*/var/run(/run),/var/tmpらの動的更新箇所はtmpfsです
ここでは /nfsroot とします

[root@c ~]# mkdir /nfsroot
[root@c ~]# ls -ld /nfsroot
drwxr-xr-x 2 root root 6  8月  1 19:10 /nfsroot
[root@c ~]#

この/nfsrootが子ノードの(/)になるのだが、ここではyumを使って子ノード向けのファイルシステムを作る

[root@c ~]# yum --installroot=/nfsroot groupinstall Base  --releasever=7
[root@c ~]# yum --installroot=/nfsroot remove chrony
[root@c ~]# yum --installroot=/nfsroot install kernel nfs-utils ntp rsh rsh-server rsyslog nss-pam-ldapd e2fsprogs parted

子ノードのファイルシステム構成、ネットワーク、時計あわせ、rsh設定、タイムゾーン定義らを行う
ユーザ情報/認証はsambaをLDAPサーバと看做して対応しております。
「sssd」による方法だとkrb5.keytabの子ノード間での共有とか考える必要があるので辞めました
*「nslcd.conf」のbinddn/bindpwは、sambaに別途認証用のアカウントとそのパスワードです. 参照samba/LDAP#i6cee2c4

[root@c ~]# mkdir /nfsroot/Appl
[root@c ~]# cat <<_EOF_> /nfsroot/etc/fstab
proc     /proc     proc  defaults 0 0
/dev/nfs /         nfs   defaults 0 1
none     /tmp      tmpfs defaults 0 0
none     /var/tmp  tmpfs defaults 0 0
none     /run      tmpfs defaults 0 0
c:/home  /home     nfs   defaults 0 0
c:/Appl  /Appl     nfs   defaults 0 0
_EOF_
[root@c ~]# echo "NETWORKING=yes" > /nfsroot/etc/sysconfig/network
[root@c ~]# cat << _EOF_ > /nfsroot/etc/ntp.conf
driftfile /var/lib/ntp/drift
server 192.168.0.3
_EOF_
[root@c ~]# echo "192.168.0.3" > /nfsroot/etc/ntp/step-tickers
[root@c ~]# echo "+" >> /nfsroot/etc/hosts.equiv
[root@c ~]# cp /nfsroot/usr/share/zoneinfo/Asia/Tokyo /nfsroot/etc/localtime
[root@c ~]# cat << _EOF_ > /nfsroot/etc/nslcd.conf
uid nslcd
gid ldap
uri ldap://c.sybyl.local/
base dc=sybyl,dc=local
pagesize 1000
referrals off
filter  passwd  (objectClass=user)
filter  group   (objectClass=group)
map     passwd  uid                sAMAccountName
map     passwd  homeDirectory      unixHomeDirectory
map     passwd  gecos              displayName
map     passwd  gidNumber          gidNumber
map     group   cn                 msSFU30Name
map     group   gidNumber          gidNumber
binddn cn=diskless,cn=Users,dc=sybyl,dc=local
bindpw xxxxxxxxxxxxxxxxxxxxx
_EOF_
[root@c ~]#

その後、一旦chrootで擬似的にファイルシステムに入って、rootのパスワードとデーモン関係を調整して、
認証の設定を行います
rloginを有効にしたいのなら、rlogin.socketもenableにします

[root@c ~]# chroot /nfsroot
 
bash-4.2# passwd
bash-4.2# systemctl enable rsh.socket rexec.socket ntpd.service ntpdate.service
bash-4.2# systemctl disable kdump smartd.service
bash-4.2# systemctl set-default multi-user.target
bash-4.2# authconfig --enableldap --enableldapauth --ldapserver=c.sybyl.local \
            --ldapbasedn=dc=sybyl,dc=local --disableldaptls --disableldapstarttls \
            --enablerfc2307bis --update
 
bash-4.2# exit
[root@c ~]#

そして、PXEbootから起動イメージを受け取るようにして、
BIOS版なら

[root@c ~]# cat /var/lib/tftpboot/pxeboot/pxelinux.cfg/01-00-0c-29-09-73-55
default vmlinuz root=/dev/nfs initrd=initrd.img nfsroot=192.168.0.3:/nfsroot,v3 ip=dhcp rw
 
[root@c ~]#

UEFI版なら

[root@c ~]# cat /var/lib/tftpboot/pxeboot/grub.cfg-01-00-0c-29-09-73-55
set timeout=3
menuentry 'disk less cluster: CentOS 7' {
 linuxefi /pxeboot/vmlinuz root=/dev/nfs nfsroot=192.168.0.3:/nfsroot,v3 ip=dhcp rw
 initrdefi /pxeboot/initrd.img
}
[root@c ~]#

とかで
これでひとまずの段階が完了。

起動

PXEbootで起動して暫くすると
2017y08m05d_125610603.png
となる。
またネットワーク越しでも rlogin.socketもenableなら

[illya@c ~]$ rsh c101
[illya@c101 ~]$

となる。sshで接続したい場合は、別途openssh-serverを子ノードに展開して下さい

swapメモリ

現状のままですとswapなしの実メモリだけの運用になります

[illya@c101 ~]$ cat /proc/swaps
Filename                                Type            Size    Used    Priority
[illya@c101 ~]$

この辺は個別に手動で行うしかないと思うが、chefもしくはansibleを使って
事後にswapデバイスを作成して、/nfsroot/etc/fstabを書き換えたほうが望ましいかと思っている

hddに8GBの領域を作って、そこをswap部分として定義するには

[illya@c101 ~]$ su -
Password:
Last login: Sat Aug  5 13:03:42 JST 2017 on pts/0
-bash-4.2# 
-bash-4.2# cat /proc/partitions
major minor  #blocks  name
 
   2        0          4 fd0
   8        0   16777216 sda
-bash-4.2# parted /dev/sda
  : (操作略)
  :
-bash-4.2# 
-bash-4.2# cat /proc/partitions
major minor  #blocks  name
 
   2        0          4 fd0
   8        0   16777216 sda
   8        1    8388608 sda1
-bash-4.2#
-bash-4.2# mkswap -L swap /dev/sda1
-bash-4.2# swapon -L swap
-bash-4.2# echo "LABEL=swap swap swap defaults 0 0" >> /etc/fstab

とすれば、次回起動後にはswapも有効になる

[illya@c101 ~]$ cat /proc/swaps
Filename                                Type            Size    Used    Priority
/dev/sda1                               partition       8388604 0       -1
[illya@c101 ~]$

子ノードのファイルシステムを構築(方法2)

計算ノードのメモリの一部をファイルシステムにしてそこにOSを載せてしまう方法もあるみたい.

参照先:http://web.mst.edu/~vojtat/pegasus/administration.htm

試しに作ってみたが.....
ネットワークデバイスがkernelに静的に組み込まれている必要があるみたい(insmodじゃなく)で断念しました.
正直工数が多くてメンテナンスは前述方式の方が安いかなぁ


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2017-08-05 (土) 17:43:25 (130d)