Raccoon Tech Blog [株式会社ラクーン 技術戦略部ブログ]

株式会社ラクーン 技術戦略部より、tipsやノウハウなど技術的な話題を発信いたします。

2012年08月

格安サーバで作る ESXi+NFS(ZFS) の仮想マシン環境(2)

インフラエンジニアのETOです。  

暑い日が続きますが皆様いかがお過ごしでしょうか。
最近、週に2回ほど熱いお風呂につかるようにしたのですが、寝付きがとても良くなりました。
肩こりも取れますので、オフィスの冷房で肩こりが酷い方にもお勧めです!


さて、早速ですが前回の「格安サーバで作る ESXi+NFS(ZFS) の仮想マシン環境(1)」の続きです。今回は実際の構築に入っていきましょう。
まずは「NFS外部ストレージサーバ」からセットアップしていきます。

・今回使うもの
  ・NFS外部ストレージサーバ
 ハード: HP ML110G7
     メモリ 8GB
     USBメモリ 8GB
     HDD 2TB*4
 
 OS: OpenIndiana 151a (for servers)
      "oi-dev-151a-text-x86.iso"を焼いた起動メディア一枚。
※今回はZFSを使うのでOpenSolaris系OSの正統後継である「OpenIndiana」をインストールしたいと思います。最近ではFreeBSDやLinuxでもZFSを使えますが、やはり安定性を考えると実装元であるSolaris系OSで使うべきだと思います。

・構成図
今回は右側の「fsrv01」をセットアップします。
kousei



・前準備
ML110G7の内部USBポートに起動用のUSBメモリをさします。
この機種では内部SDカードスロットも付いたので、そちらでチャレンジしてみても面白いかもしれません。

前面の4つのスロットにHDDを搭載します。
今回使うノンホットプラグモデルのML110G7に4つ並んだSATAスロットのうち、左側の2つは6.0Gbpsですが右側の2つは3.0Gbpsです。SSDを搭載する場合はボトルネックにならないよう左側に搭載しましょう。
※余談ですが、2.5インチのSSDをこのスロットにきれいに収めるには2.5→3.5変換ケースのSilverStone「SST-SDP09」が大変おすすめです。余計なチップは搭載されておらず、延長コネクタのような構造のため相性問題など出ません。

BIOSの設定を調整します。
起動時に、F9でBIOS設定画面へ。
 [Advanced Options]→[SATA Controller Options]→[Embedded SATA Configuration]
  "Enable SATA AHCI Support"へ変更
 [Advanced Options]→[SATA Controller Options]→[Drive Write Cache]
  "Enable"へ変更 (信頼性優先ならDisableで)
↓このあたりです
ML110G7_BIOS





・セットアップ手順
OpenIndiana 151a (for servers) をインストールしていきます。
サーバ用として配布されている「oi-dev-151a-text-x86.iso」でCDかDVDを作成して起動しましょう。

以降注意が必要なところのみ抜粋します。 
TO select the Keyboard layout, enter a number [default 47]: 23
※23番日本語キーボードを選択。

TO select the language you wish to use, enter a number [default is 7]: 7
※ここはそのまま7で。テキスト版なので日本語は出ません。

Disks
※内部に挿したUSBを選択。

Fdisk Partitions: ~
※「Use the whole disk」を選択。

Network
※[Computer Name:]に「fsrv01」を入力。
※カーソルを下段の「None」にあわせる。
あとは画面の指示に従ってインストールしてください。


インストール終了後、再起動後にやるべきことは、
  1. rpool(システム領域)のatimeをoffにする
  2. ipとネットワークの設定
  3. ストレージプールの作成とNFS設定
  4. swap領域をrpoolからdatapoolに移す 
になります。
どんどんいきましょう。


1. rpool(システム領域)のatimeをoffにする
まずシステム領域のatime(access time)を無効化しましょう。
atimeの無効化には賛否両論ありますが、利用目的がNFSオンリーであることとUSBメモリだと細かいディスクI/Oが気になるので、思い切ってoffにします。

root@fsrv01:~# zfs set atime=off rpool


2. ipとネットワークの設定
構成図の通りに設定していきます。必要な方はご自分の環境に合わせて変更してください。
今回は必要最低限の設定しかしませんので、詳しく勉強したい方はORACLE社のドキュメント「ネットワークスタックの概要」をご覧ください。
root@fsrv01:~# echo '192.168.0.254' > /etc/defaultrouter
root@fsrv01:~# ipadm create-addr -T static -a 192.168.0.100/24 e1000g0/v4
root@fsrv01:~# ipadm create-addr -T static -a 10.255.255.100/24 e1000g1/v4  
上から、デフォルトゲートウェイの設定、表ネットワークのip設定、 NFSネットワークのip設定、になります。
ここで設定反映のため一度再起動してください。


