レベル: 初級 Mayank Sharma (geeky_bodhi@yahoo.co.in), Freelance technical writer
2004年 12月 22日 クラスターというのは協調動作するコンピューターの集まりですが、過剰負荷となったシステム(またはノード)から同じクラスター内の別システムへ作業負荷を転送できることから、コンピューター・リソースを有効利用する上で重要な概念です。この記事では、KnoppixベースのLiveCDを使用して負荷分散Linux™クラスターを構成する方法を解説します。
スーパーコンピューターというのは、通常のコンピューターをはるかにしのぐ能力を持つコンピューターに対する、一般的な用語です。クラスターというのはコンピューターの集まりであり、何よりも、過剰負荷となったユニットから別のコンピューターに作業負荷を転送できる能力を持ったものです。この機能は負荷分散(load balancing)と呼ばれます。この記事では、負荷分散クラスターを構成する方法を学びます。
効果的に負荷を分散させることよってクラスターの効率は改善され、スーパーコンピューター・ファミリーの中での地位を得られるようになります。クラスター内のコンピューターは負荷を渡し合うために、お互いに接続されている必要があります。
クラスター内のコンピューターはノードと呼ばれます。一つ以上のマスター・ノードと、幾つかのドローン(drone)またはスレーブ・ノードがクラスターを管理します。一般的な構成では、アプリケーションが起動するのはマスター・ノードです。必要な時にアプリケーションをドローンに移行するのは、マスター・ノードの責任です。
この記事ではKnoppixベースのLiveCDを使って、皆さん自身のスーパーコンピューターを構成するための方法を見て行きます。皆さんは恐らくLiveCDのことは聞いたことがあるでしょう。LiveCDはインストール前に試すことのできる、そしてCDドライブから起動できる、完全なLinuxシステムです。LiveCDが紹介されて以来、無数の個人やプロジェクトがデモ用のプラットフォームとしてLiveCDを使っており、初期の「DemoLinux」の頃とは大きく様子が変わってきています。
スーパーコンピューターとは何か?
スーパーコンピューターは普通、科学計算、技術計算に使われ、膨大な計算を行ったり、巨大なデータベースを扱ったり、あるいはその両方を行います。(スーパーコンピューターという用語は、(遅いとは言え)やはり圧倒的な速さを持つシステムを言う場合もあります。)
現実には、大部分のスーパーコンピューター・システムは相互接続された複数のコンピューターであり、下記に挙げた2つの一般的手法のいずれかを使って並列処理を行います。
- SMP、または対称型マルチプロセシング(symmetric multiprocessing)
- MPP、または超並列処理(massively parallel processing)
SMPは「密結合:tightly coupled」、とか「全共有:shared everything」のシステムとも言われますが、プロセッサーはメモリーとI/Oバスまたはデータ・パスを共有し、OS(operating system)のコピーが一つだけでプロセッサーを制御します。通常のSMPシステムでは、16個のプロセッサーが上限です。SMPシステムがMPPよりも有利なのは、オンライン・トランザクション処理(OLTP: online transaction processing)、つまり多くのユーザーが単純なトランザクション・セットを使って同じデータベースにアクセスする場合です。動的作業負荷分散はSMPが最も得意とするところです。
MPPシステムは「疎結合:loosely coupled」、とか「無共有:shared nothing」のシステムと言われますが、それぞれが独自のOSとメモリーを持つ複数のプロセッサーが、一つのプログラムの別々の部分を同時に処理します。このシステムでは、メッセージング・インターフェースと一連のデータ・パスを使って、プロセッサーが相互に通信を行います。一つのタスクに対して最大200個のプロセッサーを割り当てることができます。MPPシステムではプロセッサー間でのシステム・リソースや作業割り当ての分配(parceling)のために綿密な計画を立てる必要があるため、構成は複雑になります。(何も共有しない、sharednothingと言われることを思い出してください)。ユーザーが同時に膨大な数のデータベースを検索する必要があるようなアプリケーションでは、MPPシステムが有利になります。
IBM® Blue Pacificはハイエンドのスーパーコンピューターの好例です。5,800個のプロセッサー(と2.6兆バイトのメモリー)を持つ3.9テラフロップ(teraflop)システムは、核反応に伴う物理現象のシミュレーション用にLawrence Livermore National Laboratoryとの協力で作られたものです。
クラスター化はローエンドのスーパーコンピューターであり、手作りに近い手法で構成します。この例として最もよく知られているのはBeowulfプロジェクトです。Beowulfプロジェクトでは、店頭に並んでいるようなPCプロセッサーや高速イーサネット(Fast Ethernet)、そしてLinux OSを使って、スーパーコンピューターを手作りするのです。Beowulfプロジェクトについて詳しくは、下記の参考文献を見てください。
クラスター化については理解できたと思いますので、皆さんが自分のクラスターを構成するための方法を説明しましょう。
魔法のツール:ClusterKnoppixとopenMosix
クラスターを構成する前に、これから使おうとしている、メインとなるディストリビューションClusterKnoppixと、付属のカーネルとしてクラスター化を実現するopenMosixを少し見てみましょう。
メインのディストリビューション:ClusterKnoppix
名前からも分かる通り、ClusterKnoppixはKnoppixから派生したものです。ClusterKnoppixでは、Knoppixの持つ利点の全て(豊富なアプリケーション、CDから実行可能なこと、魔術のような自動ハードウェア検出、そして様々な周辺機器やデバイスのサポートなど)が利用でき、さらにopenMosixのクラスター化機能も利用できます。ClusterKnoppixとopenMosixについての詳しい情報へのリンクは参考文献に挙げてあります。
その他のopenMosix CDベースのディストリビューションとしては、Bootable Cluster CD (BCCD)、ParallelKnoppix、PlumpOS、QuantianそれにCHAOSなどがあります。ClusterKnoppixはその中で最も主流で人気のあるものですが、その理由として下記が挙げられます。
- (他のデスクトップの何にもまして)KDEを実行する完全機能のXサーバーがある
- (GIMPなど)様々なアプリケーションがある
- CHAOSディストリビューションからのセキュリティー機能強化を採り入れている(CHAOSについては後ほど触れます)
ノードにまたがってプログラムを管理する:openMosix
ハードウェアやマシン間の接続とは別に、様々なドローン・ノードに渡って広がるプログラムを管理するソフトウェアも必要になります。
クラスター化されていないコンピューターでは、ストレージ・メディア(ハード・ディスクやCDなど)からアプリケーションを起動してメモリーに展開するのを管理するのはOSです。アプリケーションが完全に実行されるようにOSが監視するのです。
私はopenMosixを選択しました。openMosixは単一システムのイメージ・クラスター化のために設計されたLinuxカーネル・エクステンションです。これを選択した理由は、OS(この場合ではLinuxカーネル)が任意のクラスター・ノードからアプリケーションを起動してメモリーに展開でき、またクラスター中の任意のノードでアプリケーションを実行できるためです。どんなアプリケーションでも、一番余裕のある、そしてリソースのあるノードに移行されるのです。
openMosixがインストールされると、クラスター中のノードは通信を開始します。クラスターはリソース割り振りを最適化することによって、連続的に作業負荷に対応するようになります。openMosixの機能であるAuto Discoveryを使うと、クラスターの動作中であっても新しいノードを追加することができます。
openMosixプロジェクトによると、openMosix は1,000ノードにまで拡張できるとのことです。
クラスターを構築する
私はこのために2つのマシンを使いました。マスター・ノードはPentium™ III 1.7-GHzのマシンであり、オンボードのグラフィックスと共有の384 MBのRAMを持っています。ドローンはPentium III 997-MHzのマシンであり、専用に256 MBのRAMを持っています。どちらもCD-ROMドライブを持っています。どちらにもRealTekの10/100 Mbps LANカードが入っており、標準のクロス・ネットワーク・ケーブルで接続されています。
皆さんもケーブルで接続された2台(以上)のマシンから成るホーム・ネットワークを持っていれば、その構成は私のものと似ていることになります。
またClusterKnoppixも必要になります(この記事の執筆時点での最新版はclusterKNOPPIX V3.4-2004-05-10-EN-clです)。ClusterKnoppixはドローンがネットワーク上で起動するのを嗅ぎつける機能を持っていますが、そのためにはネットワーク経由での起動をサポートする特別なLANカードとBIOSが必要です。ただしCDを複製するコストはごく僅かであり、全ノードでXを実行しようとしているので、ノードの数だけのClusterKnoppix CDを使うのが一番簡単です。
クラスター上の様々なノードに対しては、次のネットワーク設定を使用します。
- ネットワーク -- 192.168.1.0
- ネットマスク -- 255.255.255.0
- デフォルト・ゲートウェイ -- 192.168.1.1
- マスターのIPアドレス -- 192.168.1.10
- ドローン #1のIPアドレス -- 192.168.1.20
Linuxでのネットワークの詳細については省略します。これについては豊富な情報がありますので、参考文献を見てください。
マスター・ノードを初期化する
openMosixでは、最初に起動するノードがマスター・ノードである必要はありません。ただし簡単にするために、まずマスター・ノードを設定しましょう。
- ClusterKnoppix CDをドライブに入れ、CDから起動します。
-
boot:プロンプトでEnterを押します。
ClusterKnoppixがハードウェアを検出して起動するのを待ちます。デフォルトのKDEで起動します。
- KDEに入ったらrootシェルを開きます。これはタスク・バーの2番目のアイテムの中にあります。
- ここでローカル・ネットワーク・インターフェースを設定する必要があります。最初にネットワーク・カードeth0に
ifconfig eth0 192.168.1.10でIPアドレスを設定します。
- 次に
route add -net 0.0.0.0 gw 192.168.1.1で、ゲートウェイまでのルートを指定します。
これでネットワークが設定できました。
- 次に
tyd -f initでopenMosixシステムを起動します。
- 最後に
tydによって、このノードがクラスターのマスターであることを宣言します。
次にドローン・ノードを初期化します。
ドローン・ノードを初期化する
ドローンの設定も、マスターの設定とあまり違いません。上記でマスター・ノードに対して行った最初の3ステップを繰り返します。先の値(ifconfig eth0 192.168.1.20とroute add -net 0.0.0.0 gw 192.168.1.1)で、ドローンのネットワーク・カードを自分で設定します。
- openMosixシステムを初期化します。前回と同じで
tyd -f initを使います。
- 最後に
tyd -m 192.168.1.10で、このノードをクラスターに挿入します。
これで終わりです。これで皆さんのクラスターが動作するようになりました。
追跡ツールに慣れる
クラスター化した場合では、クラスターの状態をチェックする必要があります。ClusterKnoppixではクラスターの状態を追跡するためのツールとして、次のようなものが用意されています。
openMosixview
rootシェルでこのユーティリティーの名前(openMosixview)をタイプして起動します。openMosixviewはクラスター中のノード数を検出して、マニアックなインターフェースで表示します。ちょっと見るだけで、クラスターの効率や負荷状況、クラスターで使用可能なメモリーや使用中のメモリーの割合、などが分かります。この時点ではまだクラスターはほとんど使われていないので、動作状況といっても、ほとんど何も見えません。少し時間をかけて、このアプリケーションに慣れてください。
openMosixmigmon
このアプリケーションは、マスター・ノードからドローンに移行されたプロセスを表示します。中心にある円を囲んでいる四角の上にマウスを動かすと、プロセスの名前とIDが表示されます。ある特定のプロセスをマスターから「移行」するには、四角をドラッグして小さい方の円(ドローン)の中にドロップします。
OpenMosixAnalyzer
この単純なアプリケーションは、各ノードが初期化されてクラスターが立ち上がるまでの各ノードの負荷状態と、クラスターの負荷状態をレポートします。
mosmon
コマンドライン・ベースのmosmonモニターは、クラスターの負荷状態や使用可能なメモリー、使用中のメモリーなどをリアルタイムで表示します。ビューの調整方法を理解するには、mosmonのmanページを読んでください。
mtop
これはtopに慣れている人にとって興味あるツールです。topはコンピューター上で実行する、あらゆるプロセスを追跡します。topの一変種として、クラスターに対応したmtopもtopと同様、あらゆるプロセスを表示するのですが、さらに追加して、プロセスを実行しているノードに関する情報も表示するのです。
クラスターをテストする
これでクラスターが動作するようになったので、過負荷を与えてみましょう。そのためには、CHAOSディストリビューションの善良な人達が書いたスクリプトを借用します。
リスト1. クラスター・テストのスクリプト
// testapp.c Script for testing load-balancing clusters
#include <stdio.h>
int main() {
unsigned int o = 0;
unsigned int i = 0;
unsigned int max = 255 * 255 * 255 * 128;
// daemonize code (flogged from thttpd)
switch ( fork() ) {
case 0:
break;
case -1:
// syslog( 1, "fork - %m" );
exit( 1 );
default:
exit( 0 );
}
// incrementing counters is like walking to the moon
// its slow, and if you don't stop, you'll crash.
while (o < max) {
o++;
i = 0;
while (i < max) {
i++;
}
}
return 0;
}
|
任意のワープロ・ソフトを開いてこのスクリプトをコピーし、testapp.cとして保存します。そしてこのスクリプトを、クラスター中の全ノードが利用できるようにします。
このスクリプトを実行するには、全ノードで次のコマンドを実行します。まず、このCプログラムをコンパイルします。
gcc testapp.c -o testapp
次に、./testappを実行します。
このスクリプトを全ノードで、少なくとも一度実行します。私は両方のノードで3度実行しました。
各インスタンスを実行した後、上記のアプリケーションに切り換えます。活動が活発になっていることに注目して下さい。皆さんの特別版クラスターが、ノード間でお互いにプロセスを移行し合うのを見て楽しんでください。負荷が分散されていることが分かるでしょう。
これは何をしたことになるのでしょう?
全てが動作するようになったので、これまで何をしたのかを復習しましょう。
まず各マシンのネットワーク・カードに対して個々にIPアドレスを設定しました。次に両者が通信し合うための共通のルートを設定しました。そして最後にtydコマンドを使ってopenMosixシステムを初期化しました(ClusterKnoppixはCHAOSプロジェクトから(タイディと発音する)tydを借用しています)。
何もスイッチをつけずにtydを実行するのは、クラスター中の最初のノードのみです。このノードがマスター・ノードである必要はありません。その他のノードは全て、-mスイッチの後にIPアドレスを付けてtydを実行します。
2番目のノードを初期化している間は、そのIPアドレスは最初のノードのIPアドレスである必要があります。ただし3番目のノードを初期化する時には、ノード1とノード2の、2つのIPアドレスのどちらかを選択することができます。
ではこの後は?
両ノードでClusterKnoppixを使ってクラスターを構成する代わりに、慣れてきたら異種のクラスターを構成することもできます。そうしたクラスターでは、マスター・ノードは別として、スレーブでGUIを実行する必要がありません。openMosixに対応し、なおかつLinuxカーネルと同じくらい小さなディストリビューションを実行することもできます。CHAOSはドローン・ノードで実行するディストリビューションの選択肢として、恐らく一番人気のあるものです。CHAOSはメモリー要求も小さいのでクラスターに必要なメモリーも少なくて済み、しかもセキュアーで信頼性が高く、また高速です。
さあ、何を待っているのですか。皆さん自慢のクラスターをぜひ見せてください!
参考文献
著者について  | |  | Mayank Sharmaは過去5年間、主にフリー・ソフトやオープン・ソフトウェアに関する技術記事を書いてきています。またアジアでの先端的なF LOSS月刊誌、LINUX For Youの立ち上げに(副編集者として)貢献し、現在はローカライズに特化したWebベースの資料公開のとりまとめや教育、F LOSSへの移行などに多忙な日々を送っています。Mayankは執筆活動の他にハッキングにも熱心で、最近ではUtkarshローカライズ・プロジェクト用のインストーラーに寄与しました。現在もコンピューター・サイエンスの学位を取るべく苦闘しながら、フォーミュラ・ワンのカー・レースにも熱中しています。 |
記事の評価
|