hajichan.net technical version
トップページ >> サーバ管理(Solaris) >> DiskSuiteによるミラーリング設定

サーバ管理

DiskSuiteによるミラーリング設定

OS領域をミラーリングしておくと、耐障害性も向上し、何かと安全です。以下にDiskSuiteを利用したOS領域をミラーリングする手順を記載します。

用語の詳しい意味ややり方は、マニュアル等をご参照下さい。ここでは、あくまで自分の理解したやり方を記載しておきます。

構成

SDSミラーリング構成図

今回のミラー構成は、表と図の通りです。解説に先立ち、簡単に用語の説明をしておきます。自分の解釈もかなり混ざっていますけど、ご了承下さい。

物理パーティション(物理スライス)

デバイス名cWtXdYsZで示されるような通常スライス。

メタデバイス

仮想デバイス(デバイス名dXで示される)。物理パーティション(cWtXdYsZ)の集合体で構成されています。

サブミラーメタデバイス

ミラーを構成するメンバーの1つ。例えばd0のサブミラーは、d10とd20です。

ミラーメタデバイス

サブミラーで構成されたメタデバイス。最終的にこのデバイスをOSからマウントします。

状態データベース

DiskSuiteを使用するには、物理パーティションの1つは、状態データベースを保持するために約20MBくらい用意しておく必要が有ります。その領域にメタデバイスの構成や状態が保存されることになります。


【SDSミラーリング構成】
    ディスク1台目 ディスク2台目
ミラー
メタデバイス
マウントポイント サブミラー パーティション サブミラー パーティション
d0 / d10 c0t0d0s0 d20 c0t1d0s0
d1 swap d11 c0t0d0s1 d21 c0t1d0s1
d3 /var d13 c0t0d0s3 d23 c0t1d0s3
状態DB - - c0t0d0s4 - c0t1d0s4
d5 /opt d15 c0t0d0s5 d25 c0t1d0s5
d6 /usr d16 c0t0d0s6 d26 c0t1d0s6
d7 /export d17 c0t0d0s7 d27 c0t1d0s7

設定手順

2台目のディスクのパーティションを1台目に合わせる

ミラーリングするためには、両方のディスクのパーティションサイズを揃えておく必要があります。

パーティションサイズを揃える方法として、formatコマンドで合わせても良いのですが、僕はprtvtocコマンドとfmthardコマンドを使ってます。prtvtocコマンドで1台目のディスクのVTOCを表示し、それをfmthardコマンドを使って2台目のディスクのVTOCに書き込むのです。ワンライナーで行けちゃいます。

# prtvtoc /dev/rdsk/c0t0d0s0 | fmthard -s - /dev/rdsk/c0t1d0s0

設定ファイル準備

設定ファイルを準備します。Solaris7以前では、/etc/opt/SUNWmd/md.tabでしたが、Solaris8以降では、/etc/lvm/md.tabです。

記述形式等はマニュアルを参照して下さい。でも、ざっとみてなんとなく大体何を定義しているか分かると思います。

# cd /etc/lvm
# cp md.tab md.tab.org
# vi md.tab
---
mddb01 -c 3 /dev/dsk/c0t0d0s4 /dev/dsk/c0t1d0s4
  
# /
d0 -m d10
d10 1 1 /dev/dsk/c0t0d0s0
d20 1 1 /dev/dsk/c0t1d0s0
  
# swap
d1 -m d11
d11 1 1 /dev/dsk/c0t0d0s1
d21 1 1 /dev/dsk/c0t1d0s1
  
# /var
d3 -m d13
d13 1 1 /dev/dsk/c0t0d0s3
d23 1 1 /dev/dsk/c0t1d0s3
  
# /opt
d5 -m d15
d15 1 1 /dev/dsk/c0t0d0s5
d25 1 1 /dev/dsk/c0t1d0s5

# /usr
d6 -m d16
d16 1 1 /dev/dsk/c0t0d0s6
d26 1 1 /dev/dsk/c0t1d0s6

# /export/home
d7 -m d17
d17 1 1 /dev/dsk/c0t0d0s7
d27 1 1 /dev/dsk/c0t1d0s7

状態データベースの作成

状態データベースを作成します。状態データベースは、メタデバイスの構成や状態を格納しておく最も重要な場所です。従って障害に備えて複製(レプリカ)を作成しておきます。ここでは、2パーティション(/dev/dsk/c0t0d0s4, /dev/dsk/c0t1d0s4)に3つずつ、計6つ作成します。

状態データベースには、過半数アルゴリズムというのが有ります。

  • レプリカが過半数以上生きていれば、正常に動作する
  • レプリカが半分生きていれば、リブート時にメンテナスモードに移行
  • レプリカが過半数以上障害のとき、パニック発生

