SSDに関する検証 その10

投稿日: 2007年8月29日

<緊急特集!!SSDに関する検証 その10>
ペンネーム: ミラニスタ

磁気ディスクの代わりに半導体メモリにデータを記録するストレージ装置
SSD (Solid State Disk) の検証を行っています。

検証製品(富士ゼロックス株式会社様製 GigaExpress)の紹介URL⇒
http://www.fujixerox.co.jp/product/gigaexpress/

▼ 前回のおさらい

前回は、読み込み処理(Select)における、磁気ディスクと SSD の比較を
考察しました。

Insert のようにディスクの性能差が顕著に現れる場合とは異なり、Select
においては、両者の差はあまり明確ではありませんでした。
すなわち、ディスクビジー率では明らかに SSD は余裕があるにもかかわら
ず、ユーザ CPU 使用率がほとんど変わりませんでした。
そもそも、インデックスを適切に使用したユニーク・スキャンは I/O 負荷
がそれほど高くないので、I/O ボトルネックとなる可能性は比較的低いと言え
ます。
今回、なるべく I/O ボトルネックに近い状況を作り出すために 200個の小
規模テーブルに対して、同時並行で全件検索を実施しました。
他にも、10GBくらいの巨大なテーブルに対する全件検索等いろいろ試してみ
たのですが、いずれも「DB キャッシュを介した」読み込みのため、ディスク
性能の明確な差を感じることは出来ませんでした。

▼ 冗長化に挑戦!!

今まで SSD の、特にデータベース用途としての性能面でのメリットを確認
してきました。しかし、万一の電源瞬断や機器故障でデータが失われてしまう
ということからミッション・クリティカルな場面での使用はどうしても不安が
残るというご意見をいただいています。

電源瞬断に関しては「連載 その7 メーカーへの質問 Q4. 」でご紹介したよ
うに、 UPS(無停電電源)からの給電および退避用磁気ディスクの組み合わせ
によって備えることができると考えます。

ところが、予期せぬ機器そのものの故障に対しては、やはり冗長化を検討し
なくてはなりません。

そこで、今回から OS や Oracle の持つ冗長化機能を利用して、SSD が実運
用に耐えられるどうか、課題があるとすればどんな点に注意すべきかを検証し
てみたいと思います。

株式会社シマンテック様の VERITAS Storage Foundation のような有償製品
でストレージの冗長化を行うことも可能ですが、本検証では Linux のソフト
ウェア RAID である「mdadm」というツールを使ってミラーリングを行わせて
みます。(mdadm の詳細は man page 等で確認してください。)

▼ ミラーリングの手順

1. パーティションの作成

fdisk コマンドによるパーティションの作成は
「連載 その1 ▼ セットアップ」を参照してください。
ここでは、16GB の SSD 2台に、それぞれ1つのパーティションを作成しま
す。

デバイス名: /dev/sdb, /dev/sdc

  # fdisk -l
  
  .............................................................
  
  Disk /dev/sdb: 16.9 GB, 16911433728 bytes
  64 heads, 32 sectors/track, 16128 cylinders
  Units = シリンダ数 of 2048 * 512 = 1048576 bytes
  
   デバイス Boot      Start         End      Blocks   Id  System
  /dev/sdb1               1       16128    16515056   83  Linux
  
  Disk /dev/sdc: 16.9 GB, 16911433728 bytes
  64 heads, 32 sectors/track, 16128 cylinders
  Units = シリンダ数 of 2048 * 512 = 1048576 bytes
  
   デバイス Boot      Start         End      Blocks   Id  System
  /dev/sdc1               1       16128    16515056   83  Linux

2. 新規アレイの作成

複数のディスクを束ねて1つのディスクに見せたものを「(ディスク)アレ
イ」と呼びます。

新規にアレイを作成するためには、create オプションを使います。

mdadm –create /dev/md0 –level=raid1 –raid-devices=2 /dev/sdb1 /dev/sdc1

このコマンドの意味するところは…

デバイス名「/dev/md0」という名前でアレイを新規に作成する。RAIDレベル
は「1」(ミラーリング)、アレイ内のアクティブなデバイスの数は「2」で
デバイス名はそれぞれ /dev/sdb1 と /dev/sdc1

ということになります。

  # mdadm --create /dev/md0 --level=raid1 --raid-devices=2 /dev/sdb1 /dev/sdc1
  mdadm: /dev/sdc1 appears to contain an ext2fs file system
      size=16514944K  mtime=Mon Aug XX 13:56:09 2007
  mdadm: /dev/sdc1 appears to be part of a raid array:
      level=1 devices=2 ctime=Mon Aug XX 13:54:43 2007
  Continue creating array? yes    ←入力
  mdadm: array /dev/md0 started.
  
  確認(詳細情報の表示)
  
  # mdadm --detail --scan
  ARRAY /dev/md0 level=raid1 num-devices=2 UUID=be839689:5472c1bf:8b34b455:4d387668
     devices=/dev/sdb1,/dev/sdc1

  また、psコマンドで確認すると何やら怪しげなデーモンが動いているのもわかります。

  # ps -ef | grep md0 | grep -v grep
  root     13823     1  0 15:49 ?        00:00:07 [md0_raid1]

3. パーティションのフォーマット

通常のディスクと同じようにフォーマットを実施します。

  # /sbin/mkfs ext3 -c /dev/md0
  mke2fs 1.35 (28-Feb-2004)
  Filesystem label=
  OS type: Linux
  Block size=4096 (log=2)
  Fragment size=4096 (log=2)
  2064384 inodes, 4128736 blocks
  206436 blocks (5.00%) reserved for the super user
  First data block=0
  Maximum filesystem blocks=4227858432
  126 block groups
  32768 blocks per group, 32768 fragments per group
  16384 inodes per group
  ......................................
  
  Checking for bad blocks (read-only test): done
  Writing inode tables: done
  Writing superblocks and filesystem accounting information: done
  
  ......................................


4. パーティションのマウント

  # mount /dev/md0 .../ssd/raid1


5. 最後に確認

  # df -k
  Filesystem  1K-ブロック    使用   使用可 使用% マウント位置
  /dev/md0     16255800     44332  15385724   1% .../ssd/raid1


▼ 参考:ベンチマークテスト

  それでは、hdparm でアレイの基本性能を確認しておきましょう。

  # hdparm -Tt /dev/md0
  
  /dev/md0:
   .....................................................................
   Timing buffered disk reads:  1022 MB in  3.00 seconds = 340.15 MB/sec
                                                           ^^^^^^
  比較:同一サーバ上の磁気ディスク(RAID5)

  # hdparm -Tt /dev/sda

  /dev/sda:
   .....................................................................
   Timing buffered disk reads:  352 MB in  3.00 seconds = 117.31 MB/sec

ソフトウェアRAID でミラーリングしても、性能は十分確保されています。

準備に手間取ったので、今回はここまで!

次回は、今回作成した領域にファイルを置き、片方の SSD の電源を落とし
て障害をシミュレートしてみます。

イタリアのセリエA開幕しました!A.C.ミランは初戦白星でした!!

皆既月食は雲で見えない 茅ヶ崎にて