11.15.3. gluster CLI からの GFID スプリットブレインのリカバリー

今回のリリースにより、Red Hat Gluster Storage では、gluster CLI から GFID スプリットブレインを解決できるようになりました。
以下のポリシーのいずれかを使用して、GFID スプリットブレインを解決できます。
  • より大きなファイルをソースとしてを使用
  • 最新の mtime をソースとして使用します。
  • 1 つのレプリカを特定のファイルのソースとして使用します。
注記
エントリー/タイプ一致スプリットブレイン解決は CLI を使用してサポートされていません。エントリー/タイプミスマッチのスプリットブレインを解決する方法は、23章ファイルのスプリットブレインの手動リカバリー を参照してください。

より大きなファイルをソースとして選択

このメソッドは、ファイル修復ごとに有用で、サイズが大きくなるとファイルがソースとして考慮されることが判断されます。

  1. 以下のコマンドを実行して、スプリットブレインにあるファイルのパスを取得します。
      # gluster volume heal VOLNAME info split-brain
    出力から、クライアントから実行されたファイル操作が入出力エラーで失敗したファイルを特定します。
    以下に例を示します。
    # gluster volume heal 12 info split-brain
    Brick 10.70.47.45:/bricks/brick2/b0
    /f5
    / - Is in split-brain
    
    Status: Connected
    Number of entries: 2
    
    Brick 10.70.47.144:/bricks/brick2/b1
    /f5
    / - Is in split-brain
    
    Status: Connected
    Number of entries: 2
    
    上記のコマンドでは、12 がボリューム名、b0b1 がブリックです。
  2. ファイルが GFID スプリットブレインにある場合は、ブリックで以下のコマンドを実行し、情報を取得します。getfattr コマンドは、ファイルの AFR changelog 拡張属性を取得および検証するために使用されます。
        # getfattr -d -e hex -m. <path-to-file>
    以下に例を示します。
    On brick /b0
    
    # getfattr -d -m . -e hex /bricks/brick2/b0/f5
    getfattr: Removing leading '/' from absolute path names
    # file: bricks/brick2/b0/f5
    security.selinux=0x73797374656d5f753a6f626a6563745f723a676c7573746572645f627269636b5f743a733000
    trusted.afr.12-client-1=0x000000020000000100000000
    trusted.afr.dirty=0x000000000000000000000000
    trusted.gfid=0xce0a9956928e40afb78e95f78defd64f
    trusted.gfid2path.9cde09916eabc845=0x30303030303030302d303030302d303030302d303030302d3030303030303030303030312f6635
    
    
    
    On brick /b1
    
    # getfattr -d -m . -e hex /bricks/brick2/b1/f5
    getfattr: Removing leading '/' from absolute path names
    # file: bricks/brick2/b1/f5
    security.selinux=0x73797374656d5f753a6f626a6563745f723a676c7573746572645f627269636b5f743a733000
    trusted.afr.12-client-0=0x000000020000000100000000
    trusted.afr.dirty=0x000000000000000000000000
    trusted.gfid=0x9563544118653550e888ab38c232e0c
    trusted.gfid2path.9cde09916eabc845=0x30303030303030302d303030302d303030302d303030302d3030303030303030303030312f6635
    
    ファイル f5 の GFID の相違点は、両方のブリックで異なります。
    ファイルサイズの相違点は、ブリックのファイルで stat コマンドを実行すると、ファイルサイズに違いがあります。以下は、b0 および b1 内の f5 ファイルの出力です。
    On brick /b0
    
    # stat /bricks/brick2/b0/f5
    File: ‘/bricks/brick2/b0/f5’
    Size: 15            Blocks: 8          IO Block: 4096   regular file
    Device: fd15h/64789d    Inode: 67113350    Links: 2
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Context: system_u:object_r:glusterd_brick_t:s0
    Access: 2018-08-29 20:46:26.353751073 +0530
    Modify: 2018-08-29 20:46:26.361751203 +0530
    Change: 2018-08-29 20:47:16.363751236 +0530
    Birth: -
    
    
    
    On brick /b1
    
    # stat /bricks/brick2/b1/f5
    File: ‘/bricks/brick2/b1/f5’
    Size: 2             Blocks: 8          IO Block: 4096   regular file
    Device: fd15h/64789d    Inode: 67111750    Links: 2
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Context: system_u:object_r:glusterd_brick_t:s0
    Access: 2018-08-29 20:44:56.153301616 +0530
    Modify: 2018-08-29 20:44:56.161301745 +0530
    Change: 2018-08-29 20:44:56.162301761 +0530
    Birth: -
    
  3. heal info コマンドの出力に表示されるボリュームのルートから表示されたように、完全なファイル名とともに以下のコマンドを実行します。
    # gluster volume heal VOLNAME split-brain bigger-file FILE
    以下に例を示します。
    # gluster volume heal12 split-brain bigger-file /f5
    GFID split-brain resolved for file /f5
    
    修復が完了したら、両方のブリックのファイルサイズは、サイズが大きいファイルと同じである必要があります。以下は、ファイル修復の完了後の getfattr コマンドの出力例です。
    On brick /b0
    
    # getfattr -d -m . -e hex /bricks/brick2/b0/f5
    getfattr: Removing leading '/' from absolute path names
    # file: bricks/brick2/b0/f5
    security.selinux=0x73797374656d5f753a6f626a6563745f723a676c7573746572645f627269636b5f743a733000
    trusted.gfid=0xce0a9956928e40afb78e95f78defd64f
    trusted.gfid2path.9cde09916eabc845=0x30303030303030302d303030302d303030302d303030302d3030303030303030303030312f6635
    
    
    
    On brick /b1
    
    # getfattr -d -m . -e hex /bricks/brick2/b1/f5
    getfattr: Removing leading '/' from absolute path names
    # file: bricks/brick2/b1/f5
    security.selinux=0x73797374656d5f753a6f626a6563745f723a676c7573746572645f627269636b5f743a733000
    trusted.gfid=0xce0a9956928e40afb78e95f78defd64f
    trusted.gfid2path.9cde09916eabc845=0x30303030303030302d303030302d303030302d303030302d3030303030303030303030312f6635
    