md.tabのmddb01のエントリを利用して作成します。
つまり、-c 3 /dev/dsk/c0t0d0s4 /dev/dsk/c0t1d0s4なので、両パーティションに3つずつ状態データベースを作成します。

# metadb -a -f mddb01

このコマンドにより、/etc/lvm/mddb.cf, /etc/systemファイルが編集されます。

# cat /etc/system
---
* Begin MDD database info (do not edit)
set md:mddb_bootlist1="sd:127:16 sd:127:1050 sd:127:2084 sd:135:16"
set md:mddb_bootlist2="sd:135:1050 sd:135:2084"
* End MDD database info (do not edit)

コマンドにて状態データベースが作成されたか確認します。

# metadb -i
---
        フラグ          最初のブロック  ブロックカウント
     a m  p  luo        16              1034            /dev/dsk/c0t0d0s4
     a    p  luo        1050            1034            /dev/dsk/c0t0d0s4
     a    p  luo        2084            1034            /dev/dsk/c0t0d0s4
     a    p  luo        16              1034            /dev/dsk/c0t1d0s4
     a    p  luo        1050            1034            /dev/dsk/c0t1d0s4
     a    p  luo        2084            1034            /dev/dsk/c0t1d0s4
 o - 複製は最後の mddb 構成変更の前までアクティブでした
 u - 複製は最新です
 l - この複製のロケータは無事読み込まれました
 c - 複製の場所は /etc/lvm/mddb.cf です
 p - 複製の場所はカーネルにパッチされました
 m - 複製はマスターです。この複製は入力として選択されています
 W - 複製にはデバイス書き込みエラーがあります
 a - 複製はアクティブです。確定操作はこの複製に対して行われます
 M - 複製はマスターブロックで問題を起こしました
 D - 複製はデータブロックで問題を起こしました
 F - 複製はフォーマット問題を起こしました
 S - 複製は現在のデータベースを入れるには小さすぎます
 R - 複製はデバイス読み込みエラーを起こしました

1面ミラー作成

1面ミラーを作成します。1面ミラーというのは、サブミラーが1つの構成のミラーです。

先ほど設定したmd.tabの内容で初期化します。

# metainit -a -f
---
d10: Concat/Stripe is setup
d20: Concat/Stripe is setup
d11: Concat/Stripe is setup
d21: Concat/Stripe is setup
d13: Concat/Stripe is setup
d23: Concat/Stripe is setup
d15: Concat/Stripe is setup
d25: Concat/Stripe is setup
d16: Concat/Stripe is setup
d26: Concat/Stripe is setup
d17: Concat/Stripe is setup
d27: Concat/Stripe is setup
d0: Mirror is setup
d1: Mirror is setup
d3: Mirror is setup
d5: Mirror is setup
d6: Mirror is setup
d7: Mirror is setup

ルート(/)メタデバイスの設定、及び/etc/vfstab設定変更

最終的にミラーメタデバイス(d0〜d7)をOSからマウントするので、/etc/vfstabを下記のように変更します。

# metaroot d0

# vi /etc/vfstab
---
fd - /dev/fd fd - no -
/proc - /proc proc - no -
/dev/md/dsk/d0 /dev/md/rdsk/d0 / ufs 1 no -
/dev/md/dsk/d1 - - swap - no -
/dev/md/dsk/d3 /dev/md/rdsk/d3 /var ufs 1 no -
/dev/md/dsk/d5 /dev/md/rdsk/d5 /opt ufs 2 yes -
/dev/md/dsk/d6 /dev/md/rdsk/d6 /usr ufs 1 no -
/dev/md/dsk/d7 /dev/md/rdsk/d7 /export/home ufs 2 yes -
swap - /tmp tmpfs - yes -

リブート

ここまで来たら一度リブートします。順調ならミラーメタデバイスをマウントして起動してくるはずです。

# init 6

2面ミラー作成

後は、残りのもう一方のサブミラーをアタッチして完成です。アタッチ後は、裏側で同期が開始されています。metastatコマンドで進行状況を確認できます。

# metattach d0 d20
# metattach d1 d21
# metattach d3 d23
# metattach d5 d25
# metattach d6 d26
# metattach d7 d27

確認する。

# metastat

コラム

このままでも良いのですが、今の状態だと起動時に/var/adm/messagesに以下のメッセージが出力されます。

WARNING: forceload of misc/md_trans failed
WARNING: forceload of misc/md_raid failed
WARNING: forceload of misc/md_hotspares failed

しかし、エラーでは有りません。気になる場合は、/etc/systemを編集しましょう。アスタリスク記号でコメントアウトします。

# vi /etc/system
---
*forceload: misc/md_trans
*forceload: misc/md_raid
*forceload: misc/md_hotspares
ページのトップへ戻る