これらのキーワードがハイライトされています:必読

Fedora10によるディスクレス・クラスターの構築記録

ハードウェア仕様

管理ノード

  • HDDを最低2個搭載可能(RAIDを構成するため)
  • ギガビットイーサも2個搭載(ルータとして運用するため)
  • ここではホスト名charles, プライベートIPは192.168.0.1

管理ノードはネットワーク越しに各計算ノードを起動する。さらに外部のネットワークとクラスター内のプライベートネットワークをつなぐルーターとして機能する。

さらに、ユーザーが各計算ノードでファイルに出力するデータは全て管理ノードにあるユーザーのホーム・ディレクトリに保存される。そのため、多くの計算ノードでファイルの書き込みが発生すると、管理ノードのホーム・ディレクトリへのアクセスは非常に混雑する。なので、管理ノードのホーム・ディレクトリの読み書き速度は高速である必要がある(→RAID0)。

  • マザーボード:P45T-A2
  • CPU : Core2Quad Q9550 2.83GHz 12M
  • メモリ : DDR2 800MHz 1G*4
  • 電源:MUS-500-TW total output 450W, total peak 500W
  • NIC:オンボード*1, Intel Pro/1000 GT Desktop Adaptor*1
  • グラフィック Geforce 9800GT
  • HDD SATA*6
  • 0902MDV-AD6000S-N

計算ノード

  • 管理ノードからネットブートにするためHDD、光学ドライブ、フロッピーディスクは必要ない
  • PXE(Preboot Execution Environment)によるネットブートに対応したネットワークインターフェースを搭載する
  • BIOSの設定でPXEによるネットワーク起動を有効にする
  • ここではホスト名はnode**、プライベートIPは192.168.0.1**
  • マザーボード:G45T-M2
  • CPU : Core2Quad Q9550 2.83GHz 12M
  • メモリ : DDR2 800MHz 1G*4
  • 電源:250W
  • NIC : オンボード
  • Mauseコンピュータ 0903LM-iS453X-N

ネットワーク

・ギガビットイーサネット対応のネットワークインターフェース、ハブ、ケーブルを用意する

  • NETGEAR Smart Switch GS748T

管理ノードのセットアップ

以下の記述は全てrootによって作業します。

OS

Fedora 10:http://fedoraproject.org/ja/index

クラスターの構築にはGUIツールを使うので、デスクトップ環境(GNOME)もインストールする。

OSの選定基準:維持管理が楽であること、パッケージの充実していること。シェアが大きく情報収集の容易なもの(できれば日本語で)。

参考までにGoogle Trendsの結果

Ubuntu
Debian系。デスクトップ版とサーバー版がある。デスクトップ版はヨーロッパを中心にかなりの速度で普及してきている。パッケージも豊富で、コミュニティも充実している。
Fedora
Red Hat Linuxを引き継ぎ、コミュニティベースで開発されている。実験的な要素が強くて更新が速く、最新のパッケージが使われる。
CentOS
Fedoraをベースに、企業のサーバ構築を主目的として安定させたRed Hat Enterprise Linuxの有償サポート無し版クローン。ってことはFedoraよりも手堅い感じなんだろうか?最新のハードウェアに対するドライバの提供が遅い。

 世界的な傾向ではUbuntuが普及してきている、日本でも普及しているが海外と比べると普及率は低い。現状(2009年3月現在)では、サーバ構築関係の日本語の書籍ではFedoraの方が多いようだ。Ubuntuはデスクトップ用途としての普及が中心なのかもしれない。OSの基本機能にはほぼ差がない。将来的にはUbuntuが主流になる可能性はあるが、現状の日本語書籍の豊富さと、これまでの河田研での運用経験を踏まえて、Fedora10を採用とした。

 結果的には、必要なパッケージはほとんどyumからインストールすることができます。また、RAIDの設定がOSインストーラから簡単に行なうことができるのはFedoraの利点であると思います。