3. ストレージプールの作成とNFS設定
zpoolコマンドを使ってzfsストレージプールを作成していきます。
まず、formatコマンドを使ってHDDの認識状況を確認しましょう。
root@fsrv01:~# format
Searching for disks...done


AVAILABLE DISK SELECTIONS:
       0. c4t0d0
          /pci@0,0/pci103c,330d@1f,2/disk@0,0
       1. c4t1d0
          /pci@0,0/pci103c,330d@1f,2/disk@1,0
       2. c4t2d0
          /pci@0,0/pci103c,330d@1f,2/disk@2,0
       3. c4t3d0
          /pci@0,0/pci103c,330d@1f,2/disk@3,0
Specify disk (enter its number): ^D

しっかり認識されていますね。CTRL+Dで抜けて、続けて以下のコマンドを実行します。

root@fsrv01:~# zpool create datapool mirror c4t0d0 c4t1d0 mirror c4t2d0 c4t3d0

これで、「datapool」という名前のストレージプールが、raid10で作成されます。なんとお手軽なのでしょう。
zpool statusコマンドで確認してみましょう。
root@fsrv01:~# zpool status datapool
  pool: datapool
 state: ONLINE
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        datapool   ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c4t0d0  ONLINE       0     0     0
            c4t1d0  ONLINE       0     0     0
          mirror-1  ONLINE       0     0     0
            c4t2d0  ONLINE       0     0     0
            c4t3d0  ONLINE       0     0     0
mirror-0とmirror-1がそれぞれRAID1、それをストライプしてdatapoolが構成されているのがわかります。
また作成時に自動的に/datapoolとしてマウントされていますので、今回はこのまま使います。 


続けてNFS用のデータセットの作成と、NFSエクスポートを一気にやってしまいます。

root@fsrv01:~# zfs create datapool/nfs01
root@fsrv01:~# zfs set sharenfs=rw,root=@10.255.255.0/24 datapool/nfs01

たった2行です。上がデータセットの作成、下がNFSのエクスポートの設定になります。
エクスポート設定について補足すると、"root="はLinuxでいうところの"no_root_squash"、"@10.255.255.0/24"はこのネットワークに対して許可を出すという意味合いです。


4. swap領域をrpoolからdatapoolに移す
USBメモリにインストールしたので、swap領域もUSBメモリ上の「rpool/swap」にできてしまっています。
立派なストレージプール「datapool」ができましたのでこちらに移してしまいましょう。
root@fsrv01:~# zfs create -V 8G -b 4k datapool/swap
root@fsrv01:~# swap -a /dev/zvol/dsk/datapool/swap

root@fsrv01:~# swap -lh
swapfile             dev    swaplo   blocks     free
/dev/zvol/dsk/rpool/swap 179,2         8  2.0G  2.0G
/dev/zvol/dsk/datapool/swap 179,3         8  8.0G  8.0G    ←追加された方
rpoolのswap領域をswapから外して消します。
root@fsrv01:~# swap -d /dev/zvol/dsk/rpool/swap
root@fsrv01:~# zfs destroy rpool/swap

root@fsrv01:~# swap -lh
swapfile             dev    swaplo   blocks     free
/dev/zvol/dsk/datapool/swap 179,3         8  8.0G  8.0G


おまけ
せっかくなのでbonnie++でベンチ取ってみました。
root@fsrv01:~# bonnie++ -d /datapool/ -n 128  -u 0
~中略~
Version 1.03c       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
fsrv01           8G 92723  98 197266  21 115933  20 100931  99 327860  20  1439   3
                    ------Sequential Create------ --------Random Create--------
                    -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                128 20072  93 182108  99 26543  96 22806  98 206876  84 24443  97
シーケンシャルでwrite 200MB/s, read 300MB/s程度出ているので、NFSで利用することを考えると十分な性能ですね。


どうでしょうか、非常に簡単にNFSサーバが構築できたかと思います。
NFS以外にもSMB共有の設定なども簡単にできますので、興味のある方はORACLE社のドキュメント「ZFSファイルシステム」を御覧ください。


さて、次回はESXiのストレージとしてNFSを登録、その上に仮想マシンをつくってみます。
「格安サーバで作る ESXi+NFS(ZFS) の仮想マシン環境(3)」へ続きます。
言語を検出 » Japanese

格安サーバで作る ESXi+NFS(ZFS) の仮想マシン環境(1)

