GEOM MIRROR (ミラーリング/RAID1) を使ってみる (2)

GEOM

前回に引き続き GEOM によるディスクのミラーリング (RAID1) について纏めてみたいと思います.
前回は作成・削除・拡張について説明しましたが,今回は主に拡張の別のアプローチや管理面の説明となります.

GEOM CONCAT を併用してディスクを拡張する

前回は玉突きで大きなディスクに入れ替える.という手法を紹介しました.今回は別のアプローチとして,ミラーリング + コンカチ を紹介します.
GEOM は重ね掛けでの利用が可能ですのでこういった方法も可能です.
拡張のイメージはこのような形です.

このような拡張を事前に考慮している場合は最初からコンカチまで GEOM でやっていればいいのですが,後から拡張したい場合もあると思います.
そのようなシチュエーションを考え,以下の流れでの拡張を紹介します.

現状は上図の一番左の状態とします.

gmirror status
          Name    Status  Components
mirror/mirror0  COMPLETE  da1 (ACTIVE)
                          da2 (ACTIVE)

# df
Filesystem          1K-blocks    Used    Avail Capacity  Mounted on
/dev/da0p2           19279260 2591092 15145828    15%    /
devfs                       1       1        0   100%    /dev
/dev/mirror/mirror0 101561752   62888 93373924     0%    /mnt

mirror0 をコンカチデバイスの配下に組み入れる

まずはこの mirror0 デバイスをコンカチデバイスとして取り扱います.gconcat label で実行しますが,マウントしている状態だとこれは出来ない為,一度マウントを解除の上コマンドを発行します.

# umount /mnt

# gconcat label concat0 /dev/mirror/mirror0

# gconcat status
          Name  Status  Components
concat/concat0      UP  mirror/mirror0

status サブコマンドで UP の状態であれば,このデバイスをマウントする事が可能です.データは mirror0 の時の物がそのまま維持されています.

# mount /dev/concat/concat0 /mnt

# ls /mnt
.snap           random.img

追加用の mirror ボリュームを作成する

続いて,拡張用の RAID1 ボリュームの mirror1 を作成します.
label サブコマンドを用いて新しいミラーボリュームを作成,status サブコマンドで COMPLETE / ACTIVE を確認します.

# gmirror label mirror1 da3 da4

# gmirror status
          Name    Status  Components
mirror/mirror0  COMPLETE  da1 (ACTIVE)
                          da2 (ACTIVE)
mirror/mirror1  COMPLETE  da3 (ACTIVE)
                          da4 (ACTIVE)

追加した mirror ボリュームをコンカチに組み入れる

続いて,作成した mirror1 を concat0 に追加を行います.「GEOM CONCAT (ディスクの連結) を使ってみる」の「ディスクを拡張する」でも触れていますが,オンラインのままではできません.
ですので実際は上記でマウントを行っていますが行わずに一気に拡張をやってしまった方が時間は節約できます.
ただ,オペレーションの都度確認を入れたほうが安全ではあります.

以下一気に記載をしてしまっていますが,
アンマウントを行い,gconcat label で mirror1 の追加を行っています.
その後ステータスを確認してマウントを行っています.この状態だとまだ容量は増えていません.
最後に growfs でファイルシステムの拡張を行いました.
なお,growfs はオンライン/オフラインどちらでも実施が可能です.

# umount /mnt

# gconcat label concat0 /dev/mirror/mirror0 /dev/mirror/mirror1

# gconcat status
          Name  Status  Components
concat/concat0      UP  mirror/mirror0
                        mirror/mirror1
# gconcat list
Geom name: concat0
State: UP
Status: Total=2, Online=2
Type: AUTOMATIC
ID: 945551655
Providers:
1. Name: concat/concat0
   Mediasize: 214748362752 (200G)
   Sectorsize: 512
   Mode: r0w0e0
Consumers:
1. Name: mirror/mirror0
   Mediasize: 107374181888 (100G)
   Sectorsize: 512
   Mode: r0w0e0
   Start: 0
   End: 107374181376
2. Name: mirror/mirror1
   Mediasize: 107374181888 (100G)
   Sectorsize: 512
   Mode: r0w0e0
   Start: 107374181376
   End: 214748362752

# mount /dev/concat/concat0 /mnt

