とある日、会社の上司との会話の中で、ディスクレスサーバを構築させてもらえることになりました。
# それ、ディスクレスで作りたいです、と話し始めてみたら、あっさりYOU!やっちゃいなよ、ってなった。いつもありがとうございます。
ディスクレスサーバとは何か?
読んで字の如くですが、ローカルディスクを積まないサーバ(PC)のことです。とはいっても、OSを動かすには、その情報(データ)を展開する場所が必要になります。
# 普通のPCだと、ローカルディスクに全てインストールされていますよね。
というわけで、ディスクレスサーバといっても、どこかにデータを持たせる必要があって、外部ディスク(NAS, SANストレージ)にデータを持つパターンと、メモリ上に全てを展開するパターンがあります。
最近だとCDブートできるOSなんかもありますよね。あれもメモリ上に展開するパターンの一種です。
例えば、後者のオンメモリ上に全てのOSイメージを展開するパターンだと、機器の中で、最も故障しやすいと言われているディスクを無くせますので、故障率が下がりますし、オンメモリで全てを処理するので、パフォーマンスにも良い影響が出るはずです。
また、OSイメージを外部から各マシンに展開する仕組みが前提となるので、各マシンに対して必ずしもセットアップが必要としません。この辺はやり方によって様々だろうけど。
ただし、扱えるデータ量が限られるので、用途は限定されます。例えば、ロードバランサ(ソフトウェアレベル)やプロキシ、Webサーバなどでしょうか。
とはいっても、DBサーバなんかで全く使えないかというと、決してそうでもなくて、OSやミドルウェア関連はオンメモリにして、DBのデータ領域だけをディスクに割り当てたりすると、ディスクI/OをDBが独り占めできることとなり、これはこれで良さそうです。
必要なもの
今回は、Linuxでディスクレスサーバを作る前提で話を進めます。イメージとしては、ネットワークブート(PXEブート等)を行った後に、OSイメージをオンメモリ(RAMディスク上)に展開します。
というわけで、まず準備するのは、以下の条件を満たすディスクレスサーバ、
- ネットワークブートに対応したNIC
- (今回は、PXEブートと呼ばれるやり方でやりました)
- OSイメージを載せられるくらいのメモリ容量+稼動に必要なメモリ容量
- (最低でも256MBくらいはあったほうがいいかと。1GBもあればヨユー。)
- ローカルディスクは不要
- (別にあっても良い。使いどころはある。)
と、上記のディスクレスサーバ以外に、ネットワークブートを実現させるため以下の条件を満たすサーバ、
- DHCPサービスが稼動している
- ディスクレスサーバと通信するために、IPアドレスの割当と、下記のブートローダの場所を教える
- TFTPサービスが稼動している
- ブートローダを転送する
の計2台が必要となります。
ネットワークブートの仕組み(Linux)
文章で説明するのは、なかなか小面倒くさいので省略します。
気が向いたら、絵を描いて説明してみます。
具体的な作り方
長くなってきたので、近々続きを書こうと思います。というか、今試行錯誤しながら、作っている最中なんですけどねf(^^;
# やべ、書きながら、だんだん面倒くさくなってきたのが丸わかりやな、このエントリw
続きはコチラ(d:id:rx7:20080316:p1)。