RAID(RAID1)で高可用性実現

LINEで送る
Pocket

同じ容量、型番のHDDを2台以上手に入れたのであれば、大事なデータを保護する為に RAID を構成したいものです。RAID は、データを複数のディスクに保存する事により、ディスク故障によるデータの破損を防ぎ、
冗長性、耐久性を高める技術の事をいい、RAIDの種類を組み合わせることにより沢山のやり方が存在しますが、おおまかに RAID 0〜6の6種類のやり方が存在します。

また RAID には、ハードウェアで RAID 機能を実現するハードウェア RAID とソフトウェアで RAID 機能を実現するソフトウェア RAID という2つのやり方があります。前者は、RAID カードなど専用ハードウェアを用意する必要がありますが、後者は、HDD が2台以上あるなら、それ以上の機材を用意する事なく Linux の機能を使ってソフトウェア的に実現させる事が出来ます。ソフトウェア RAID は、ハードウェア RAID に比べソフトウェアに処理を行わせる為 CPU に負荷が発生し、ハードウェア RAID より低速であると言われていますが、安価に行えるところが魅力です。

本稿では、もっとも利用されていて、簡単に構築できる RAID1 をソフトウェア RAID で構築する方法を紹介します。RAID1 は、複数台のHDDに、同時に同じ内容を書き込むため、二重化(ミラーリング)と呼ばれています。
同時に2台のHDDが壊れない限りデータが消失する事はありませんが、保存できるデータ量は1/2になります。

          RAID1

   データのRead/Write
           |
       ----------
      |          |
      |          |
    ------     ------
   |Data 1|   |Data 1|
    ------     ------
   |Data 2|   |Data 2|
    ------     ------
   |Data 3|   |Data 3|
    ------     ------
   |Data 4|   |Data 4|
    ------     ------
   |Data 5|   |Data 5|
    ------     ------
   /dev/sdb1   /dev/sdc1