# growfs /dev/concat/concat0
Device is mounted read-write; resizing will result in temporary write suspension for /mnt.
It's strongly recommended to make a backup before growing the file system.
OK to grow filesystem on /dev/concat/concat0, mounted on /mnt, from 100GB to 200GB? [yes/no] yes
super-block backups (for fsck_ffs -b #) at:
 209993664, 211274112, 212554560, 213835008, 215115456, 216395904, 217676352, 218956800, 220237248, 221517696, 222798144,
 224078592, 225359040, 226639488, 227919936, 229200384, 230480832, 231761280, 233041728, 234322176, 235602624, 236883072,
 238163520, 239443968, 240724416, 242004864, 243285312, 244565760, 245846208, 247126656, 248407104, 249687552, 250968000,
 252248448, 253528896, 254809344, 256089792, 257370240, 258650688, 259931136, 261211584, 262492032, 263772480, 265052928,

# df
Filesystem          1K-blocks    Used     Avail Capacity  Mounted on
/dev/da0p2           19279260 2591088  15145832    15%    /
devfs                       1       1         0   100%    /dev
/dev/concat/concat0 203123604   62888 186810828     0%    /mnt

一度オフラインにする必要がある.という制限はありますが,玉突きではなく純増で増やしていきたい場合の方法として,GEOM MIRROR + CONCAT という手法を紹介しました.

GEOM MIRROR 管理

前回,作成・削除・拡張を特にオプション無しで実施していますが,GEOM MIRROR には GEOM STRIPE や CONCAT と違ってサブコマンドやオプションが豊富です.
ここで少し紹介したいと思います.

gmirror list を実行すると先頭に Balance は Slice,Type 等の項目が表示されます.

# gmirror list mirror0
Geom name: mirror0
State: COMPLETE
Components: 2
Balance: load
Slice: 4096
Flags: NONE
GenID: 0
SyncID: 1
ID: 3673431046
Type: AUTOMATIC
Providers:
1. Name: mirror/mirror0
   Mediasize: 107374181888 (100G)
   Sectorsize: 512
   Mode: r1w1e2

読み出し方式の変更

Balance は4つあり,ディスクの読み出しの際にどういったアクセスを行うか.を決定するものになります.

  • load
    IO負荷の低いディスクから読み出しを行います.label や create 時に指定しない場合これがデフォルトとして採用されます
  • prefer
    mirror 内の Priority 値が大きいディスクから読み出しを行います
  • round-robin
    ラウンドロビンで読み出しを行います
  • split
    指定のバイト数毎に読み取るディスクを切り替えていく方式となります

基本的にはデフォルトの load でもよいと思いますが,読み出しの割合が多い環境でパフォーマンスを引き出したい場合は round-robin や split を選択するのは有効だと思います.

変更する場合は configure サブコマンドで設定値を変更が可能です.round-robin にする場合はこのような形となります.

# gmirror configure -b round-robin mirror0

# gmirror list mirror0
Geom name: mirror0
State: COMPLETE
Components: 2
Balance: round-robin
Slice: 4096
Flags: NONE
GenID: 0
SyncID: 1
ID: 3673431046
Type: AUTOMATIC

split の場合は configure サブコマンドでオプションを2つ渡します.-s を指定しない場合は 4096 byte がデフォルト値として採用されます.

# gmirror configure -b split -s 8192 mirror0

# gmirror list mirror0
Geom name: mirror0
State: COMPLETE
Components: 2
Balance: split
Slice: 8192
Flags: NONE
GenID: 0
SyncID: 1
ID: 3673431046
Type: AUTOMATIC

prefer の場合も configure サブコマンドを使用します.
その後,デバイスの優先度を変更します.Consumers の Priority が変化している事を確認します.
(長くなるので Priority だけ記載しています)

# gmirror configure -b prefer mirror0

# gmirror configure -p 10 mirror0 da1

# gmirror list mirror0
Geom name: mirror0
State: COMPLETE
Components: 2
Balance: prefer
Slice: 8192
Flags: NONE
GenID: 0
SyncID: 1
ID: 3673431046
Type: AUTOMATIC
Providers:
1. Name: mirror/mirror0
   Mediasize: 107374181888 (100G)
   Sectorsize: 512
   Mode: r1w1e2
Consumers:
1. Name: da1
   Priority: 10
2. Name: da2
   Priority: 1

リビルド処理の自動化・手動化

Type は AUTOMATIC と NOAUTOSYNC の2つがあります.自動で同期処理を行うのか,マニュアル制御で行うのか.という違いになります.
手動でオペレーションを行わないといけない.というシチュエーションは少ないと思いますが,方法を記載します.
こちらも configure サブコマンドを用いて設定します.

# gmirror configure -n mirror0

# gmirror list mirror0
Geom name: mirror0
State: COMPLETE
Components: 2
Balance: round-robin
Slice: 4096
Flags: NOAUTOSYNC
GenID: 0
SyncID: 1
ID: 3673431046
Type: AUTOMATIC

手動から自動に戻したい場合も同様に configure サブコマンドを用いて設定します.

# gmirror configure -a mirror0

# gmirror list mirror0
Geom name: mirror0
State: COMPLETE
Components: 2
Balance: round-robin
Slice: 4096
Flags: NONE
GenID: 0
SyncID: 1
ID: 3673431046
Type: AUTOMATIC

以上で GEOM MIRROR によるミラーリングについての解説を終わります.

コメント

タイトルとURLをコピーしました