11.15.3. gluster CLI からの GFID スプリットブレインのリカバリー
今回のリリースにより、Red Hat Gluster Storage では、gluster CLI から GFID スプリットブレインを解決できるようになりました。
以下のポリシーのいずれかを使用して、GFID スプリットブレインを解決できます。
- より大きなファイルをソースとしてを使用
- 最新の mtime をソースとして使用します。
- 1 つのレプリカを特定のファイルのソースとして使用します。
注記
エントリー/タイプ一致スプリットブレイン解決は CLI を使用してサポートされていません。エントリー/タイプミスマッチのスプリットブレインを解決する方法は、23章ファイルのスプリットブレインの手動リカバリー を参照してください。
より大きなファイルをソースとして選択
このメソッドは、ファイル修復ごとに有用で、サイズが大きくなるとファイルがソースとして考慮されることが判断されます。
- 以下のコマンドを実行して、スプリットブレインにあるファイルのパスを取得します。
# 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 がボリューム名、b0、b1 がブリックです。 - ファイルが 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: -
- 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 を持つファイルをソースとして考慮する必要がある場合に役に立ちます。
- 以下のコマンドを実行して、スプリットブレインにあるファイルの一覧を取得します。
# 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 がボリューム名、b0、b1 がブリックです。 - バックエンドから実行される以下のコマンドは、ファイルが 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: -
- 以下のコマンドを実行します。
# 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 つのレプリカを選択する
このメソッドは、どのファイルをソースとして考慮するかを把握する場合に便利です。
- 以下のコマンドを実行して、スプリットブレインにあるファイルの一覧を取得します。
# 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 がボリューム名、b0、b1 がブリックです。注記1 つのレプリカをソースオプションとして使用し、データ/メタデータスプリットブレインに対して実行できるように、CLI でファイルパスを指定しないことで、すべての GFID スプリットブレインを解決する方法はありません。GFID 分割ブレインの各ファイルについて、heal コマンドを個別に実行する必要があります。 - バックエンドから実行される以下のコマンドは、ファイルが 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 の相違点が確認できます。 - 以下のコマンドを実行します。
# 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章ファイルのスプリットブレインの手動リカバリー を参照してください。