先日、早めの夏休みで青島(チンタオ)にビールを飲みに行って来ましたインフラエンジニアのETOです。
弊社は旅行好きの人が多いため、旅行休暇を取りやすいので助かっています。
旅行好きな方は是非弊社で一緒に働きましょう。ご検討ください。


さて、長期間休みを取る際にいつも気になるのは、自分がいない間のサーバ故障の発生です。
当然ながら冗長化ができている公開系に比べると、どうしても対策が後回しになりがちな開発系や、
ちょっとした社内サーバがこういう時に限って壊れたりするものです。
 
「あー壊れちゃいましたね」では済まないインフラエンジニアとしてはいつも余裕を持ったリソースを確保しておきたいものですが、なかなか(主にコスト絡みで)そうはいきません。
 
そこで同じような悩みを抱える諸兄におすすめしたいのが今回のお題、
「格安サーバで作る ESXi+NFS の仮想マシン環境」です。


・目指すところ
安く手軽に"実用的"な仮想サーバ環境を手に入れるのが目的です。
実サーバのバックアップや、故障時の緊急避難先などに大活躍!当然本運用も可能です。
ZFSベースのNFS外部ストレージも自作することでデータの保全性も同時に確保してしまいましょう。

・用意するもの
各サーバ機として、HP社のML110G7を2台使います。
格安サーバとして2万円以下で手に入るコストパフォーマンス抜群のサーバ機です。
これにメモリとHDDを追加します。余っているものがあればそれを流用しても構わないと思います。

今回の具体的なハード&ソフトウェア構成は以下になります。
 ・仮想マシンホストサーバ
  OS:ESXi5.0U1
  ハード: HP ML110G7 
      メモリ 16GB
      USBメモリ起動 8GB
      HDD ナシ ZEROスピンドル!

 ・NFS外部ストレージサーバ
  OS:openindiana 151a
  ハード: HP ML110G7
      メモリ 8GB
      USBメモリ起動 8GB
      HDD 2TB*4

詳細は伏せますが、全部あわせても10万円かからない金額で調達しました。
現在はもっと安いかもしれません。


・構成図 
このような構成で構築します。
kousei





突然ですがQ&A。

Q:なぜKVMではなくESXiなの?
A:無料で使えるGUIの管理ツールが揃っていて楽だからです!
 
これだけだと色々と反論を受けそうですので補足。
やはりVMware社の企業として統一されたポリシーで作られている以下のツール群の使い勝手が良いため、KVMなどと比べるとアドバンテージがあると思っています。
  • VMware vSphere Client(管理コンソール)
  • VMware vCenter Converter Standalone(P2Vツール)


Q:なぜローカルディスクにしないの?
A:ESXiで"実用になる"RAIDカードが高いからです。

ESXiではソフトウェアRAIDや廉価なオンボード系のRAIDが使えません。 また、RAIDカードは原則的にデータ保護のためにHDDのキャッシュを無効化するため、 キャッシュメモリ未搭載の安いRAIDカードを使うととても遅くて実用に耐えません。
※この点においてはLinuxで使えるRAID構成をそのままストレージとして使えるKVMにアドバンテージがあるのですがそれはまた別の話。

いくらお手軽環境 とはいえ「HDDが壊れたらデータが飛びました」ではお話にならないのは言うまでもありません。
しかしご安心を。ESXiではNFSやiSCSIを利用することで、ネットワーク越しの外部ストレージに仮想マシンイメージを置くことが可能になっていますので、今回はZFSベースのNFS外部ストレージを作り、最低限+αくらいのデータの保全性を確保したいと思います。 


Q:ZFSってなに?
A:主にSolarisやFreeBSDで使える次世代ファイルシステムです。

旧Sun社(Oracle社に買収されました)により開発された次世代ファイルシステムです。様々な仕組みで信頼性と性能を向上させているため、高価なストレージシステムを買わなくても耐障害性の高い高速なストレージ環境を手に入れることができます。
今回はZFSのソフトウェアRAIDでNFS外部ストレージを構築します。ZFSについて詳しく知りたい方はOracle社のドキュメントをご覧ください。 


Q:なぜiSCSIじゃなくてNFSなの?
A:取り回しが楽だからです。

「今時NFSはないだろう」とか「ESXiなら普通はiSCSIでしょう」とかいう声が聞こえてきますが、今回は性能を求めるわけではないので多少のオーバーヘッドは無視してNFSを選択します。
皆さんご存知の通り、NFSは取り回しが楽ちんで素敵です。偉い人にはそれがわからんのです。


諸々ご納得いただけたでしょうか。
さて、次回から実際の構築に入って行きたいと思います。
言語を検出 » Japanese

記事検索