11.15.2. ファイルスプリットブレインからのリカバリー
以下の方法のいずれかを使用して、データおよびメタデータのスプリットブレインから復旧できます。
- マウントポイントからデータおよびメタデータの分割ブレインから回復する方法は、「 マウントポイントからのファイルスプリットブレインの復旧」 を参照してください。
- CLI を使用してデータおよびメタデータプリッとブレインから回復する方法は、「gluster CLI からのファイルスプリットブレインのリカバリー」 を参照してください。
エントリー/タイプミスマッチのスプリットブレインを解決する方法は、23章ファイルのスプリットブレインの手動リカバリー を参照してください。
11.15.2.1. マウントポイントからのファイルスプリットブレインの復旧
マウントポイントからスプリットブレインから復旧する手順
- 一連の getfattr および setfattr コマンドを使用して、ファイルのデータおよびメタデータのスプリットブレイン状態を検出し、マウントポイントからスプリットブレインを解決できます。重要このマウントのスプリットブレインのプロセスは、拡張属性のサポートを提供しないため、NFS マウントでは機能しません。この例では、test-volumeボリュームには、brick0、brick1、 brick2、brick3があります。
# gluster volume info test-volume Volume Name: test-volume Type: Distributed-Replicate Status: Started Number of Bricks: 2 x 2 = 4 Transport-type: tcp Bricks: Brick1: test-host:/rhgs/brick0 Brick2: test-host:/rhgs/brick1 Brick3: test-host:/rhgs/brick2 Brick4: test-host:/rhgs/brick3
ブリックのディレクトリー構造は以下のようになります。# tree -R /test/b? /rhgs/brick0 ├── dir │ └── a └── file100 /rhgs/brick1 ├── dir │ └── a └── file100 /rhgs/brick2 ├── dir ├── file1 ├── file2 └── file99 /rhgs/brick3 ├── dir ├── file1 ├── file2 └── file99
以下の出力では、ボリューム内の一部のファイルがスプリットブレインにあります。# gluster volume heal test-volume info split-brain Brick test-host:/rhgs/brick0/ /file100 /dir Number of entries in split-brain: 2 Brick test-host:/rhgs/brick1/ /file100 /dir Number of entries in split-brain: 2 Brick test-host:/rhgs/brick2/ /file99 <gfid:5399a8d1-aee9-4653-bb7f-606df02b3696> Number of entries in split-brain: 2 Brick test-host:/rhgs/brick3/ <gfid:05c4b283-af58-48ed-999e-4d706c7b97d5> <gfid:5399a8d1-aee9-4653-bb7f-606df02b3696> Number of entries in split-brain: 2
ファイルのデータまたはメタデータのスプリットブレインステータスを確認するには、以下を実行します。# getfattr -n replica.split-brain-status <path-to-file>
上記のコマンドは、ファイルがデータまたはメタデータのスプリットブレインにある場合に、mount から実行される情報を提供します。このコマンドはエントリー/タイプミスマッチスプリットブレインには適用されません。以下に例を示します。file100
はメタデータスプリットブレインにあります。file100
に対して上記のコマンドを実行すると、以下 が可能になります。# getfattr -n replica.split-brain-status file100 # file: file100 replica.split-brain-status="data-split-brain:no metadata-split-brain:yes Choices:test-client-0,test-client-1"
file1
はデータスプリットブレインにあります。# getfattr -n replica.split-brain-status file1 # file: file1 replica.split-brain-status="data-split-brain:yes metadata-split-brain:no Choices:test-client-2,test-client-3"
file99
は data と meta-data split-brain の両方にあります。# getfattr -n replica.split-brain-status file99 # file: file99 replica.split-brain-status="data-split-brain:yes metadata-split-brain:yes Choices:test-client-2,test-client-3"
dir
はentry/type-mismatch
スプリットブレインにありますが、前述のように、ファイルがentry/type-mismatch
スプリットブレインにある場合は、上記のコマンドは表示されません。したがって、コマンドはThe file is not under data or metadata split-brain
を表示します。エントリー/タイプミスマッチのスプリットブレインを解決する方法は、23章ファイルのスプリットブレインの手動リカバリー を参照してください。# getfattr -n replica.split-brain-status dir # file: dir replica.split-brain-status="The file is not under data or metadata split-brain"
file2
はあらゆる種類のスプリットブレインにはなりません。# getfattr -n replica.split-brain-status file2 # file: file2 replica.split-brain-status="The file is not under data or metadata split-brain"
データおよびメタデータのスプリットブレイン内のファイルを分析し、問題を解決します。
スプリットブレインのファイルのマウントから
cat
、getfattr
などの操作を実行すると、入出力エラーが発生します。このようなファイルをさらに分析するには、setfattr コマンドを使用できます。# setfattr -n replica.split-brain-choice -v "choiceX" <path-to-file>
このコマンドを使用すると、特定のブリックを選択してスプリットブレイン内のファイルにアクセスできます。以下に例を示します。file1
は data-split-brain にあり、ファイルから読み取ると、入出力エラーが発生します。# cat file1 cat: file1: Input/output error
file1 に提供されるスプリットブレインの選択肢はtest-client-2
およびtest-client-3
でした。test-client-2
を file1 の split-brain choice として設定すると、ファイルについてb2
から読み取りされます。# setfattr -n replica.split-brain-choice -v test-client-2 file1
これで、ファイルで操作を実行することができます。たとえば、ファイルの読み取り操作などです。# cat file1 xyz
同様に、他の選択肢からファイルを検査するには、replica.split-brain-choice
をtest-client-3
に設定します。誤った選択肢のエラーからファイルの検査を試みます。設定した split-brain-choice を元に戻すことができます。上記の setfattr コマンドは、拡張属性の値としてnone
で使用できます。以下に例を示します。# setfattr -n replica.split-brain-choice -v none file1
これで、ファイルでcat
操作を実行した場合、以前と同様に入出力エラーが発生します。# cat file cat: file1: Input/output error
スプリットブレインを解決するソースとして使用するブリックを決定したら、修復するように設定する必要があります。# setfattr -n replica.split-brain-heal-finalize -v <heal-choice> <path-to-file>
例# setfattr -n replica.split-brain-heal-finalize -v test-client-2 file1
上記のプロセスは、すべてのファイルでデータやメタデータのスプリットブレインを解決するために使用できます。ファイルでの split-brain-choice の設定ファイルに split-brain-choice を設定すると、ファイルは 5 分間のみ分析できます。ファイルの分析にかかる時間を増やす必要がある場合は、以下のコマンドを使用して timeout-in-minute 引数で必要な時間を設定します。# setfattr -n replica.split-brain-choice-timeout -v <timeout-in-minutes> <mount_point/file>
これはグローバルタイムアウトで、マウントが存在する限りすべてのファイルに適用されます。タイムアウトは、ファイルを検査するたびに設定する必要はありませんが、新しいマウントの場合は、初回起動時に再度設定する必要があります。add-brick や remove-brick などの操作が実行されると、このオプションは無効になります。注記fopen-keep-cache
FUSE マウントオプションが無効になっている場合は、次のコマンドを実行してファイルを検証する新しいreplica.split-brain-choice
を選択する前に毎回 inode を無効にする必要があります。# setfattr -n inode-invalidate -v 0 <path-to-file>