投票ディスクの使われ方
投票ディスクの作成先ディスクグループが複数のディスクで構成されているとき、投票ディスクはどのように作られるのか。
標準冗長性のディスクグループを4台のディスクで構成した場合を考える。
SQL> select b.name,label,disk_number,mode_status from v$asm_disk a left join v$asm_diskgroup b
2 on a.group_number = b.group_number where b.name = 'NROCR';
NAME LABEL DISK_NUMBER MODE_STATUS
---------- ---------- ----------- ---------------------
NROCR NROCR1 0 ONLINE
NROCR NROCR2 1 ONLINE
NROCR NROCR3 2 ONLINE
NROCR NROCR4 3 ONLINE
投票ディスクは以下のような構成になり、4本のうち3本のみが使われる。
[grid@rac19n1 ~]$ crsctl query css votedisk
## STATE File Universal Id File Name Disk group
-- ----- ----------------- --------- ---------
1. ONLINE 5d4095281d624f5abf9ca6e6eede95f6 (AFD:NROCR1) [NROCR]
2. ONLINE 55622263368c4f4abf9562f6080f12e1 (AFD:NROCR2) [NROCR]
3. ONLINE f7638bb17cdc4f70bfcf0fbb62a3c03a (AFD:NROCR3) [NROCR]
3の投票ディスクを検出しました。
投票ディスクに障害が発生すると、以下のようにそのディスクはOFFLINEになる。
[grid@rac19n1 ~]$ crsctl query css votedisk
## STATE File Universal Id File Name Disk group
-- ----- ----------------- --------- ---------
1. OFFLINE 5d4095281d624f5abf9ca6e6eede95f6 (AFD:NROCR1) [NROCR]
2. ONLINE 55622263368c4f4abf9562f6080f12e1 (AFD:NROCR2) [NROCR]
3. ONLINE f7638bb17cdc4f70bfcf0fbb62a3c03a (AFD:NROCR3) [NROCR]
3の投票ディスクを検出しました。
この時、ASMとしても障害が起こっているディスクはOFFLINE状態となっている。
SQL> select b.name,label,disk_number,mode_status from v$asm_disk a left join v$asm_diskgroup b
2 on a.group_number = b.group_number where b.name = 'NROCR';
NAME LABEL DISK_NUMBER MODE_STATUS
---------- ---------- ----------- ---------------------
NROCR 0 OFFLINE
NROCR NROCR2 1 ONLINE
NROCR NROCR3 2 ONLINE
NROCR NROCR4 3 ONLINE
自分の環境では、ディスクを再接続すると認識はするものの、元のディスクグループに復帰する動きにはならず、GROUP_NUMBER=0 として認識されていた。
SQL> select a.group_number,b.name,label,disk_number,mode_status from v$asm_disk a left join v$asm_diskgroup b
2 on a.group_number = b.group_number;
GROUP_NUMBER NAME LABEL DISK_NUMBER MODE_STATUS
------------ ---------- ---------- ----------- ---------------------
0 NROCR1 0 ONLINE
3 OCR OCR 0 ONLINE
1 DATA DATA 0 ONLINE
3 OCR OCR2 1 ONLINE
2 NROCR NROCR2 1 ONLINE
2 NROCR NROCR3 2 ONLINE
2 NROCR NROCR4 3 ONLINE
この状態になると、投票ディスクはディスクグループに残っているディスクで自動的に再構成されて、3台がONLINE状態となっていた。
[grid@rac19n1 ~]$ crsctl query css votedisk
## STATE File Universal Id File Name Disk group
-- ----- ----------------- --------- ---------
1. ONLINE 55622263368c4f4abf9562f6080f12e1 (AFD:NROCR2) [NROCR]
2. ONLINE f7638bb17cdc4f70bfcf0fbb62a3c03a (AFD:NROCR3) [NROCR]
3. ONLINE 4f2902f6e84d4fc1bfb8e37eef1dff50 (AFD:NROCR4) [NROCR]
3の投票ディスクを検出しました。
このあたりの挙動は障害の内容にもよるかもしれない。
定数障害グループについて
ASMCAでディスクグループを作成するとき、「定数」という謎のチェックボックスがあることに気づくはず。
結論、ここにチェックを付けたディスクにはユーザデータ(表領域のデータファイルなど)は格納されず、そのディスクグループを投票ディスクとして使用した場合にのみ投票ファイルが格納されることになる。
ExadataではQuorumディスクがこの定数障害グループに設定される。ストレージサーバのみでは高冗長性(5多重)の障害グループを構成することができない場合に、データベースサーバ側のストレージをiSCSIで共有ディスクとして使用するというアレである。
非Exadataでもこの定数障害グループを追加することはできるので、挙動を確認してみると以下の通り。
テスト用のディスクグループを作成
3つの障害グループから構成される高冗長性のディスクグループ「TEST」を作成。この時点で使用するディスクは標準のディスクとするため「定数」のチェックは外しておく。

