11.15.2. ファイルスプリットブレインからのリカバリー

以下の方法のいずれかを使用して、データおよびメタデータのスプリットブレインから復旧できます。
エントリー/タイプミスマッチのスプリットブレインを解決する方法は、23章ファイルのスプリットブレインの手動リカバリー を参照してください。

11.15.2.1. マウントポイントからのファイルスプリットブレインの復旧

マウントポイントからスプリットブレインから復旧する手順

  1. 一連の getfattr および setfattr コマンドを使用して、ファイルのデータおよびメタデータのスプリットブレイン状態を検出し、マウントポイントからスプリットブレインを解決できます。
    重要
    このマウントのスプリットブレインのプロセスは、拡張属性のサポートを提供しないため、NFS マウントでは機能しません。
    この例では、test-volumeボリュームには、brick0brick1 brick2brick3があります。
    # 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"
    • direntry/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"
  2. データおよびメタデータのスプリットブレイン内のファイルを分析し、問題を解決します。

    スプリットブレインのファイルのマウントから catgetfattr などの操作を実行すると、入出力エラーが発生します。このようなファイルをさらに分析するには、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-choicetest-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>