kuroの覚え書き

96の個人的覚え書き

タイヤ交換

Vmaxタイヤ前後交換 
メッツラー SPORTEC M5
F:120-70/17ZR
R:160-60/17ZR
走行距離・・・・記録し忘れた。現在のトリップメーターで17kmのあたりだったはず。後で確認


114413kmだった。

前回交換が140306で101,425 kmだったので4年13,000kmほど使ったことになる。ミシュランpilotpower3案外保つな。
今度のメッツラーはどうだろう。

TORQUEつづき

どうもちゃんと動いていないような気がしてならないので、いろいろテストしてみる。

$ echo "sleep 30" | qsub -l nodes=1:ppn=8

こういうふうにジョブを投げると

$ qstat -t
Job ID                    Name             User            Time Use S Queue
------------------------- ---------------- --------------- -------- - -----
97.HostA                  STDIN            rnaseq                 0 R batch

こんなふうに走る。
このコマンドを6個くらい連打すると

$ qstat -t
Job ID                    Name             User            Time Use S Queue
------------------------- ---------------- --------------- -------- - -----
98.HostA                  STDIN            rnaseq                 0 R batch          
99.HostA                  STDIN            rnaseq                 0 R batch          
100.HostA                 STDIN            rnaseq                 0 R batch          
101.HostA                 STDIN            rnaseq                 0 R batch          
102.HostA                 STDIN            rnaseq                 0 R batch          
103.HostA                 STDIN            rnaseq                 0 Q batch 

このように5ジョブがR、1ジョブがQとなった。
-l nodes=1:ppn=8
としているので1ジョブで1ノードの8CPUを専有しているため、8/16/16の3ノードで5ジョブが走ったわけだ。
つまりちゃんとジョブ管理できているね。

$ echo "sleep 30" | qsub -l nodes=2:ppn=16

こんなふうに投げると2ノードを専有するため1ジョブしか走れなくなり

$ qstat -t
Job ID                    Name             User            Time Use S Queue
------------------------- ---------------- --------------- -------- - -----
107.HostA                 STDIN            rnaseq                 0 R batch          
108.HostA                 STDIN            rnaseq                 0 Q batch

こうなる。

先日の動作試験ではHostAでしか動作しなかったのだが、スクリプトの書き方に問題があったのかもしれない。


TORQUEの場合、どうもどのノードで処理するかの指定が効かないし、実際にどのノードで走っているのかはわからないようだ。今のシステムのように計算ノードでCPUの種類や構成が違っている場合、指定ができたほうが割り振りが効率的にできそうな気もするのだが。

TORQUEとopenMPIをインストール

TORQUEのインストールは以前やった通り。3ノードがstatus: freeで認識された。

せっかくなのでmpiも入れてベンチマークなどもしてみたいのだが。

# yum install -y openmpi openmpi-devel

すべてのノードにインストール
使用するユーザ(root以外)についてPATHを足しておく。

export PATH=$PATH:/usr/lib64/openmpi/bin

インストール自体は簡単に終了したが、使い方が今ひとつわからない。

TORQUEのほうもqsubでアレイジョブを投げて見てもどうやらヘッドノードにしかジョブが割り振られない。なにかおかしいな。

WOLの設定/NFSでマウントしたままシャットダウンしようとすると固まる

使用しないときの計算ノードを止めておこうと思う。かといって計算するときにわざわざサーバルームまで行くのは面倒だし、遠隔地から作業できないし、ということでwake on LANを試してみる。
起こしたいサーバに

# yum install ethtool

とソフトウェアをいれ(今回はすでに入っていた)

# ethtool -s ens1f0 wol g

と起動

# nano /etc/sysconfig/network-scripts/ifcfg-ens1f0

ETHTOOL_OPTS="wol g"
と追記しておけばそれだけでOK

LANにつながっているポートのMACアドレス

# ip addr

で確認して

ヘッドノードから

$ ether-wake <MACアドレス>

としてやると無事に起きてくることを確認。

さて、一旦計算ノードをシャットダウンしようとして、いっこうに電源が落ちず、やむなく強制終了してしまったのだが、どうも原因はNFSにあるようだ。NFSでマウントしたディスクをきちんとアンマウントする前にネットが切断されてしまうことでアンマウントができず、シャットダウンもできないということになっている模様。シャットダウンシーケンスで、まず確実にアンマウントされるとこを確認すればよいのだが、具体的にどうすべきかわからないので、とにかくまずrootでumount -a として一通りアンマウントしてから、shutdown -h nowすれば良さそうだ。

あと、起動時にNFSで/homeと/usr/localをマウントしているのだが、/homeだけ自動でマウントしてくれない。正しくアンマウントできなかったことにリンクしているのかもしれない。これも面倒だけど起動時に一旦rootでログインしてmount -aをやってやることで、とりあえずは問題はないのだが。

wol起動スクリプト

#!/bin/sh
ether-wake <MACアドレス>

同様にシャットダウンスクリプト

#!/bin/sh
ssh root@<ip addr> umount -a
ssh root@<ip addr> shutdown -h now

こうしとくか?


追記
起動時にNFSのマウントに失敗する
https://qa.atmarkit.co.jp/q/380

解決策1:bgオプションを入れる
解決策2:クライアントの/etc/init.d/netfsにsleep 1などwaitを入れる。

php MARIADB phpmyadminのインストール

前にもやったが、記憶が曖昧になっているため、整理。

まずはphpのインストールから。

# yum install epel-release
# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
# yum install --enablerepo=remi,remi-php70 php php-mbstring php-devel php-pdo php-gd php-mysqlnd

# nano /etc/php.ini

;;;;;;;;;;;;;;;;;;;
; Module Settings ;
;;;;;;;;;;;;;;;;;;;

date.timezone = "Asia/Tokyo"
[mbstring]
; language for internal character representation.
; This affects mb_send_mail() and mbstring.detect_order.
; http://php.net/mbstring.language
mbstring.language = Japanese

; Use of this INI entry is deprecated, use global internal_encoding instead.
; internal/script encoding.
; Some encoding cannot work as internal encoding. (e.g. SJIS, BIG5, ISO-2022-*)
; If empty, default_charset or internal_encoding or iconv.internal_encoding is $
; The precedence is: default_charset < internal_encoding < iconv.internal_encod$
mbstring.internal_encoding = UTF-8

; Use of this INI entry is deprecated, use global input_encoding instead.
; http input encoding.
; mbstring.encoding_traslation = On is needed to use this setting.
; If empty, default_charset or input_encoding or mbstring.input is used.
; The precedence is: default_charset < intput_encoding < mbsting.http_input
; http://php.net/mbstring.http-input
mbstring.http_input = pass

; Use of this INI entry is deprecated, use global output_encoding instead.
; http output encoding.
; mb_output_handler must be registered as output buffer to function.
; If empty, default_charset or output_encoding or mbstring.http_output is used.
; The precedence is: default_charset < output_encoding < mbstring.http_output
; To use an output encoding conversion, mbstring's output handler must be set
; otherwise output encoding conversion cannot be performed.
; http://php.net/mbstring.http-output
mbstring.http_output = pass

; enable automatic encoding translation according to
; mbstring.internal_encoding setting. Input chars are
; converted to internal encoding by setting this to On.
; Note: Do _not_ use automatic encoding translation for
;       portable libs/applications.
; http://php.net/mbstring.encoding-translation
mbstring.encoding_translation = Off

; automatic encoding detection order.
; "auto" detect order is changed according to mbstring.language
; http://php.net/mbstring.detect-order
mbstring.detect_order = auto

; substitute_character used when character cannot be converted
; one from another
; http://php.net/mbstring.substitute-character
mbstring.substitute_character = none;

; overload(replace) single byte functions by mbstring functions.
; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(),
; etc. Possible values are 0,1,2,4 or combination of them.
; For example, 7 for overload everything.
; 0: No overload
; 1: Overload mail() function
; 2: Overload str*() functions
; 4: Overload ereg*() functions
; http://php.net/mbstring.func-overload
mbstring.func_overload = 0

; enable strict encoding detection.
; Default: Off
mbstring.strict_detection = Off

