前回に引き続き GEOM によるディスクのミラーリング (RAID1) について纏めてみたいと思います.
前回は作成・削除・拡張について説明しましたが,今回は主に拡張の別のアプローチや管理面の説明となります.
- GEOM に関するお話
- FreeBSD GEOM 再々学習
- GEOM CONCAT (ディスクの連結) を使ってみる
- GEOM STRIPE (ストライプ/RAID0) を使ってみる
- GEOM MIRROR (ミラーリング/RAID1) を使ってみる (1)
- GEOM MIRROR (ミラーリング/RAID1) を使ってみる (2)
- GEOM STRIPE + MIRROR で RAID10 を構成してみる
- GEOM RAID3を使ってみる
- GEOM CACHE を使ってみる
- GEOM GVIRSTORを使ってみる
- GEOM GATE を使ってみる
- GEOM LABEL で名前による管理を行う
- GEOM PART でディスクパーティションの管理を行う
- GEOM MULTIPATH でマルチパスを構成する (1)
- GEOM MULTIPATH でマルチパスを構成する (2)
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 によるミラーリングについての解説を終わります.
コメント