RAID0 耐故障性の無いディスクアレイ
RAID1 二重化
RAID2 ビット単位での専用誤り訂正符号ドライブ (
RAID3 ビット/バイト単位での専用パリティドライブ
RAID4 ブロック単位での専用パリティドライブ
RAID5 ブロック単位でのパリティ分散記録
RAID6 ブロック単位・複数パリティ分散記録

今回は、/dev/sda に OS がインストールされているシステムに、2台のHDDを増設して/var/www/html 配下のデータを RAID 化する方法を紹介します。

まず、最初に /dev/sdb に新規のパーティションを作成します。

# fdisk /dev/sdb
          :
コマンド (m でヘルプ): n                                <- n   新しいパーティションを追加
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p                                   <- p  プライマリにパーティションを作成
パーティション番号 (1-4, default 1): 1                  <- 1  パーティション番号は1
最初 sector (2048-1953525167, 初期値 2048):             <- Enter 最初のセクターに設定
初期値 2048 を使います
Last sector, +sectors or +size{K,M,G} (2048-1953525167, 初期値 1953525167): <- Enter 最大サイズを割り当てる
初期値 1953525167 を使います
Partition 1 of type Linux and of size 931.5 GiB is set
コマンド (m でヘルプ): t                                <- t パーティションIDを変更
Selected partition 1
Hex code (type L to list all codes): L                  <- L パーティションID一覧を表示
          :
16  隠し FAT16      63  GNU HURD または af  HFS / HFS+      fb  VMware VMFS
17  隠し HPFS/NTFS  64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE 
18  AST SmartSleep  65  Novell Netware  b8  BSDI スワップ   fd  Linux raid 自動
1b  隠し W95 FAT32  70  DiskSecure Mult bb  隠し Boot Wizar fe  LANstep
1c  隠し W95 FAT32  75  PC/IX           be  Solaris ブート  ff  BBT
          :
Hex code (type L to list all codes): fd                  <- fd Linux raid 自動を選択
          :
コマンド (m でヘルプ): w                                 <- w 設定を保存して終了
パーティションテーブルは変更されました!

ioctl() を呼び出してパーティションテーブルを再読込みします。
ディスクを同期しています。

全く同じように /dev/sdc にパーティションを作成します。

# fdisk /dev/sdc

ソフトウェア RIAD ツール mdadm をインストールします。

# yum install mdadm

RAID デバイスを作成します。

                 デバイス名 RAIDレベル デバイス数   デバイス
# mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
Continue creating array? y                           <- y Enter
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

RAID の進行状態を確認します。 シンクが始まり、シンクに 45分かかる事が分かります。

# cat /proc/mdstat
Personalities : [raid1] 
md0 : active raid1 sdc1[1] sdb1[0]
      499975488 blocks super 1.2 [2/2] [UU]
      [>....................]  resync =  0.1% (914496/499975488) finish=45.4min speed=182899K/sec
      bitmap: 4/4 pages [16KB], 65536KB chunk

unused devices: <none>

RAID の詳細情報を表示します。

# mdadm --detail /dev/md0
dev/md0:
        Version : 1.2
  Creation Time : Thu Jan 14 07:32:34 2016
     Raid Level : raid1
     Array Size : 499975488 (476.81 GiB 511.97 GB)
  Used Dev Size : 499975488 (476.81 GiB 511.97 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

  Intent Bitmap : Internal

    Update Time : Thu Jan 14 07:33:04 2016
          State : clean, resyncing 
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

  Resync Status : 1% complete

           Name : localhost.localdomain:0  (local to host localhost.localdomain)
           UUID : cb9fc584:d4d0022b:6b34263d:f7146f7b
         Events : 6

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1

シンク中も RIAD デバイス /dev/md0 にデータを書き込むことが出来るので、ext4 でフォーマットします。

# mkfs.ext4 /dev/md0

/var/www/html/ に /dev/md0 をマウントします。

# mount /dev/md0 /var/www/html/
# df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/sda1         51G 1007M   50G    2% /
devtmpfs         5.7G     0  5.7G    0% /dev
tmpfs            5.7G     0  5.7G    0% /dev/shm
tmpfs            5.7G  8.6M  5.7G    1% /run
tmpfs            5.7G     0  5.7G    0% /sys/fs/cgroup
tmpfs            1.2G     0  1.2G    0% /run/user/1000
/dev/md0         470G   73M  446G    1% /var/www/html  <- /var/www/html 配下が RAID化されました。

シンクが完了すると以下のようなステータスになります。

# cat /proc/mdstat
Personalities : [raid1] 
md0 : active raid1 sdb1[0] sdc1[1]
      499975488 blocks super 1.2 [2/2] [UU]
      bitmap: 0/4 pages [0KB], 65536KB chunk

unused devices: <none>

構築してもディスクが壊れた場合、復旧の仕方を知らなければ役に立たないので、普及方法を確認しておきます。
mdadm コマンドで、/dev/sdc1 をエラーにします。

# mdadm --fail /dev/md0 /dev/sdc1

/dev/sdc に障害が発生した事が分かります。

# cat /proc/mdstat
Personalities : [raid1] 
md0 : active raid1 sdb1[0] sdc1[1](F)
      499975488 blocks super 1.2 [2/1] [U_]
      bitmap: 0/4 pages [0KB], 65536KB chunk

unused devices: <none>

/dev/sdc1 を /dev/md0 から着脱します。

# mdadm --remove  /dev/md0 /dev/sdc1
mdadm: hot removed /dev/sdc1 from /dev/md0

マシンをシャットダウンして、HDDの交換を行います。

# poweroff

先ほどと同様にパーティションを切り直します。

# fdisk /dev/sdc

/dev/sdc1 を /dev/md0 に追加すると再度シンクが始まり自動復旧されます。

# mdadm --add /dev/md0 /dev/sdc1

HDD は突然壊れます。もしもの時に慌てないように普及方法を試しておきましょう。

LINEで送る
Pocket

  • このエントリーをはてなブックマークに追加

コメントを残す

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください