目次


ClusterKnoppixで負荷分散クラスターを作る

KnoppixベースのLiveCDを使用し、スーパーコンピューターLinuxクラスターを構築する

Comments

スーパーコンピューターというのは、通常のコンピューターをはるかにしのぐ能力を持つコンピューターに対する、一般的な用語です。クラスターというのはコンピューターの集まりであり、何よりも、過剰負荷となったユニットから別のコンピューターに作業負荷を転送できる能力を持ったものです。この機能は負荷分散(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では、最初に起動するノードがマスター・ノードである必要はありません。ただし簡単にするために、まずマスター・ノードを設定しましょう。

  1. ClusterKnoppix CDをドライブに入れ、CDから起動します。
  2. boot:プロンプトでEnterを押します。

ClusterKnoppixがハードウェアを検出して起動するのを待ちます。デフォルトのKDEで起動します。

  1. KDEに入ったらrootシェルを開きます。これはタスク・バーの2番目のアイテムの中にあります。
  2. ここでローカル・ネットワーク・インターフェースを設定する必要があります。最初にネットワーク・カードeth0にifconfig eth0 192.168.1.10でIPアドレスを設定します。
  3. 次にroute add -net 0.0.0.0 gw 192.168.1.1で、ゲートウェイまでのルートを指定します。

これでネットワークが設定できました。

  1. 次にtyd -f initでopenMosixシステムを起動します。
  2. 最後にtydによって、このノードがクラスターのマスターであることを宣言します。

次にドローン・ノードを初期化します。

ドローン・ノードを初期化する

ドローンの設定も、マスターの設定とあまり違いません。上記でマスター・ノードに対して行った最初の3ステップを繰り返します。先の値(ifconfig eth0 192.168.1.20route add -net 0.0.0.0 gw 192.168.1.1)で、ドローンのネットワーク・カードを自分で設定します。

  1. openMosixシステムを初期化します。前回と同じでtyd -f initを使います。
  2. 最後に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はメモリー要求も小さいのでクラスターに必要なメモリーも少なくて済み、しかもセキュアーで信頼性が高く、また高速です。

さあ、何を待っているのですか。皆さん自慢のクラスターをぜひ見せてください!


ダウンロード可能なリソース


関連トピック

  • The openMosix Projectでは、このカーネル・エクステンションの詳細と更新情報を提供しています。
  • WikipediaにはLiveCDsに関する情報が豊富に用意されています。
  • developerWorksのLinuxゾーンにはLinux開発者用の資料が豊富に取り揃えられています。
  • Developer BookstoreのLinuxセクションではLinux関連の書籍が値引きして購入できますので、ご利用ください。

コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux
ArticleID=226934
ArticleTitle=ClusterKnoppixで負荷分散クラスターを作る
publish-date=12222004