RAIDの設定

FedoraではOSをインストールする際に設定することができる。複数台のハードディスクを1台のハードディスクとして運用する技術。 これによりハードディスクの故障への耐性や、ハードディスクへの読み書きの速度を向上させることができる。

性質の異なるいくつかのレベルがある。

レベル1(RAID1, ミラーリング)では、あらゆる操作に対して常に同じ内容を複数台のハードディスクに書き込むので、1台に物理的な故障が起こっても正常にシステムを起動することができる。ただし、例えば必要なファイルを間違えて削除してしまうなど、ハードディスク故障以外のミスなどについては対応できない。

レベル0 (RAID0, ストライピング)では、あるデータを分割して複数のハードディスクに書き込む/読み込むので、データの読み書きが高速化される。しかし、RAID0を構成するハードディスクのうち1台でも壊れたら、RAID0全体のデータを失うことになるため、ハードディスクの故障に対してはむしろ弱くなる。そのためバックアップは必須である。

耐障害性とアクセス速度の両方をあげるため、ミラーリングとストライピングを組み合わせてRAID1+0の構成にすることも出来る(ハードディスクが最低4台必要)。同様の目的でRAID5もあるがここでは言及しない。

我々の設計では、システム領域は2つのハードディスク (sda, sdb) でRAID1とし、ホーム・ディレクトリは出来るだけアクセス速度を稼ぐために3つのハードディスク(sdc, sdd, sde)によるRAID0とした。そのためホーム・ディレクトリは別のハードディスクに常にバックアップする。(後述)

  • RAID>RAIDパーティション作成
    sdaとsdbをそれぞれ3つのパーティションに分割する。sdc, sdd, sdeは各ハードディスクの全体を1パーティションとする。

    sda1 1024MB (プライマリパーティションにチェック)
    sda2 4096MB
    sda3 残り全部

    sdb1 1024MB (プライマリパーティションにチェック)
    sdb2 4096MB
    sdb3 残り全部

    sdc1 残り全部
    sdd1 残り全部
    sde1 残り全部
  • RAID>RAIDデバイスの作成

    sda1, sdb1にチェック、マウントポイント(/boot)、RAIDレベル1

    sda2, sdb2にチェック、ファイル・システム(swap)、RAIDレベル1

    sda3, sdb3にチェック、マウントポイント(/)、RAIDレベル1

    sdc, sdd, sdeにチェック、マウントポイント(/home)、RAIDレベル0

    これでハードディスクをフォーマットしインストールを進める。

インストール時にRAIDを構成するには
中古PC活用講座パート2【RAID構築編】
ソフトウェアRAID1(ミラーリング)設定方法 (Fedora 7) (Fedora,CentOS)

インストール直後の細々したこと

  • NetworkManagerサービスを無効にする
    chkconfig NetworkManager off
  • networkサービスを有効にする
    chkconfig network on
  • SELinuxは無効にする。
    /etc/sysconfig/selinuxを編集
    SELINUX=disabled

いったん再起動。これらをやっておかないと今後の設定がうまくいかないときがある。

ネットワークの設定

管理ノードは2つのネットワークインターフェース(eth0とeth1)を持っている(つまりLANケーブルを挿すところが2個ある)。 外のネットワークにつながるLANケーブルを挿したネットワークインターフェース(ここではeth0)にはグローバルIPを設定し、 計算機につながるLANケーブルを挿したネットワークインターフェース(eth1)にはプライベートIPを設定する。

設定にはsetupコマンドを使う。

#eth0の設定(ここは研究室の他のPCの設定と同じ)
IP 130.34.107.***
サブネットマスク 255.255.255.128
デフォルトゲートウェイ 130.34.107.129
コンピュータの起動時にデバイスを起動にチェック
#eth1の設定
IP 192.168.0.1
サブネットマスク 255.255.255.0
デフォルトゲートウェイ 設定しない
コンピュータの起動時にデバイスを起動にチェック
#ホスト名とDNSの設定
Hostname 管理ノードの名前
Primary DNS 130.34.106.3

