第1章 はじめに
背景と目的
計算機サーバー群の運用と管理は、多くの研究者とその研究室にとって必須の課題です。情報科学系に限らず、多種多様な研究分野において、学生や教員が運用する小規模な共用計算機ノードが存在しています。これらのノードは時間と共に陳腐化し、求められるソフトウェアも日々進化しています。これらの変化に対処するため、定期的なメンテナンスが不可欠であり、新しい計算機ノードの導入も多くの手間と時間を要します。
本章では、これらの課題に対する解決策として、NAS(Network Attached Storage)を中心に据えた統合管理システムについて概説します。このアプローチにより、アカウント、ファイル共有、さらには各計算機ノードのOSを含むソフトウェアまで、NASで一元管理することで、管理コストを大幅に削減することが可能となります。
本チュートリアルの対象者
本記事は、計算機サーバー群の構築および運用に関与する研究室の主任研究者、テクニシャン、研究室メンバーを対象としています。さらに、企業の小規模な計算機サーバー群を運用する担当者や、個人の計算機サーバーの管理にも適用可能です。本記事は、具体的な手順や専門的なノウハウを提供するため、IT管理者やシステムエンジニアにも有用です。
必要な前提知識とスキル
本記事は、Linuxやネットワークに関する基本的な知識を一定程度前提としています。それでも、専門的な知識は最小限に抑え、多くの利用者が容易に理解できるように努力しています。不明な用語や概念に遭遇した場合は、インターネットや専門文献を参照しながら進めてください。本記事が参考になったと感じた方は、コメント欄でフィードバックをお寄せいただけると幸いです。
使用する技術スタックの概要
本記事で採り上げる主要な技術要素には、NAS、VM、LDAP、NFS、LTSP、Singularityが含まれます。これらの技術を総合的に活用して、効率的かつ安定した計算機サーバー群の運用を実現します。各技術要素に関する詳細な説明は、次章以降で展開します。
第2章 基本概念の理解
NAS(Network Attached Storage)
NASはネットワークに直接接続されるストレージシステムであり、主にファイルの保存と共有を担当します。簡単に言えば、ファイル共有に特化した計算機と見なすことができます。商用のファイルサーバーに比べて、NASは低コストで、非専門家でも容易に管理可能です。ただし、商用ファイルサーバーにはない専門的なサポートや拡張性に関する制約も存在します。本記事では、特にSynology社のNASに焦点を当て、その設定や活用方法を詳述します。
VM(Virtual Machine)
VMは物理的な計算機をエミュレートする仮想計算機です。VMの使用によって、物理ハードウェアから独立した環境を短時間で構築可能であり、またバックアップも容易です。Synology NASにはVMの作成機能も提供されており、その活用により多くのサービスをホストできます。
LDAP(Lightweight Directory Access Protocol)
LDAPは、ユーザー認証やディレクトリサービスを提供するプロトコルです。LDAPの導入によって、共用計算機ノード(LDAPクライアント)で一元化されたアカウントを使用してログインできます。Synology NASにはLDAPサーバー機能が備わっており、これによりNAS自体も一元管理が可能です。さらに、ユーザー管理や、追加、削除もGUIを介して容易に実施できます。
NFS(Network File System)
NFSは、ネットワーク越しにファイルシステムを共有するプロトコルです。NFSを使用することで、各計算機ノードで同一のホームディレクトリが利用可能となります。Synology NASでは、ユーザーホーム機能とNFSを連携させ、一元的なファイル共有環境を構築できます。
LTSP(Linux Terminal Server Project)
LTSPは、ネットワークを通じてLinux環境を各計算機ノードに提供するシステムです。これにより、各ノードでOSをインストールすることなく、PXEブートでネットワークからOSイメージを配信して起動します。各ノードは、事前に構築済みのOSイメージを使用するため、個別のソフトウェア設定やインストールは不要です。また、OSやプログラムの実行は各ノードのリソースを用いて行われ、GPUやFPGAも活用可能です。
Singularity
Singularityは、コンテナ環境を提供するプラットフォームです。これにより、各利用者はユーザー権限で様々なコンテナ環境を実行可能です。特に、科学技術計算の用途でよく使用されます。この技術の利点として、各利用者が自分で環境を構築できるため、システム管理者の負担が軽減されます。また、コンテナは各利用者のユーザーディレクトリに保存されるため、OSイメージの肥大化を防ぐことができます。唯一のデメリットは、利用者が新しい技術に慣れるまでの学習コストが必要であることですが、これはシステム運用コストとのトレードオフと考えられます。
第3章 ハードウェアとネットワークのセットアップ
これらのハードウェアとネットワークのセットアップを整備することで、次章からのNASの環境設定がスムーズに進行します。適切なハードウェアとネットワーク構成は、システムの安定した運用に寄与します。したがって、慎重な選定が求められます。
最小要件と推奨要件
本システムの構築には、複数のハードウェア要件が存在します。以下で最小要件と推奨要件を説明します。ユーザーは、自身のニーズや予算に応じて、これらの要件を参考に適切なハードウェアを選定することができます。
- メインのNAS: Synology NAS、4ベイ以上のモデルを推奨します。特に推奨されるモデルは DS1821+ です。HDDは2冗長+ホットスワップを推奨します。ホットスワップは、ストレージに故障があった場合に自動でHDDを交換する機能です。これにより、HDDが故障した場合でもデータの安全性を確保しつつ、迅速に交換作業が可能です。
- バックアップ用NAS(オプション): データの安全性を高めるため、バックアップ用のNASも考慮することを推奨します。特に DS1522+ 以上のモデルが推奨されます。HDDは1冗長で十分と考えられますが、安全性が必要な場合は2冗長+ホットスワップを選定してください。
- NAS用のHDD: 必要容量の約3倍を目安に選定します。Synology互換のHDDを推奨します。例えば、全体で共有ファイルに40TBが必要な場合、主用途に2冗長で10TB*6本と、ホットスワップ用に1本、バックアップ用に1冗長で10TB*5本を用意します。合計では120TB(10TB*12本)が必要となります。さらに、交換用の予備も用意することが重要です。
- NAS用のSSD(オプション): ストレージのキャッシュとして、性能向上を目的とします。特に、メインNASに対しては1TB以上のM.2 SSDを2本用意することを推奨します。余裕があれば、バックアップ用NASにも2本用意してください。Synology互換のSSDを選定することが推奨されます。
- 計算機ノード: システムを確認するためには、計算機ノードを1台以上用意することが必要です。最低要件は特にありませんが、推奨はメモリ16GB以上、SSD 1TB以上です。ストレージは必須ではありませんが、SSDをファイル共有のキャッシュとして利用することも可能です。本ガイドでは、テスト用にNvidia GPUを含むノードでの確認も行います。
- 無停電電源装置(UPS)(オプション): 急な停電や雷などからシステムを守るため、Synology互換のUPSの利用も考慮することが推奨されます。
ネットワーク構成
ネットワークには、特定の要件が存在します。すべてのマシンは1Gbps以上のネットワークに接続されている必要があります。また、すべてのマシンは同一のLANに所属する必要があります。DHCPは、ルーターから提供されることが望ましいですが、Synology NASからも提供可能です。(なお、本記事にDHCPの説明はありません)
第4章 NASのセットアップと構成
NASのハードウェアのセットアップ
メインのNASはLABHUBと呼ぶことにします。セットアップは、物理的な接続から始めます。本節では Synology DS1821+ を例に挙げますが、他のモデルでも基本的な手順は同様です。
- SSDの挿入(オプション): キャッシュ用のSSDを2本セットします。
- HDDの挿入: 適切な数のHDDを挿入します。
- LANケーブルの接続: 1GbE以上のLANに接続します。
- 電源の接続: UPSまたは電源コンセントに電源ケーブルを接続します。
- 電源のオン: 電源スイッチをオンにします。
NASへのアクセスとDSMのインストール
- NASにアクセスする: 同一のLANに接続されたPCからSynology Web Assistantを開き、NASにアクセスします。見つからない場合は、Synology Assistantをダウンロードしてください。
- DSMのインストール: 画面の指示に従ってDiskStation Manager(DSM)をインストールします。インストールが完了すると、NASは自動的に再起動し、ピーという音が鳴ります。
NASの初期設定
再起動が完了したら、以下の初期設定をWEBブラウザを使用して行います。使用するバージョンによっては、手順が若干異なる可能性があります。
-
初期アカウントの設定: デバイス名や管理者アカウントを設定します。この記事では以下のように設定しますが、環境に合わせて適宜書き換えて下さい。
- デバイス名: "LABHUB"
- 管理者アカウント: "sabakan"
- パスワード: 適切なものに設定します。
- Web Assistantで表示してくださいにチェックを入れる
- 更新設定: DSMとパッケージの更新を重要なDSMとパッケージの更新のみを自動的にインストールするに設定します。
- Synologyアカウントにログイン: Synologyアカウントにログインするか、新規アカウントを作成します。このアカウントは、外部ネットワークからのNASへのアクセスや、異常アラートの通知に使用されます。アカウントの作成をおすすめします。
- QuickConnectIDの設定: 外部ネットワークからのアクセス用にURLを設定します。ここでは"labhub1234"とします。
- その他の便利なツール: この段階での設定は特に必須ではありません。全項目を有効にしておくことをお勧めします。特に、Active Insightsは便利です。送信ボタンをクリックして完了です。
ストレージプールの設定
- 再ログイン: ページがリロードされたら、先程設定したアカウントでログインします。おすすめのアプリのインストールや2FA(二要素認証)はスキップします。
- ストレージプールの設定: ストレージプールとボリュームの作成を行います。今すぐ作成ボタンをクリックし、起動ボタンをクリックします。
-
ストレージプールのプロパティを設定:
SHA-2
を選択し、次へボタンをクリックします。 - ドライブの選択: ホットスワップ用に1台のHDDを残し、その他の全てのHDDを選択します。次へボタンをクリックし、続行ボタンをクリックします。
-
ボリューム容量の割り当て:
最大容量
を選択し、次へボタンをクリックします。 -
ファイルシステムの選択:
Btrfs
を選択し、次へボタンをクリックします。 - 暗号化の設定: ボリュームを暗号化しないを選び、次へボタンをクリックします。
- 設定の確認: 適用ボタンをクリックし、OKボタンをクリックします。
- ホットスペアの設定(オプション): ストレージマネージャ > Hot Spareをクリックし、ホットスペアを設定します。
- SSDキャッシュの設定(オプション): ストレージマネージャ > 作成▼ > SSDキャッシュの作成、を選択し、読み書きキャッシュをRAID 1で設定します。全てのmetadataをSSDキャッシュにピン留めするにチェックを入れます。
NASのその他の設定
- 固定IPの設定: コントロールパネル > ネットワーク > ネットワークインターフェイス > 該当LANを選択して編集 > IPv4 > 手動で設定する ここからLANの環境に合わせて固定IPを設定します。
- UPSの設定(オプション): コントロールパネル > ハードウェアと電源 > UPSを開いて、UPSの設定を行います。具体的な設定方法は使用するUPSによって異なりますので、マニュアルを参照してください。
以上で、LABHUBの基本的なセットアップと初期設定が完了です。次章では、これらのNASを活用したユーザー管理やデータ共有の設定を行います。
第5章 バックアップの構成(オプション)
バックアップはデータ保全の観点から非常に重要です。ここでは、オプションとしてバックアップ用のNAS(以後、"BACKUP"と呼びます)を設定し、メインのNAS("LABHUB")からの自動バックアップを構成します。
BACKUPのハードウェアセットアップと初期設定
まず、BACKUPを物理的にセットアップし、DSMをインストールします。第4章でLABHUBのセットアップを行ったのと同様の手順を踏みますが、ストレージの構成はSHR-1でも構いません。また、同じUPSを使用する場合、ネットワークUPS機能を利用する設定が必要です。
バックアップ用フォルダの作成
次に、バックアップ用のフォルダをBACKUP上に作成します。
- コントロールパネル > 共有フォルダを開きます。
- 作成 > 共有フォルダの作成を選択します。
- 名前を"BACKUP"、場所を"ボリューム1"として、次へをクリックします。
- 追加的なセキュリティ設定はデフォルトのままで、次へをクリックします。
- チェックサムを有効化とファイル圧縮を有効に設定し、次へをクリックします。
- 設定の確認画面で次へ > 適用をクリックします。
- コントロールパネルを閉じます。
Hyper Backup Vaultのインストール
BACKUP上でバックアップデータを受け取るため、Hyper Backup Vaultをインストールします。
- メインメニュー > パッケージセンター > Hyper Backup Vaultを選択し、インストールをクリックします。
- インストールが完了したら、BACKUPのページは閉じて構いません。
Hyper Backupのインストールと設定
LABHUBに戻り、Hyper Backupをインストールし、バックアップの設定を行います。
- メインメニュー > パッケージセンター > Hyper Backupを選択し、インストールをクリックします。
- Hyper Backupを開きます。
- バックアップタイプを"全システム"を選択し、次へをクリックします。
- バックアップ先として"リモートNASデバイス"を選択し、次へをクリックします。
- バックアップ先の設定で、BACKUPのIPアドレスを入力し、ログインをクリックしてログインします。その後、共有フォルダを"BACKUP"、ディレクトリを"LABHUB_1"と設定し、次へをクリックします。
- バックアップの設定はデフォルトのままで次へをクリックします。
- ローテーション設定もデフォルトのままで次へをクリックします。
- 完了をクリックします。
注意: システムが再起動を要求する場合もありますが、ストレージプールの設定直後はバックグラウンドタスクが実行中の可能性があるため、全ての設定が終わり、都合が良いタイミングでNASを再起動し、バックアップを有効にしましょう。
これで、毎日午前3時にLABHUBの全ての差分がBACKUPに自動でバックアップされる設定が完了しました。BACKUPに関する説明はこの章で終了します。以後の記事の説明は全てLABHUBに対する説明であることに注意して下さい。
第6章 LDAPサーバーの構築と設定
LDAPサーバーのインストール
- パッケージセンター > LDAP Server > インストールを選択し、LDAPサーバーをLABHUBにインストールします。
- インストールが完了したら、開くをクリックします。
-
LDAPサーバーを有効にするにチェックを入れ、FQDN(Fully Qualified Domain Name)には、所持しているドメイン(例:
mylab.myuniv.ac.jp
)を入力します。LDAPのための一意なパスワードも作成し、適用をクリックします。注意: ここで表示されるBase DNとBind DNは後で参照するので、メモしておいてください。 - ユーザーの管理 > 詳細 > 「管理者がパスワードをリセットした後で、ユーザーのパスワード変更を強制します」をONにします。
最初のユーザーの作成
- ユーザーの管理 > ユーザー > 作成をクリックします。
- 名前にはログインに使用するユーザー名(小文字推奨)を、初期パスワードには適切なパスワードを入力します。
- グループの結合: デフォルトのまま次へをクリックします。
- その他の属性: 空欄のまま次へをクリックします。
- 完了をクリックします。
LDAPサーバーとNASの接続
- コントロールパネル > ドメイン/LDAP > 参加を選択します。
- サーバータイプを
LDAP
にし、サーバーアドレスにlocalhost
を入力し、次へをクリックします。 - Bind DNには先ほどメモしたものを使用し、パスワードを入力します。Base DNも先ほどメモしたものを使用し、次へをクリックします。
- LDAPディレクトリを確認して参加するを選択し、全てがOKになったらOKを押します。
- LDAPユーザーに移動し、ここに先ほど追加したユーザーが表示されるか確認します。
- ユーザーホームをクリックし、「LDAPユーザーに向けたHOMEサービスを有効にする」をクリックしてOKを押します。
テストと確認
- 一度"LABHUB"からログアウトします
- 先ほど作成したユーザーでログインを試みます
- File Stationを開いてhomeというフォルダが表示されていることを確認します。(このフォルダがユーザーが自由に使える共有フォルダになっています。)
- ログインができた場合、LDAPの構築は成功です。これで、LDAPサーバーの基本的な構築と設定が完了しました。
- TIPS: LDAPにグループを
sudo
という名前で作っておくと、そこに追加されたユーザーはsudo権限が使えるようになるので便利です。
第7章 NFSのセットアップとユーザーデータの管理
NFSサービスの有効化
- "LABHUB"に管理者アカウントでログインします。
- コントロールパネル > ファイルサービス > NFSを選択します。
-
NFSサービスを有効に設定をONにし、最大NFSプロトコルで
NFSv4.1
を選択します。 - 適用をクリックして設定を保存します。
共有フォルダ「homes」の設定
-
コントロールパネル > 共有フォルダ >
homes
を選択し、編集をクリックします。 - 「マイネットワークでこの共有フォルダを非表示にする」をONに設定します。
- 「無許可のユーザーにサブフォルダとファイルを見せない」をONに設定します。
- 詳細タブに移動しますが、ファイル圧縮はパフォーマンス低下を懸念してONにはしません。
NFS権限の設定
- NFS権限タブに移動し、作成をクリックします。
-
ホスト名またはIPにローカルネットワークを指定します(例:
192.168.100.0/24
)。 - 必要な権限を設定し、保存をクリックします。
これでNFSの設定が有効になり、指定されたネットワークからNFS共有にアクセスできるようになります。また、SMBも有効になっているため、WindowsやMacからも各ユーザーがログインして各自のファイルにアクセスできるようになっています。
第8章 LTSPの導入
事前準備
- Get Ubuntu ServerからUbuntu Server 22.04のISOをダウンロードします。
- 管理者として"LABHUB"にログインし、ダウンロードしたISOを自分の
home
ディレクトリ以下に保存しておきます。
VMインスタンスの設定
- パッケージセンター > Virtual Machine Manager > インストールを選択します。
- インストールが完了したら、Virtual Machine Managerを開きます。
- 初回起動ウィザードが表示されるので、指示に従って設定を進めます。
- 仮想マシン > 作成 > "Linux" > 次へを選択します。
- "一般仕様を構成"で以下を設定し、次へをクリックします。
- 名前:
LTSP
- CPU: 最大の大きさに設定
- ビデオカード:
vga
を選択
- 名前:
- ストレージは
100GB
に設定し、次へをクリックします。 - ネットワーク設定はデフォルトのまま次へをクリックします。
- "その他の設定"で、以下のように設定し、次へをクリックします。
- ブートアップ用のISOファイルに先ほど保存したISOを選択
- 自動スタートを「はい」に設定
- 電源管理設定はデフォルトのまま次へをクリックします。
- 構築後に仮想マシンの電源を入れるにチェックを入れて、完了をクリックします。
Ubuntu 22.04のインストール
- 作成した仮想マシン
LTSP
を選択し、接続をクリックします。 - Ubuntuのインストールウィザードに従ってインストールを進めます。
- 言語選択: English
- キーボードコンフィグ: 適宜設定
- インストールタイプ: Ubuntu Server
- ネットワーク設定: 必要に応じて固定IPを設定
- プロキシ設定: 空欄のまま
- アーカイブミラー設定: デフォルトのまま
- ストレージ設定: デフォルトのまま
- プロファイル設定: 管理者アカウント名、サーバー名、ユーザー名、パスワードを設定
- OpenSSHのインストール: チェックを入れる
- Featured Server Snaps: 何もチェックを入れずに進む
- インストールが完了するのを待ちます。
Ubuntuの初期設定
- 管理者アカウントでVMにログインします。
- 必要なパッケージをインストールします。適宜修正して下さい。ここでは極力重たいツールや外部レポジトリの必要なパッケージは入れないようにします。
sudo apt upgrade sudo apt install avahi-daemon zsh python3-pip vim emacs sudo apt install cmake ffmpeg firefox gdb iftop pssh sudo apt install unzip wakeonlan x11-apps zip
- タイムゾーンを設定します。
sudo timedatectl set-timezone Asia/Tokyo
- 不要なアップデート通知を無効にします(この設定は個人的な好みです)
sudo chmod -x /etc/update-motd.d/*
LDAPでの認証を設定
- 必要なパッケージをインストールします。
sudo apt install sssd
-
/etc/sssd/sssd.conf
を作成し、以下の内容を記述します。そして、[domain/default] id_provider = ldap auth_provider = ldap chpass_provider = ldap ldap_uri = ldaps://192.168.100.200/ # 各自の固定IPにする ldap_search_base = dc=mylab,dc=myuniv,dc=ac,dc=jp # 適宜変更 ldap_default_bind_dn = uid=root,cn=users,dc=mylab,dc=myuniv,dc=ac,dc=jp # 適宜変更 ldap_default_authtok = PASSWORD # 設定したパスワード ldap_id_use_start_tls = false ldap_tls_reqcert = never access_provider = ldap ldap_access_filter = (shadowExpire=-1) override_shell = /bin/bash # ほかのシェルが良い場合は変更 [sssd] services = nss, pam domains = default
sudo chmod 0600 /etc/sssd/sssd.conf sudo systemctl restart sssd
- LDAPでホームを自動マウントする設定を行います。
sudo apt install autofs
/etc/auto.master
に以下を追加します。/home program:/etc/auto.home
/etc/auto.home
を作成し、以下の内容を記述します。(@から始まるドメインの部分を適宜書き換えて下さい。そして、実行権限を付与して、AutoFSをリロードします。#!/bin/bash USER=$1 ID=$(id -u $USER) echo "-fstype=nfs -o=defaults,fsc labhub.local:/volume1/homes/@LH-MYLAB.MYUNIV.AC.JP/61/$USER-$ID" exit 0
sudo chmod +x /etc/auto.home sudo systemctl reload autofs
- これで、LDAPの連携とホームディレクトリの同期設定が終わりました。一度ログアウトして、各ユーザーがVMにログインでき、ホームディレクトリが存在し、NASと同期しているかを確認します。ファイルを書き込んでNASと同期が取れているかも確認しましょう。
LTSPの導入
- LTSPのリポジトリを追加し、必要なパッケージをインストールします。
sudo add-apt-repository ppa:ltsp sudo apt install ltsp ltsp-binaries dnsmasq nfs-kernel-server openssh-server squashfs-tools ethtool net-tools epoptes
-
/etc/ltsp/ltsp.conf
を作成し、以下の内容を記述します。client001の部分には適当な名前を設定し、各計算機ノードのMACアドレスを記述します。[clients] # SSHを有効にする設定 KEEP_SYSTEM_SERVICES="ssh" POST_INIT_CONFIG_SSH="dpkg-reconfigure openssh-server" # バックグラウンドタスクを有効にする設定 POST_INIT_EDIT_SYSTEMD="perl -p -i -e 's/KillUserProcesses=yes/KillUserProcesses=no/g' /etc/systemd/logind.conf" [client001 | c1:23:aa:31:14:gk] HOSTNAME=“client001” [client002 | c1:23:aa:31:14:gk | c1:23:aa:31:14:ab] HOSTNAME="client002" # 固定IPを設定する場合は KERNEL_PARAMETERS="ip=192.168.100.002:\${srv}:\${gateway}:\${netmask}"
- パーミッションを660にします。
- SSH鍵が毎回更新されないように、以下のようにLTSPの設定ファイルを編集します。これらの手順はLTSPをアップデートするたびにコメントアウトが必要かもしれません。
まず、/usr/share/ltsp/server/image/image.excludes
を編集します。以下の行をコメントアウトします。そして、# etc/ssh/ssh_host_*
/usr/share/ltsp/server/image/55-cleanup.sh
を編集します。以下の行をコメントアウトします。# re ssh_host_keys
- LTSPの設定を更新して、イメージファイルを作成します。
sudo ltsp dnsmasq sudo ltsp ipxe sudo ltsp nfs sudo ltsp image / sudo ltsp initrd
- 注意: このIssue (https://github.com/ltsp/ltsp/issues/43) の問題に当たった。起動に問題がある人は参考になるかも。
クライアントの起動の確認
- クライアントマシンをPXEブートできるようにBIOSまたはUEFI設定を変更します。具体的な手順はマザーボードのマニュアルを参照してください。一般的には、PCを起動時に特定のキー(例: F2, F12, DELなど)を押し、BIOS/UEFIメニューに入り、ブートオプションでネットワークブート(PXEブート)を最優先に設定します。
- クライアントマシンを再起動します。自動でLTSPサーバーからOSイメージがネットワーク経由でロードされ、Ubnutu Serverが起動します。
- クライアントが正常に起動したら、LDAP認証でログインできるかを確認します。
これで、LTSPの基本的なセットアップが完了し、クライアントマシンがLTSPサーバーからOSをネットワークブートして起動し、LDAP認証でログインできる状態になっているはずです。もし問題がある場合は、各ステップを確認し、設定が正しく行われているかを再チェックしてください。その他の設定はLTSPの公式サイトに詳しく説明されています。
第9章 LTSPクライアント環境の強化(オプション)
FSCacheの設定
FSCacheはLinuxのカーネル機能で、ネットワークファイルシステムのパフォーマンスを向上させるためのローカルキャッシュ機能です。この機能をLTSP環境に適用することで、計算機ノードのレスポンスを向上させることが可能です。もっと知りたい人はこの記事が詳しいです。
- FSCacheをインストールします。
sudo apt install cachefilesd
- 計算機ノードで有効にするために、
/etc/ltsp.conf
の[client]
セクションに以下の設定を追加します。# FSCACHEを有効にする設定 FSTAB_FSCACHE="LABEL=FSCACHE /var/cache/fscache auto defaults,nofail" POST_INIT_FSCACHE="echo RUN=yes >> /etc/default/cachefilesd"
-
SSDの初期化: 各計算機ノードのSSDを初期化してキャッシュの準備が必要です。計算機ノードにログインしてSSDを
LABEL=FSCACHE
で初期化します。以下はその一例です。注意:SSDが初期化されます。sudo parted /dev/nvme0n1 -s mklabel gpt sudo parted /dev/nvme0n1 -s mkpart primary ext4 1 100% sudo mkfs.ext4 -F -L FSCACHE /dev/nvme0n1p1
自動アップデートの有効化
- 重要なセキュリティパッチがLTSP環境でも自動でアップデートされるようにします。
- システムの自動アップデートは
unattended-upgrades
パッケージがこの機能を提供します。 - デフォルト設定ではLTSPでこれが無効にされています。
/etc/ltsp.conf
の[client]
セクションに以下を追加します。# SSHと自動アップデートを有効にする設定 KEEP_SYSTEM_SERVICES="ssh unattended-upgrades"
Nvidiaドライバーをインストールする
- GPUで計算を行うにはnvidia-driverが必要になります。
- LTSPクライアントで使用するためには、適切なドライバーのインストールが必要です。
- 各環境に適切なドライバをインストールして下さい。以下はその一例です。
sudo apt install nvidia-driver-535
- LTSPホストを修正した時は、毎回以下のコマンドでLTSPイメージを更新する必要があります。
sudo ltsp image sudo ltsp initrd
- その後に、各ノードを再起動すると、更新内容が反映されます。
第10章 Singularityを用いたコンテナ化とアプリケーションのデプロイ
Singularityは、科学計算や高性能計算(HPC)のために設計されたコンテナプラットフォームです。Singularityを使用すると、アプリケーションとその依存関係を単一のイメージファイルにパッケージ化し、異なるコンピューティング環境で一貫した実行を可能にします。
Singularityのインストール
- パッケージをダウンロードします。
sudo wget https://github.com/sylabs/singularity/releases/download/v4.0.0/singularity-ce_4.0.0-jammy_amd64.deb
- 次にインストールを実行します。
sudo apt install ./singularity-ce_4.0.0-jammy_amd64.deb sudo rm singularity-ce_4.0.0-jammy_amd64.deb
Fakerootの設定
Singularityのビルドは--fakeroot
オプションを使用することでユーザー権限でもビルドを行うことができますが、各ユーザーのUIDを/etc/subuid
と/etc/subgid
に記述する必要があります。この手間を削減するために、以下のようにスクリプトとPAMの設定を用いて、自動で更新されるようにします。
- まず以下のファイルを
/etc/ldap/pam_add_subid.sh
に保存します。#!/bin/bash USERNAME=$PAM_USER OFFSET=1000000 RANGE_SIZE=65536 MYUID=$(id -u $USERNAME) NEWID=$((100000000 + (($MYUID - $OFFSET) * 100000))) grep -q "^$USERNAME:" /etc/subuid || echo "$USERNAME:$NEWID:$RANGE_SIZE" >> /etc/subuid grep -q "^$USERNAME:" /etc/subgid || echo "$USERNAME:$NEWID:$RANGE_SIZE" >> /etc/subgid
- 権限を追加します。
sudo chmod +x /etc/ldap/pam_add_subid.sh
- PAMに設定を加えます。以下のとおりです。/etc/pam.d/common-session に以下を1行追加
session optional pam_exec.so session optional pam_exec.so /etc/ldap/pam_add_subid.sh
- これでSingularityの設定は完了です。LTSPのイメージをビルドして(
ltsp image && ltsp initrd
)、各計算ノードを再起動して下さい。
Singularityの使用例: Intel コンパイラ
Singularityを用いてIntelコンパイラをコンテナ化し、簡単にデプロイ可能な環境を作成します。
-
defファイルの作り方
- Intel oneAPIベースキットのイメージを使用します。
- 実行コマンドとして
icx
を指定します。(iccコマンドは2023年から廃止されたようです)
Bootstrap: docker From: intel/oneapi %runscript exec icc "$@"
-
ビルドの方法: 以下のコマンドでSingularityイメージをビルドします。
singularity build --fakeroot intel-oneapi.sif intel-oneapi.def
-
実行例: Singularityコマンドを使用してコンパイラを実行します。
singularity exec intel-oneapi.sif icc example.c -o example
-
コンテナイメージを直接実行する実行例(非推奨)
- ビルド後のバイナリを
icc
に名前を変更し、パスを通します。例:~/.local/bin
- 注意: この方法では
icc
しか使えません。oneAPIには複数のコマンドが含まれています。複数のコマンドをローカルのように使用するには、シェルスクリプトを作成します。
export PATH="$HOME/.local/bin:$PATH" mv intel-oneapi.sif $HOME/.local/bin/icx icx example.c -o example
- ビルド後のバイナリを
Singularityの使用例: PyTorchを使ったGPU利用
PyTorchを用いてGPUを活用するコンテナ環境を構築します。
-
defファイルの例: PyTorchの公式Dockerイメージをベースにします。
Bootstrap: docker From: pytorch/pytorch %post pip install torchvision numpy %runscript exec python "$@"
-
ビルドの方法
- 以下のコマンドでSingularityイメージをビルドします。
singularity build --fakeroot pytorch.sif pytorch.def
-
GPUを使う場合のsingularityコマンドの実行例
-
--nv
オプションを使用してNVIDIA GPUを利用します。
singularity exec --nv pytorch.sif python your_script.py
-
-
torch.cudaが利用可能か確認する
- Pythonスクリプト内で以下のコードを使用してGPUが利用可能か確認します。
import torch print(torch.cuda.is_available())
これにより、Singularityを用いて異なるアプリケーション環境を効率的にデプロイし、実行する基本的な手順を理解できました。これをベースに、さまざまなアプリケーションやライブラリをコンテナ化し、計算環境を柔軟に構築していくことが可能です。
第11章 サーバーとクライアントの保守管理
保守管理はシステムの安定運用を保つために不可欠です。この章では、利用者の管理、新しい計算機ノードの追加、そして定期的なメンテナンスとアップデートのスケジューリングについて詳しく説明します。
利用者の管理方法
-
LDAPでアカウントを追加する
- メインメニュー > LDAP Server > ユーザーの管理を開きます。
- 作成をクリックし、新しいユーザーの詳細情報(ユーザー名、パスワード)を入力します。
- 必要な情報を全て入力したら、OKをクリックしてアカウントを作成します。
-
利用者にWebからNASにアクセスしてもらってhomeディレクトリを確認する
- 利用者には、Webブラウザを使用してNASにアクセスしてもらいます。
- 注意:NASから一度homeを開かないとhomeディレクトリが作られません。
利用者の削除方法
利用者のアカウントを削除する場合、データは削除されず、アカウントは一時的に無効化されます。
- メインメニュー > LDAP Server > ユーザーの管理からアクセスします。
- 削除したいユーザーを右クリックし、編集を選択します。
- このアカウントを無効化を選択し、OKをクリックします。
- これでNASにもSSHにもアクセスできなくなります。
新しい計算機ノードの追加
新しい計算機ノードを追加する際の基本的な手順は以下の通りです。
- ハードウェアのセットアップ: 新しい計算機ノードのハードウェアをセットアップし、ネットワークに接続します。
- マザーボードの設定: 第8章を参考に、PXEブートを有効にして起動します。
- SSDキャッシュの設定(オプション): 第9章を参考に、SSDを初期化します。その後再起動します。
- ノードのテスト: 新しい計算機ノードが正しく動作し、NASと通信できるかをテストします。
定期的なメンテナンスとアップデートのスケジューリング
- アップデートのスケジューリング: セキュリティパッチの適用は自動で行われるようになっており、アップデートは最小限で良いように構成されています。もし全体に何かの変更を行いたい場合は、LTSPホストの更新を行った後に、LTSPのイメージを作り直して、全てのノードを再起動しましょう。
- ハードウェアのチェック: 各ハードウェアの状態を定期的にチェックし、故障や性能低下の兆候がないか確認します。特にNASのストレージのヘルス状況にエラーが発生してないか確認しましょう。
- バックアップの確認: データのバックアップが正しく行われているかを確認し、必要に応じてバックアップの設定を調整します。これも定期的に確認しましょう。
第12章 まとめと今後の展望
まとめ
本記事では、単一のSynology NASにVM、LDAP、NFS、LTSP、及びSingularityを組み合わせ、計算機サーバー環境の利便性を向上させました。得られた環境では、すべての環境が同一のOS、ソフトウェアスタック、アカウント、データを保持するため、プログラムのポータビリティが高まり、並列実験を行う際に環境起因のバグに悩まされることが少なくなりました。新規利用者の追加はわずか1分、計算機の追加も5分で完了し、メンテナンスコストは極小となっています。利用者には僅かな学習コストが発生しますが、管理コストの大幅な削減が可能となり、全体としてのトレードオフが向上しています。本記事の多くの部分、そしてタイトルも、ChatGPTを用いて生成されたものです。そのため、タイトルが少々奇抜かもしれませんが、お許しを。質問や感想コメントもお待ちしております。チャンネル登録と高評価もどうぞ宜しくお願いします!次回もお楽しみに。
今後の展望
様々な管理を更にNASに集約するアプローチとして、以下の拡張が考えられます。
- NASでメールを管理する: Synology NASはメールサーバー機能を提供しており、LDAPと連携し、メールアドレスの一元管理が可能です。
- NASでホームページサーバーを運用する: VMを用いてWebサーバーを構築する方法もありますが、Web Station機能を利用することで、WordPressなどを用いて簡単にホームページを構築することができます。
- 外部ネットからのアクセス: 外部から各計算機ノードへのアクセスを可能にするため、VMで踏み台サーバーを設置し、ルーターでポート転送を行う方法が考えられます。この際、セキュリティは極めて重要であり、一般権限のユーザーでも侵入を許してしまうと、研究室のLANへのアクセスが自由になってしまう可能性があるため、注意が必要です。
- バックアップ: どの拡張もバックアップを欠かさず実施し、万が一の際に迅速な復旧が可能な環境を整備しましょう。
- パフォーマンスのモニタリング: システムのパフォーマンスをモニタリングし、必要に応じてリソースの調整や設定の最適化を行います。さまざまな無料の可視化ツールがあるので、導入すると良いでしょう。