最新の mtime をソースとするファイルの選択

このメソッドはファイル修復ごとに有用で、最新の mtime を持つファイルをソースとして考慮する必要がある場合に役に立ちます。

  1. 以下のコマンドを実行して、スプリットブレインにあるファイルの一覧を取得します。
    # gluster volume heal VOLNAME info split-brain
    出力から、クライアントから実行されたファイル操作が入出力エラーで失敗したファイルを特定します。
    以下に例を示します。
    # gluster volume heal 12 info split-brain
    Brick 10.70.47.45:/bricks/brick2/b0
    /f4
    / - Is in split-brain
    
    Status: Connected
    Number of entries: 2
    
    Brick 10.70.47.144:/bricks/brick2/b1
    /f4
    / - Is in split-brain
    
    Status: Connected
    Number of entries: 2
    
    上記のコマンドでは、12 がボリューム名、b0b1 がブリックです。
  2. バックエンドから実行される以下のコマンドは、ファイルが GFID スプリットブレインにある場合に情報を提供します。
    # getfattr -d -e hex -m. <path-to-file>
    以下に例を示します。
    On brick /b0
    
    # getfattr -d -m . -e hex /bricks/brick2/b0/f4
    getfattr: Removing leading '/' from absolute path names
    # file: bricks/brick2/b0/f4
    security.selinux=0x73797374656d5f753a6f626a6563745f723a676c7573746572645f627269636b5f743a733000
    trusted.afr.12-client-1=0x000000020000000100000000
    trusted.afr.dirty=0x000000000000000000000000
    trusted.gfid=0xb66b66d07b315f3c9cffac2fb6422a28
    trusted.gfid2path.364f55367c7bd6f4=0x30303030303030302d303030302d303030302d303030302d3030303030303030303030312f6634
    
    
    
    On brick /b1
    
    # getfattr -d -m . -e hex /bricks/brick2/b1/f4
    getfattr: Removing leading '/' from absolute path names
    # file: bricks/brick2/b1/f4
    security.selinux=0x73797374656d5f753a6f626a6563745f723a676c7573746572645f627269636b5f743a733000
    trusted.afr.12-client-0=0x000000020000000100000000
    trusted.afr.dirty=0x000000000000000000000000
    trusted.gfid=0x87242f808c6e56a007ef7d49d197acff
    trusted.gfid2path.364f55367c7bd6f4=0x30303030303030302d303030302d303030302d303030302d3030303030303030303030312f6634
    
    ファイル f4 の GFID の相違点は、両方のブリックで異なります。
    ブリックからのファイルで stat コマンドを実行すると、変更時間に違いがあります。以下は、ブリック b0 および b1 内のファイル f4 の出力です。
    On brick /b0
    
    # stat /bricks/brick2/b0/f4
    File: ‘/bricks/brick2/b0/f4’
    Size: 14            Blocks: 8          IO Block: 4096   regular file
    Device: fd15h/64789d    Inode: 67113349    Links: 2
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Context: system_u:object_r:glusterd_brick_t:s0
    Access: 2018-08-29 20:57:38.913629991 +0530
    Modify: 2018-08-29 20:57:38.921630122 +0530
    Change: 2018-08-29 20:57:38.923630154 +0530
    Birth: -
    
    
    
    On brick /b1
    
    # stat /bricks/brick2/b1/f4
    File: ‘/bricks/brick2/b1/f4’
    Size: 2             Blocks: 8          IO Block: 4096   regular file
    Device: fd15h/64789d    Inode: 67111749    Links: 2
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Context: system_u:object_r:glusterd_brick_t:s0
    Access: 2018-08-24 20:54:50.953217256 +0530
    Modify: 2018-08-24 20:54:50.961217385 +0530
    Change: 2018-08-24 20:54:50.962217402 +0530
    Birth: -
    
  3. 以下のコマンドを実行します。
    # gluster volume healVOLNAME split-brain latest-mtime FILE 
    以下に例を示します。
    # gluster volume heal 12 split-brain latest-mtime /f4
    GFID split-brain resolved for file /f4
    
    修復が完了したら、両方のブリックにあるファイルの GFID が同じである必要があります。以下は、ファイル修復の完了後の getfattr コマンドの出力例です。ブリックは、最新の mtime をソースとして使用することで、ファイルを修復していることが分かります。
    On brick /b0
    
    # getfattr -d -m . -e hex /bricks/brick2/b0/f4
    getfattr: Removing leading '/' from absolute path names
    # file: bricks/brick2/b0/f4
    security.selinux=0x73797374656d5f753a6f626a6563745f723a676c7573746572645f627269636b5f743a733000
    trusted.gfid=0xb66b66d07b315f3c9cffac2fb6422a28
    trusted.gfid2path.364f55367c7bd6f4=0x30303030303030302d303030302d303030302d303030302d3030303030303030303030312f6634
    
    
    
    On brick /b1
    
    # getfattr -d -m . -e hex /bricks/brick2/b1/f4
    getfattr: Removing leading '/' from absolute path names
    # file: bricks/brick2/b1/f4
    security.selinux=0x73797374656d5f753a6f626a6563745f723a676c7573746572645f627269636b5f743a733000
    trusted.gfid=0xb66b66d07b315f3c9cffac2fb6422a28
    trusted.gfid2path.364f55367c7bd6f4=0x30303030303030302d303030302d303030302d303030302d3030303030303030303030312f6634
    

