mdadmによるソフトウェアRAIDの習得:Linuxディスク冗長化の実践ガイド

Linux tutorial - IT technology blog
Linux tutorial - IT technology blog

なぜ単一のディスクを信頼すべきではないのか

本番サーバーを単一のドライブで運用するのは、スペアタイヤなしで車を運転するようなものです。故障するまでは問題ありませんが、ハードウェアの故障は「可能性」ではなく、いつかは「必ず起こる」ものです。

以前、データベースサーバーの500GB SSDが1台故障し、8時間にわたる必死のデータ復旧作業と、非常に不満げなクライアントへの対応に追われたことがあります。全データ紛失のリスクだけでなく、単一のディスクはパフォーマンスの大きなボトルネックになります。データベースとログが同じ物理I/Oを奪い合うと、レイテンシが2msから100ms以上に急上昇し、システム全体を失速させることがよくあります。

私のUbuntu 22.04 environmentでは、マルチディスクアレイに切り替えたことで、バックアップ時間が40%短縮されました。mdadmを使用して負荷を複数のディスクに分散させることで、冗長性による安心感と、スループットの大幅な向上という2つのメリットが得られます。このガイドでは、そのセットアップ方法を順を追って説明します。

適切なRAIDレベルの選択

RAID(Redundant Array of Independent Disks)は、物理ドライブを1つの論理ボリュームにグループ化します。Linuxでは、作成から復旧までを処理する堅牢なユーティリティであるmdadmを通じてこれを管理します。開始する前に、ハードウェアに基づいた戦略を選択する必要があります:

  • RAID 0 (ストライピング): データをディスク間に分散させます。読み書きの速度が2台のディスクで2倍になるなど非常に高速ですが、保護機能はゼロです。1台でもドライブが故障すると、すべてのデータが失われます。
  • RAID 1 (ミラーリング): 2台以上のディスクにデータの正確なコピーを作成します。OSパーティションのゴールドスタンダードです。1台のディスクが故障しても、稼働時間に影響はありません。
  • RAID 5 (パリティ付きストライピング): 最低3台のディスクが必要です。1台分のディスク容量をパリティデータに使用することで、ストレージ容量と安全性のバランスをとります。1台のドライブが故障してもデータを失うことはありません。
  • RAID 6 (ダブルパリティ): 最低4台のディスクが必要です。RAID 5に似ていますが、同時に2台のドライブが故障しても耐えられます。リビルド(再構築)時間が長くなる8TB以上の大容量ドライブを使用する大規模アレイに理想的です。

環境の準備

アレイを構築する前に、生のディスクを特定する必要があります。誤ってデータを消去しないよう、私は常にlsblkを使用してドライブ名とサイズを再確認しています。

mdadmツールのインストール

最小限の構成でインストールされたLinuxの多くには、RAID管理ユーティリティが含まれていません。パッケージマネージャーを使用して取得します:

# Ubuntu、Debian、Linux Mintの場合
sudo apt update && sudo apt install mdadm -y

# RHEL、AlmaLinux、Fedoraの場合
sudo dnf install mdadm -y

ディスクの特定

この例では、4つの20GB仮想ディスク(/dev/sdb/dev/sdc/dev/sdd/dev/sde)を使用します。以下のコマンドで自身の環境を確認してください:

lsblk

これらのディスクが空であることを確認してください。次のコマンドは、既存のパーティションテーブルとデータをすべて上書きします。

RAID 1アレイ(ミラーリング)の構築

RAID 1は、/var/lib/mysqlディレクトリをオンラインに保つような、高可用性のニーズに最適です。2台のディスクを使用して/dev/md0という名前のRAID 1アレイを作成するには:

sudo mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc

システムから確認を求められます。yを入力してEnterを押します。仮想のmdstatファイルを確認することで、ディスクの同期をリアルタイムで監視できます:

watch cat /proc/mdstat

RAID 5アレイ(容量 + 保護)の構築

RAID 5はファイルサーバーに適した選択肢です。セーフティネットを提供しつつ、最大限の有効容量を確保できます。1TBのドライブが3台ある場合、RAID 5構成では2TBの有効ストレージが得られます。

3台のディスクを使用して構築する場合:

sudo mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd

フォーマットと永続化

アレイは、ファイルシステムとマウントポイントが設定されるまで役に立ちません。電源断時の信頼性から、ほとんどのLinuxサーバーのワークロードにはext4をお勧めします。

1. ファイルシステムの作成

sudo mkfs.ext4 -F /dev/md0

2. 新しいストレージのマウント

sudo mkdir -p /mnt/raid_storage
sudo mount /dev/md0 /mnt/raid_storage

3. アレイの永続化

Linuxは、再起動後にRAIDディスクをどのように組み立てるかを記憶するために、特定の設定ファイルを必要とします。これがないと、アレイが別の名前で表示されたり、起動に失敗したりすることがあります。

sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
# RAID設定を含めるために初期RAMディスクを更新する
sudo update-initramfs -u

4. 自動マウントの設定

新しいアレイのUUIDを確認します:

sudo blkid /dev/md0

起動時に自動的にマウントされるよう、そのUUIDを/etc/fstabファイルにコピーします:

UUID=ここに一意のUUIDを入力 /mnt/raid_storage ext4 defaults 0 0

ディスク故障への対応方法

RAIDは、トラブルが発生した際の修正方法を知っていて初めて効果を発揮します。もし/dev/sdbが故障すると、アレイは「degraded(劣化)」状態になります。サーバーはオンラインのままですが、セーフティネットがない状態で稼働していることになります。修正するには、まずドライブを故障としてマークし、アレイから切り離します:

sudo mdadm /dev/md0 --fail /dev/sdb
sudo mdadm /dev/md0 --remove /dev/sdb

新しいドライブ(ここでは/dev/sdfとします)を接続したら、グループに戻します:

sudo mdadm /dev/md0 --add /dev/sdf

OSはすぐにバックグラウンドで新しいディスクへのデータの再構築を開始します。このプロセス中もサーバーのレスポンスは維持されますが、同期が完了するまでディスクパフォーマンスがわずかに低下することがあります。

結論

mdadmを使用することは、インフラを強化するための明快な方法です。安価な汎用ディスクを信頼性の高いストレージプールに変えることができます。しかし、「RAIDはバックアップではない」という鉄則を忘れないでください。ハードウェアの故障からは守ってくれますが、rm -rf /コマンドやランサムウェア攻撃からは救ってくれません。常にデータのオフサイトバックアップを維持してください。

初めての方は、まず仮想マシンでこれらの手順を試してみてください。仮想RAIDアレイを壊して直すことは、本番環境で実際のドライブが故障した際に必要となる自信を深めるための最良の方法です。

Share: