本日は趣向を変えて複数の計算機を透過的にひとつのものとして使う話です。以前にデータ分析用の計算機環境を用意する話をしましたが、その続きというか補足です。
手元の計算機で開発する問題点
人によっては手元のノート PC の性能にこだわり、ローカルで開発をしたりする人がいるようですが、この場合いくつかの問題があります。
- いくら性能の高い計算機を買おうとも、その性能には上限がある
- 長時間かかるジョブを実行した場合、終了するまでノートを閉じて持ち運んだりできない
- 複数の拠点で開発する場合、重いノートを持ち歩かなければならない
- 手元の計算機に障害が発生するとすぐに開発の継続が困難になる
ソリューション
これに対し、遠隔に設置したものも含む複数の計算機によるクラスタで開発をする場合、さまざまなメリットがあります。
- スケールアウトすることができる
- 長時間かかるジョブを実行し、そのまま接続を切り離せる
- 複数の拠点で開発する場合でも、接続するための機器さえあれば同一環境で開発をできる
- 計算機のどれか一台に障害が発生しても影響は小さくて済む
計算機の統合
GNU/Linux を中心とした環境ではいくつかの方法で開発環境を透過的にひとまとめにできます。
sshfs
ファイルシステムを統合する最強の手段が sshfs です。この手のソリューションは昔から多く有り他にも NFS などがありますが、既存の認証の仕組みを利用し手軽かつ安定した接続を維持できるのは sshfs かと思います。
基本的な接続方法
たとえば手元の local から遠隔の remote という計算機のルートディレクトリを統合する場合はこうなります。 rsync でファイルを転送するときと一緒なのでわかりやすいかと思います。
sshfs your_name@remote:/ ~/mnt/remote_dir
こうすると ~/mnt/remote_dir の下に remote のルートディレクトリがマウントされます。
この仕組みを利用して、複数の計算機のホームディレクトリをひとつのディレクトリの下にまとめることができます。シェルスクリプトなどを用意して、接続の可否確認と接続をひとまとめに自動実行できるようにしておくと良いでしょう。
もちろん権限や認証情報は ssh で接続したその情報がそのまま適用されます。
ssh ポートフォワーディング
ssh ポートフォワーディングは離れた計算機のポートを転送する機能です。これを利用すれば、例えば遠隔の計算機で実行している本来ローカルホストからしかアクセスできないテストサーバーのサービスを、あたかも手元の計算機で実行しているかのようにアクセスすることができたりします。
手元を local 、遠隔を remote という名前だとするとこうなります。
ssh -L9999:remote:9999 your_name@remote
上の例では、遠隔の 9999 番ポートの内容に対し localhost:9999 でアクセスできるようになります。
ssh ポートフォワーディングを利用した接続例
たとえばデスクトップ環境の無いヘッドレスなサーバーが稼働していたとします。このサーバー上で一時的にデスクトップでの対話操作が必須なプログラムを動かしたくなったとします。
X を用意する
X を提供する環境と、最小限のウィンドウマネージャー、それに VNC サーバーだけを用意しておきます。
sudo apt-get install xvfb fluxbox x11vnc
X を起動する
# 適当なディスプレイ番号を予め設定しておく
export DISPLAY=:99
# X の起動
sudo Xvfb $DISPLAY -screen 0 1024x768x24 2>&1 >> $TMP/xvfb.log &
# ウィンドウマネージャーの起動
fluxbox 2>&1 >> $TMP/window-manager.log &
# VNC サーバーの起動
x11vnc -display $DISPLAY -loop -bg -nopw -listen localhost -xkb 2>&1 >> $TMP/vnc.log &
この状態で前述した ssh ポートフォワーディングにより 5900 番を転送します。クライアントで VNC を起動して localhost:5900 に接続すれば fluxbox な GUI が起動しますので、あとは目的のプログラムを起動すれば良いです。
# VNC クライアントの起動
xtightvncviewer localhost &
rsync
rsync はネットワーク経由であろうがなかろうが透過的にファイルを転送することができます。これは多くの人がご存知でしょうし、マニュアルを読むのが早いでしょう。
TRAMP + Emacs
TRAMP はリモートファイルの編集機能を提供するしかけです。これを Emacs から利用できることで、 Emacs でリモートのファイルも編集できるようになります。
TRAMP を使ってリモートのファイルを弄る
http://qiita.com/miyakou1982/items/d05e1ce07ad632c94720
Emacs からファイルをオープンする時に C-x C-f して次のようにするとリモートファイルをオープンできます。
/ssh:your_name@remote:/home/your_name/
まとめ
自分の手元以外にある計算機をどのように透過的に利用すれば良いか、方法を色々と説明しました。
ssh プロキシーを利用した多段認証を簡略化する方法についてはこちらをご覧ください。