作成後の状況は以下。
[grid@rac1 ~]$ asmcmd lsdg
State Type Rebal Sector Logical_Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name
MOUNTED EXTERN N 512 512 4096 4194304 40960 34956 0 34956 0 N DATA/
MOUNTED EXTERN N 512 512 4096 4194304 2048 1640 0 1640 0 Y OCR/
MOUNTED HIGH N 512 512 4096 4194304 30720 30048 0 10016 0 N TEST
各ディスクの空きも上記 Usable_file_MB と同じ。
SQL> select name, failgroup, label, path, free_mb from v$asm_disk where group_number=3;
NAME FAILGROUP LABEL PATH FREE_MB
________ ____________ ________ ____________ __________
TEST1 FG1 TEST1 AFD:TEST1 10016
TEST2 FG2 TEST2 AFD:TEST2 10016
TEST3 FG3 TEST3 AFD:TEST3 10016
この時点では冗長度が不足しているため、投票ディスクの格納先として使用することはできない。
[grid@rac1 ~]$ crsctl replace votedisk +TEST
CRS-4648: ディスク・グループTESTの投票ファイル作成に失敗しました。
CLSU-00107: オペレーティング・システム機能: kgfnStmtExecuteが、エラー・データ: 0により失敗しました(場所: kgfdvfCR20)
CLSU-00101: オペレーティング・システム・エラー・メッセージ: Error 0
CLSU-00104: 追加エラー情報: ORA-15274: Not enough failgroups (5) to create voting files
CLSU-00104: 追加エラー情報: ORA-06512: at line 4
CLSU-00104: 追加エラー情報: ORA-06512: at "SYS.X$DBMS_DISKGROUP", line 818
CLSU-00104: 追加エラー情報: ORA-06512: at line 2
CRS-4628: 構成の変更に失敗しましたが、正常にロールバックされました。
CRS-4000: コマンドReplaceは失敗したか、またはエラーのある状態で完了しました。
定数障害グループのディスクを追加
ここに2つのディスクを追加する。今度は「定数」にチェックを付ける。