これらの設定は以下のファイルに記述される

/etc/sysconfig/network
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts/ifcfg-eth1
/etc/resolv.conf

IPマスカレードの設定

ネットワークインターフェースカードを2台以上もつLinuxマシンはルータとして使用することができる。そのためには2つのネットワークインターフェース間でIPパケットの転送を許可する必要がある。

システム>管理>ファイアーウォー>マスカレーディング>eth0にチェック

これは下のコマンドラインでの設定と同等。

/proc/sys/net/ipv4/ip_forwardファイルに1を書き込む。(許可しない場合は0)

echo 1 > /proc/sys/net/ipv4/ip_forward

システムの起動時に自動的にルーティングを有効にするには、/etc/sysctl.conf の net.ipv4.ip_forward を1に変更する。

#/etc/sysctl.conf
# Controls IP packet forwarding
net.ipv4.ip_forward = 1
#/etc/sysconfig/iptablesに次の記述を追加
*nat
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT

ファイアーウォールの設定

プライベートネットワーク内では様々なサービスが働くので、プライベートネットワーク側のファイアーウォールは無効にする。プライベート側からは悪意のあるアクセスは行われないので、問題ないはず。

システム>ファイアーウォール>信頼したインターフェース>eth1にチェック

これは以下の設定と同等

#/etc/sysconfig/iptablesに次の記述を追加
-A INPUT -i eth1 -j ACCEPT

NISサーバーの設定

管理ノードでのユーザ情報(ユーザ名、パスワード、ログインシェルなど)を計算ノードでも共有する技術。

http://www.server-world.info/note?os=fedora10&p=nis

  • サーバ側
    • 必要なパッケージをインストール
      yum -y install ypserv
  • NISサーバーが管理ノードの起動時に立ち上がるように設定
    chkconfig ypserv on
  • NISドメインの命名
    ypdomainname NISドメイン名
  • /etc/sysconfig/network の最終行に以下を追加
    NISDOMAIN=NISドメイン名
  • NISで流すサービスを限定 /var/yp/Makefileを編集する
    (今回はまだデフォルトのまま)

    all:  passwd group hosts rpc services netid protocols mail \
            # netgrp shadow publickey networks ethers bootparams printcap \
            # amd.home auto.master auto.home auto.local passwd.adjunct \
            # timezone locale netmasks
  • プライベートネットワークに対してのみ情報を与える用に設定 /var/yp/securenetsを編集 (最初は /usr/share/doc/ypserv-2.19/securenets からコピーする)

    # Always allow access for localhost
    255.0.0.0       127.0.0.0
    
    # This line gives access to everybody. PLEASE ADJUST! 
    255.255.255.0   192.168.0.0 #このように書き直し
  • NIS restart
    service ypserv restart
  • NISデータベースの更新
    make -C /var/yp
    ※NISデータベースの更新は管理ノードにユーザーを追加するたびに行なう必要がある。
  • クライアント側(ここでは行なわない)
    • 必要なパッケージをインストール
      yum -y install yp-tools
      yum -y install ypbind

/etc/hostsの設定

ホスト名が適切に設定されていないと、後述するジョブ管理ソフトのPlatform Lavaが作動しない。

#管理ノード
192.168.0.1     charles

#計算ノード
192.168.0.101   node01 n1
192.168.0.102   node02 n2
192.168.0.103   node03 n3
以下略

ネットブートのための作業

PXE(ピクシー:Preboot Execution Environmentの略)による。

サーバマシンにOSイメージをおいておき、ネットワーク経由で各計算ノードをブートする方式。実際のアプリケーションの処理は計算ノードで行う。rootファイルシステムをNFS上に取れば計算ノードはハードディスク無しでよい。

