RAIDがなかなか覚えられなかったので軽く実践までしてみた

# RAIDとは
コンピューターの５大機能のうちの記憶の一部を司る、
外部記憶装置の「ディスク」ですが、
主記憶装置にあたるメモリと比較するとアクセス速度が非常に遅いです。

そのため、ディスクへのアクセスを早くすること、
また冗長化し、対障害性を高めることを目的とした技術のことを言います。

いくつかのレベルがありますが、
RAID0はディスクアクセスを高速化するための技術（ストライピング）であり、
残りの１〜６は対障害性を高めるためのミラーリングを中心とした技術です。

| レベル | 概要 |
|:------------:|:-------------|
| 0 | データをブロック単位で複数のディスクに分散して記録（ストライピング）する。１台が故障すると全体の故障となるので、信頼性が低下する |
| 1 | 同じデータを複数のディスクに書き込む（ミラーリング）。信頼性は上がるが、台数を増やしても１台分の容量となるため、効率は悪くなる。 |
| 3 | データをバイト単位でストライピングし、１台をエラー訂正用のパリティ情報記録用として固定する。パリティ情報からデータを復旧することができる |
| 5 | RAID3からパリティ情報に関してもブロック単位に分散して記録する |




# AWSにおけるRAIDの設定
## AWSの外部ストレージ
EC２における外部ストレージとしてEBSというものがあります。
EC2に対してアタッチ、デタッチが柔軟に可能です。
今回はこのEBSをEC2にアタッチしたうえで、RAID構成を作成してまいります。
なお、EC2はすぐに削除するテスト用として作成したので、
セキュリティグループなど含め全てデフォルトで作成。

デフォルトで作成しているEC2では１つだけEBSがアタッチされてます。

```bash
$ lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0   8G  0 disk 
└─xvda1 202:1    0   8G  0 part /

```

## まずはボリュームの作成とアタッチ
EBSはボリュームと表記されています。
そのため、ボリュームの作成から行います。
EC2の左側のタブのうち、ボリュームを選択します。

そこからボリュームの作成を選択。
![スクリーンショット 2019-09-01 18.43.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285742/9f2cca3c-0aba-0913-51d6-33cc25560a6b.png)

すると以下のような画面になります。
なお、ストレージサイズと利用期間での課金となるので、
１GBなどにしておきましょう。

![スクリーンショット 2019-09-01 18.43.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285742/c4f5221b-64c0-5bf0-c023-4903b211bd75.png)

作成を完了します。
![スクリーンショット 2019-09-01 18.43.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285742/e6ea962e-2512-5d6e-a419-8530de00fe2a.png)

すると左側のボリュームタブないでボリュームがひとつ増えているのがわかります。
まだアタッチされていないボリュームはavailableになってます。

![スクリーンショット 2019-09-01 18.44.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285742/b82fdf42-f715-1a92-45d3-10536fc5c2bb.png)


今回はミラーリングとストライピングを行いたいので、
合計４つ作成してきます。
作成し終わったらアタッチします。
![スクリーンショット 2019-09-01 18.48.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285742/9b752dd0-9dc5-234c-2f53-291b7083a67a.png)

## RAIDの設定
以降はインスタンス内で作業を行っていきます。
すべてをアタッチし終わると、
インスタンス内のストレージが増えているのがわかります。
増えた４つのストレージを２台ずつミラーリングし、２グループを作成。
それぞれのグループを対象にストライピングします。

```bash

$ lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0   8G  0 disk 
└─xvda1 202:1    0   8G  0 part /
xvdf    202:80   0   1G  0 disk 
xvdg    202:96   0   1G  0 disk 
xvdh    202:112  0   1G  0 disk 
xvdi    202:128  0   1G  0 disk 
```

まず、４つのうち２つをRAID１でミラーリングします。
以下コマンドのうちlevelのオプション部分がRAIDのレベルの指定です。

```bash

$ sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/xvdg /dev/xvdi
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
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

```

もう１組も同様にミラーリング

```bash

$ sudo mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/xvdh /dev/xvdf
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
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
```

md0とmd1というグループが作成できました。

```bash

$ lsblk
NAME    MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
xvda    202:0    0    8G  0 disk  
└─xvda1 202:1    0    8G  0 part  /
xvdf    202:80   0    1G  0 disk  
└─md1     9:1    0 1023M  0 raid1 
xvdg    202:96   0    1G  0 disk  
└─md0     9:0    0 1023M  0 raid1 
xvdh    202:112  0    1G  0 disk  
└─md1     9:1    0 1023M  0 raid1 
xvdi    202:128  0    1G  0 disk  
└─md0     9:0    0 1023M  0 raid1 
```

最後にストレイピングを行います。

```bash

$ sudo mdadm --create /dev/md2 --level=0 --raid-devices=2 /dev/md1 /dev/md0
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md2 started.
```

md２が作成できました。

```bash

$ lsblk
NAME    MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
xvda    202:0    0    8G  0 disk  
└─xvda1 202:1    0    8G  0 part  /
xvdf    202:80   0    1G  0 disk  
└─md1     9:1    0 1023M  0 raid1 
  └─md2   9:2    0    2G  0 raid0 
xvdg    202:96   0    1G  0 disk  
└─md0     9:0    0 1023M  0 raid1 
  └─md2   9:2    0    2G  0 raid0 
xvdh    202:112  0    1G  0 disk  
└─md1     9:1    0 1023M  0 raid1 
  └─md2   9:2    0    2G  0 raid0 
xvdi    202:128  0    1G  0 disk  
└─md0     9:0    0 1023M  0 raid1 
  └─md2   9:2    0    2G  0 raid0
```

アクセス速度なども暇があれば見てみたいと思います。

## 参考
[【AWS】EBSでRAID1+0をやってみたメモ　～後編：EBSのアタッチからRAID構築～](https://gattsu09.hatenadiary.com/entry/2017/11/26/000926)