すると、ディスクグループとしては以下のような状態となる。4GBのディスクを2つ追加しているが Total_MB は増えていない。ここに表示されるのは「定数」のディスクを除いたものと思われる。
[grid@rac1 ~]$ asmcmd lsdg
State Type Rebal Sector Logical_Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name
MOUNTED EXTERN N 512 512 4096 4194304 40960 34896 0 34896 0 N DATA/
MOUNTED EXTERN N 512 512 4096 4194304 2048 1640 0 1640 0 Y OCR/
MOUNTED HIGH N 512 512 4096 4194304 30720 30000 0 10000 0 N TEST/
v$asm_disk の failgroup_type 列からも、追加したディスクが「QUORUM」と表示されていることがわかる。
SQL> select name, failgroup, label, path, failgroup_type, free_mb from v$asm_disk where group_number=3;
NAME FAILGROUP LABEL PATH FAILGROUP_TYPE FREE_MB
________ ____________ ________ ____________ _________________ __________
TEST1 FG1 TEST1 AFD:TEST1 REGULAR 10000
TEST2 FG2 TEST2 AFD:TEST2 REGULAR 10000
TEST3 FG3 TEST3 AFD:TEST3 REGULAR 10000
TEST4 QFG1 TEST4 AFD:TEST4 QUORUM 4084
TEST5 QFG2 TEST5 AFD:TEST5 QUORUM 4084
ディスクが5重化されたため、このディスクグループは投票ディスクとして使用可能となる。実際に投票ディスクを切り替えると以下の通り。
[grid@rac1 ~]$ crsctl replace votedisk +TEST
投票ディスク194b453c12d94fa1bfcdf460194ea1dfが正常に追加されました。
投票ディスク1eef6ae78f064f02bf51e08fcdef8235が正常に追加されました。
投票ディスク978702bb24994f6bbfe1304d5d4df5d3が正常に追加されました。
投票ディスク312bd6d2f1814f11bf7673398318c760が正常に追加されました。
投票ディスク5e6d2274891a4fcebf6e8cfec674ea81が正常に追加されました。
投票ディスク0591b58ff7bd4fb2bf4973c6c6852893が正常に削除されました。
投票ディスク・グループは+TESTと正常に置換されました。
CRS-4266: 投票ファイルが正常に置換されました
[grid@rac1 ~]$ crsctl query css votedisk
## STATE File Universal Id File Name Disk group
-- ----- ----------------- --------- ---------
1. ONLINE 194b453c12d94fa1bfcdf460194ea1df (AFD:TEST1) [TEST]
2. ONLINE 1eef6ae78f064f02bf51e08fcdef8235 (AFD:TEST2) [TEST]
3. ONLINE 978702bb24994f6bbfe1304d5d4df5d3 (AFD:TEST3) [TEST]
4. ONLINE 312bd6d2f1814f11bf7673398318c760 (AFD:TEST5) [TEST]
5. ONLINE 5e6d2274891a4fcebf6e8cfec674ea81 (AFD:TEST4) [TEST]
5の投票ディスクを検出しました。
投票ファイルが作成された分、各ディスクの空き領域は減少する。
SQL> select name, failgroup, label, path, failgroup_type, free_mb from v$asm_disk where group_number=3;
NAME FAILGROUP LABEL PATH FAILGROUP_TYPE FREE_MB
________ ____________ ________ ____________ _________________ __________
TEST1 FG1 TEST1 AFD:TEST1 REGULAR 9968
TEST2 FG2 TEST2 AFD:TEST2 REGULAR 9968
TEST3 FG3 TEST3 AFD:TEST3 REGULAR 9968
TEST4 QFG1 TEST4 AFD:TEST4 QUORUM 4052
TEST5 QFG2 TEST5 AFD:TEST5 QUORUM 4052
実際に「定数」のディスクにユーザデータが書き込まれないことも確認してみる。このディスクグループに適当に表領域をしてみると、FAILGROUP_TYPE が REGULAR のディスクのみ FREE_MB が減少し、QUORUM のディスクは一切領域が使われていないことがわかる。
SQL> create tablespace testtbs datafile '+TEST' size 8G;
Tablespace TESTTBSは作成されました。
SQL> select name, failgroup, label, path, failgroup_type, free_mb from v$asm_disk where group_number=3;
NAME FAILGROUP LABEL PATH FAILGROUP_TYPE FREE_MB
________ ____________ ________ ____________ _________________ __________
TEST1 FG1 TEST1 AFD:TEST1 REGULAR 1768
TEST2 FG2 TEST2 AFD:TEST2 REGULAR 1768
TEST3 FG3 TEST3 AFD:TEST3 REGULAR 1768
TEST4 QFG1 TEST4 AFD:TEST4 QUORUM 4052
TEST5 QFG2 TEST5 AFD:TEST5 QUORUM 4052
この時、ASMCMD で見える Usable_file_MB も、REGULAR のディスクの状況のみを反映している。
[grid@rac1 ~]$ asmcmd lsdg
State Type Rebal Sector Logical_Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name
MOUNTED EXTERN N 512 512 4096 4194304 40960 34884 0 34884 0 N DATA/
MOUNTED EXTERN N 512 512 4096 4194304 2048 1672 0 1672 0 N OCR/
MOUNTED HIGH N 512 512 4096 4194304 30720 5304 0 1768 0 Y TEST/

コメント