特定のファイルのソースとして 1 つのレプリカを選択する

このメソッドは、どのファイルをソースとして考慮するかを把握する場合に便利です。

  1. 以下のコマンドを実行して、スプリットブレインにあるファイルの一覧を取得します。
    # gluster volume heal VOLNAME info split-brain
    出力から、クライアントから実行されたファイル操作が入出力エラーで失敗したファイルを特定します。
    以下に例を示します。
    # gluster volume heal 12 info split-brain
    Brick 10.70.47.45:/bricks/brick2/b0
    /f3
    / - Is in split-brain
    
    Status: Connected
    Number of entries: 2
    
    Brick 10.70.47.144:/bricks/brick2/b1
    /f3
    / - Is in split-brain
    
    Status: Connected
    Number of entries: 2
    
    上記のコマンドでは、12 がボリューム名、b0b1 がブリックです。
    注記
    1 つのレプリカをソースオプションとして使用し、データ/メタデータスプリットブレインに対して実行できるように、CLI でファイルパスを指定しないことで、すべての GFID スプリットブレインを解決する方法はありません。
    GFID 分割ブレインの各ファイルについて、heal コマンドを個別に実行する必要があります。
  2. バックエンドから実行される以下のコマンドは、ファイルが GFID スプリットブレインにある場合に情報を提供します。
     # getfattr -d -e hex -m. <path-to-file>
    以下に例を示します。
    # getfattr -d -m . -e hex /bricks/brick2/b0/f3
    On brick /b0
    
    getfattr: Removing leading '/' from absolute path names
    # file: bricks/brick2/b0/f3
    security.selinux=0x73797374656d5f753a6f626a6563745f723a676c7573746572645f627269636b5f743a733000
    trusted.afr.12-client-1=0x000000020000000100000000
    trusted.afr.dirty=0x000000000000000000000000
    trusted.gfid=0x9d542fb1b3b15837a2f7f9dcdf5d6ee8
    trusted.gfid2path.364f55367c7bd6f4=0x30303030303030302d303030302d303030302d303030302d3030303030303030303030312f6634
    
    
    On brick /b1
    
    # getfattr -d -m . -e hex /bricks/brick2/b1/f3
    getfattr: Removing leading '/' from absolute path names
    # file: bricks/brick2/b0/f3
    security.selinux=0x73797374656d5f753a6f626a6563745f723a676c7573746572645f627269636b5f743a733000
    trusted.afr.12-client-1=0x000000020000000100000000
    trusted.afr.dirty=0x000000000000000000000000
    trusted.gfid=0xc90d9b0f65f6530b95b9f3f8334033df
    trusted.gfid2path.364f55367c7bd6f4=0x30303030303030302d303030302d303030302d303030302d3030303030303030303030312f6634
    
    両方のブリック内の f3 ファイルの GFID の相違点が確認できます。
  3. 以下のコマンドを実行します。
    # gluster volume heal VOLNAME split-brain source-brick HOSTNAME : export-directory-absolute-path FILE
    このコマンドでは、HOSTNAME : export-directory-absolute-path にある FILE は、修復のソースとして取得されます。
    以下に例を示します。
    # gluster volume heal 12 split-brain source-brick 10.70.47.144:/bricks/brick2/b1 /f3
    GFID split-brain resolved for file /f3
    
    修復が完了したら、両方のブリックファイルの GFID は、サイズが大きいファイルと同じである必要があります。以下は、ファイル修復後の getfattr コマンドの出力例です。
    On brick /b0
    
    # getfattr -d -m . -e hex /bricks/brick2/b0/f3
    getfattr: Removing leading '/' from absolute path names
    # file: bricks/brick2/b0/f3
    security.selinux=0x73797374656d5f753a6f626a6563745f723a676c7573746572645f627269636b5f743a733000
    trusted.gfid=0x90d9b0f65f6530b95b9f3f8334033df
    trusted.gfid2path.364f55367c7bd6f4=0x30303030303030302d303030302d303030302d303030302d3030303030303030303030312f6634
    
    
    
    On brick /b1
    
    # getfattr -d -m . -e hex /bricks/brick2/b1/f3
    getfattr: Removing leading '/' from absolute path names
    # file: bricks/brick2/b1/f3
    security.selinux=0x73797374656d5f753a6f626a6563745f723a676c7573746572645f627269636b5f743a733000
    trusted.gfid=0x90d9b0f65f6530b95b9f3f8334033df
    trusted.gfid2path.364f55367c7bd6f4=0x30303030303030302d303030302d303030302d303030302d3030303030303030303030312f6634
    
    
    注記
    ファイルの GFID を CLI オプションのある引数として使用して GFID スプリットブレインを解決することはできません。マウントポイントからソースとみなされるファイルの絶対パスである必要があります。
    source-brick オプションでは、データまたはメタデータの分割ブレインの解決中に、CLI でファイルパスを指定しないことで、すべての GFID スプリットブレインを解決する方法はありません。GFID 分割ブレインの各ファイルについて、使用するポリシーを指定して CLI を実行します。
    「distributed-replicated」ボリュームの「source-brick」オプションを使用した CLI を使用したディレクトリー GFID スプリットの解決は、すべてのボリュームで明示的に実行する必要があります。ディレクトリーはすべてのサブボリュームで作成され、ある特定のブリックを GFID スプリットブレインのソースとして使用し、そのサブボリュームのディレクトリーを修復します。この場合、他のサブボリュームは、他のサブボリュームのソースとして使用されていた以前のブリックと同じ GFID を持つブリックを使用して修復する必要があります。entry/type-mismatch のスプリットブレインを解決する方法は、23章ファイルのスプリットブレインの手動リカバリー を参照してください。