NFSの他には、DHCP(コンピュータがネットワーク接続する際に必要な情報を自動的に割り当てるプロトコル)とTFTP(FTPに比べて単純な転送プロトコル。認証機能が無いためにユーザ名やパスワードを必要としない。ディスクレスマシンがブートする際、必要なファイルをネットワークから取得する際に利用される。)のサーバが必要。

参考リンク http://wikiwiki.jp/disklessfun/?disklessfc
      http://www.atmarkit.co.jp/flinux/rensai/linuxtips/a021pxediskless.html

  • クライアント起動のプロセス [#w55c39dd]
  1. BIOSが起動
  2. BIOSがNIC(Network Interface Card)のROM内のPXEを起動
  3. PXEがDHCPサーバからIPアドレスとTFTPサーバのアドレスを取得
  4. PXEがTFTPサーバからPXEブートローダー(pxelinux.0)を読み込んで起動
  5. PXEブートローダーがTFTPサーバからLinuxのカーネル(vmlinuz)と起動イメージ(initrd.img)を読み込んで起動
  6. LinuxカーネルがNFSサーバの公開ディレクトリを / としてマウント
  7. /bin/initを起動

DHCPサーバーの設定

各計算ノードに自動的にIPアドレスやなど様々なネットワーク関連の情報を伝えるサービス。

PXEブート用の設定項目もある。

また、計算ノード毎に決まったIPアドレスが与えられるように設定した。一定のIPでなくてもPXEブートは可能だが、計算ノード毎にCPUの種類などが違うときに、IPやそれに対応したホスト名で計算ノードを区別できるようにしておく必要がある。これは後ほどクラスターのジョブ管理をする際に重要。

インストール

yum install dhcp

設定ファイルを編集

emacs /etc/dhcpd.conf
#/etc/dhcpd.confの中身

#グローバルネットワーク側には何もしない
subnet 130.34.107.0 netmask 255.255.255.128 {
       not authoritative;
}


#DHCPを提供するサブネット側(つまり計算機のプライベートネットワーク)の設定
subnet 192.168.0.0 netmask 255.255.255.0 {
       option routers                           192.168.0.1;
       option subnet-mask                       255.255.255.0;
       option domain-name                       "biology.tohoku.ac.jp";
       option domain-name-servers               130.34.106.3;

       range 192.168.0.101 192.168.0.150;
       default-lease-time 21600;
       max-lease-time 43200;
       option nis-domain        "charles_nis";
       option nis-servers       192.168.0.1;


       #PXEブート用の設定
       next-server 192.168.0.1; #tftpサーバー
       filename "/pxelinux.0"; #tftp公開ディレクトリ(/tftpboot/linux-install)内のパスで記述(後述)
       
       host n1 {
            hardware ethernet 00:21:97:dd:fa:ca;
            fixed-address 192.168.0.101;
            option hostname "node01";
       }
       host n2 {
            hardware ethernet 00:21:97:dd:f6:85;
            fixed-address 192.168.0.102;
            option hostname "node02";
       }
       ..以下略
}

DHCPサービスを起動

service dhcpd start

(この時eth0, eth1が起動していないとdhcpdの起動に失敗する)

システム起動時にDHCPが立ち上がるように設定

chkconfig dhcpd on

NFSサーバーの設定

管理ノードのホームディレクトリをすべての計算ノードで共有する。管理ノードから各計算機ノードに手動でデータを移す必要がなくなる。 基本的にシミュレーションのプログラムが出力するファイルは計算機のHDDにはデータは書き込まれず、NFSサーバのHDDに書き込まれる。 そのためファイル出力を頻繁に行なうとそれが計算速度を律速するので注意が必要。
新しくて安全なversion 4を使う。

  • サーバ側の設定
  • 必要なパッケージのインストール
    yum install nfs-utils
    yum install nfs-utils-lib
    yum install nfswatch
    yum install rpcbind
  • システム起動時に必要なサービスがオンになるように
    chkconfig rpcbind on
    chkconfig nfs on
    chkconfig nfslock on
    chkconfig rpcidmapd on
    chkconfig rpcgssd on
  • 計算ノードに公開するためのディレクトリの準備
    mkdir /diskless
    mkdir /diskless/root
    mkdir /diskless/root/home
  • 計算ノードと共有するディレクトリ/diskless/root/home/に/homeをマウント
    mount --bind /home/ /diskless/root/home/
  • 管理ノード起動時に自動的にマウントされるように、/etc/rc.localに上のコマンド行を追加する。
    emacs /etc/rc.local
  • /etc/exports に共有するディレクトリを記述
    /diskless 192.168.0.0/24(rw,sync,nohide,fsid=0,no_root_squash)
    /diskless/root/home 192.168.0.0/24(rw,async,wdelay,nohide,no_root_squash)
    rootシステムとして公開するのは /diskless/rootではない、計算ノードがrootシステムをマウントする時に内部の/rootを勝手にマウントする。NFSv4 では、fsid=0 が指定されたディレクトリを疑似 root システムとしてエクスポートする。ホーム・ディレクトリはデータの書き込みを高速化するため async,wdelay オプションを追加した。
  • /etc/exports の設定を反映させる
    service nfs restart

計算ノード用システムの用意

参考:PXEでディスクレス・クライアントを実現するには
   ディスクレス化(Linux, FreeBSD等)

一旦他のPCにFedoraをインストールして計算ノード用にカスタマイズし、その後、計算ノード用PCの内容を管理ノードのディレクトリにコピーする。

計算ノード用PCの構成

  • ユーザーはrootのみ
  • ホスト名は空欄
  • IPは管理ノードからDHCPで取得
  • busybox-anacondaをインストール
    yum -y install busybox-anaconda
  • NISクライアントの設定
    #/etc/yp.conf
    domain charles_nis server 192.168.0.1
    ホスト名の解決はNISで行なう。
    #/etc/host.conf
    order nis,hosts,bind

    NISクライアントを起動する
    service ypbind start

    計算ノード起動時にNISクライアントを起動する
    chkconfig ypbind on
  • SELinuxは無効にする
    /etc/syscomfig/selinuxを編集
    SELINUX=disabled
  • ファイアウォールを無効にする
    chkconfig iptables off
  • 管理ノードからROOTがパスワード認証なしでログインできるようにする(ssh-keygen)

計算ノード起動用のカーネルとディスクイメージの作成

”管理ノードでの作業”

  • 計算ノードのファイルシステムを保存するディレクトリ(〜/rootとしておく)は、すでにNFSのところで作成済み。別に〜/rootでなくてもPXEブートは可能だが、後で用いるsystem-config-netbootの仕様上〜/rootとする必要がある。
/diskless/root
  • 管理ノードに計算ノード用PCのファイルシステムの内容をコピーする
    rsync -v -a -e ssh --exclude='/proc/*' --exclude='/sys/*' 計算ノード用PCのIP:/ /diskless/root
    計算ノード用PCのIPはifconfigコマンドで調べられる。
  • 計算ノードを保存したディレクトリをNFSで公開する
    /etc/exportsを編集
    /diskless 192.168.0.0/24(rw,sync,nohide,fsid=0,no_root_squash)
    /diskless/root/home 192.168.0.0/24(rw,async,wdelay,nohide,no_root_squash)

rootシステムとして公開するのは /diskless/rootではない、計算ノードがマウントする時に内部の/rootを勝手にマウントする。NFSv4 では、fsid=0 が指定されたディレクトリを疑似 root システムとしてエクスポートします。ホーム・ディレクトリはデータの書き込みを高速化するため async,wdelay オプションを追加した。

NSFを再起動

service nfs restart
  • コピーした計算ノード用ファイルシステムを元に、計算ノード起動用のカーネルとディスクイメージを作成

これにはGUIツールのsystem-config-netbootを用いる。

system-config-netbootのインストール

yum -y install system-config-netboot

system-config-netbootをインストールすると、tftp-server, xinetdなどが一緒にインストールされる。

system-config-netbootを起動。システム→管理→サーバー設定→ネットワーク起動サービス。あるいはコマンドラインでsystem-config-netbootでもいい。

初めてsystem-config-netbootを起動すると、

「初めてのDruid」ウィンドウ→「ディスクレス」

「ディスクレス環境の更新」ウィンドウ→「進む」

「ディスクレス環境の設定中」→「名前」を適当につける。ここでは「fedora10」→「進む」

「NSF情報を入力します」→「サーバー IPアドレス: 192.168.0.1」、「ディレクトリー: /diskless/」

「ディスクレスクライアント用のカーネルを選択します」→一番新しいバージョンを選択する

「ディスクレス環境設定の終了」→「適用」

次に「ネットワークインストールとディスクレス環境」ウィンドウが開く

「新規」→
「ホスト名またはIPアドレス/サブネット: 255.255.255.0(サブネットで指定の意)」
「オペレーティングシステム: fedora10」

終了すると/tftpboot/linux-install/というディレクトリが作成され、その中にPXEブートのためのざまざまなファイルが置かれている。

/tftpboot/linux-install/                           #tftpで公開されるディレクトリ
/tftpboot/linux-install/pxelinux.0                  #PXEブートローダー
/tftpboot/linux-install/fedora10/vmlinuz           #PXE起動用カーネル
/tftpboot/linux-install/fedora10/initrd.img        #PXE起動用ディスクイメージ
/tftpboot/linux-install/pxelinux.cfg/default       #PXEブートの設定ファイル
/tftpboot/linux-install/pxelinux.cfg/FFFFFF00      #同じくPXEブートの設定ファイル

PXEブートでは、tftpの公開ディレクトリ内のpxelinux.cfg/defaultというファイルが読み込まれるが、正しい設定がFFFFFF00に記述されているので、ここではまずdefaultをFFFFFF00と置き換えてしまう。

cp /tftpboot/linux-install/pxelinux.cfg/FFFFFF00 /tftpboot/linux-install/pxelinux.cfg/default
#置き換えた後の/tftpboot/linux-install/pxelinux.cfg/defaultの中身
(append以下は本当は1行です)
default fedora10

label fedora10
    kernel fedora10/vmlinuz
    append  initrd=fedora10/initrd.img 
            root=/dev/ram0 init=disklessrc
            NFSROOT=192.168.0.1:/diskless
            ramdisk_size=30176
            ETHERNET=eth0
            SNAPSHOT= 

TFTPサーバーの設定

管理ノードから計算ノードに起動ディスクイメージを転送するためのサービス。system-config-netbootとともにインストールされる。

単体でインストールする場合

yum install tftp-server

tftpサービスが管理ノードの起動時に有効になるようにし、tftpで公開されるディレクトリを変更する。

tftpサーバーの設定ファイルを書き換え

emacs /etc/xinetd.d/tftp
#/etc/xinetd.d/tftpの中身
service tftp
{
	disable			= no #yesをnoに書き換え
	socket_type		= dgram
	protocol			= udp
	wait				= yes
	user			= root
	server			= /usr/sbin/in.tftpd
	server_args		= -s /tftpboot/linux-install #このディレクトリが公開される
	per_source		= 11
	cps				= 100 2
	flags			= IPv4
}

xinetd(tftpサービスを起動するスーパーサービス)を再起動

service xinetd restart

ここまでで計算ノードはネットブートできるようになっているはず。

その他、ネットブート後の作業

クラスタリングのための作業

参考リンク


添付ファイル: filelava_using_1.0.pdf 496件 [詳細] filelava_admin_1.0.pdf 537件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-06-26 (土) 12:35:50 (2857d)