; This directive specifies the regex pattern of content types for which mb_outp$
; is activated.
; Default: mbstring.http_output_conv_mimetype=^(text/|application/xhtml\+xml)
mbstring.http_output_conv_mimetype=
# systemctl restart httpd

続いてMARIADBのインストール

# yum install mariadb mariadb-server
# systemctl start mariadb.service
# systemctl enable mariadb.service

# nano /etc/my.cnf

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
character-set-server=utf8

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
# mysql_secure_installation

rootのパスワードを作成しておくのと、あとの質問はすべてデフォルトで(Y)

# /usr/bin/mysql -u root -p

パスは通しておいたほうが良い。起動できることを確認

最後にphpmyadminのインストール

# wget https://files.phpmyadmin.net/phpMyAdmin/4.8.2/phpMyAdmin-4.8.2-all-languages.zip
# unzip phpMyAdmin-4.8.2-all-languages.zip
# mv phpMyAdmin-4.8.2-all-languages /var/www/html/phpmyadmin
# chown -R apache /var/www/html/phpmyadmin

これでIPアドレス/phpmyadminにアクセスすればOK

NFS/NISによるユーザの共通化

ディスクレスについてはまだちょっとハードルが高いので、とりあえず各サーバにRAID1でディスクを配置してシステムをインストールした。そのままではそれぞれのサーバにソフトウェアをインストールしたり使い勝手がイマイチなのでNFSでヘッドノードのディレクトリをマウントし、NISでユーザを一元管理することにした。

NISの設定方法は
https://www.server-world.info/query?os=CentOS_7&p=nis&f=1
こちらを参照。

これでようやく3台のサーバの20コア40スレッドが同じユーザの同じディレクトリで使えるようになったわけだ。
また普段、特に計算をバリバリさせていないときは2台は電源を落としておいて問題ないのでいろいろ都合が良いね。

次はTorqueのインストールだな。まあユーザーはほぼ私一人なんでジョブ管理は自分で個別にやってもいいんだけど。あっちこっちログインするのはややこしくて面倒だしな。

ディスクレスブート再び

ヘッドノードも入ったことだし、古いサーバーはディスクレスにしてやることで安定動作&消費電力の節約を図りたい。流石に5年以上使ったSASの15krpmディスクなんていつ壊れてもおかしくないので。実際1個壊れかけていたし。

ということでヘッドノードにdhcpd, tftpd, nfsdを立ててPXEディスクレスブートを目指す。

これまでに2台のうち1台ディスクレスという構成では試していた。今回も同じように設定していって、ディスクレスブートできるところまでは確認した。しかし、2台をディスクレスにして起動させてみたところ2台が同じ領域に書き込みをすることになってどうやらまずいらしい。さて、クライアントを複数立てるにはどうしたらいいんだろうか?

http://d.hatena.ne.jp/adsaria/20080129

ここにヒントはありそうな感じ。

TeraStationのNFSの設定

アマゾンで超破格で12TBのTeraStationが売っていたので、怪しいと思いつつも導入してみた。ラックマウントの4HDDのNASで、HDD無しで売っている某メーカーの価格くらいで3TBx4ついてきた感じ。
早速設定をしてNFSでマウントしてみると、どうも挙動がおかしい。コピーをしようとすると必ずエラーが出て、もう一度同じファイルをコピーすると、上書きするか?といちいち聞かれてからコピーが始まるが、一応ちゃんと書き込める。
設定がなんかおかしいんだろうな〜と見ていて、これが怪しいと思った設定がNFS>情報>サービスにある
動作モード:ユーザーモード
ゲストパーミッション:強制適用する

これをそれぞれカーネルモード、適用しないに変えたところ、不具合なくコピーできるようになったとさ。

速度もUSB3のHDDをサーバに接続して、1000Baseで接続しておよそ50MB/secくらいなのでまあそんなもんでしょう。400Mbps?

ファイルのディレクトリ構成をまとめて変更する

 for f in */Ab/hisat_results/*sort* ; do mv $f hisat_results/Ab ; done

カレントディレクトリから個別のディレクトリの奥の方にあるsortというワードの入ったファイルをhisat_results/Abというディレクトリにまとめて移動