5.7.5. 判別ボリュームへの変換

複製されたボリュームを、複製された各サブボリュームに対して新しい arbiter ブリックを追加するか、レプリカブリックを arbiter ブリックに置き換えることで、複製されたボリュームに変換できます。

手順5.1 レプリカ 2 ボリュームの判別ボリュームへの変換

警告
geo レプリケーションが設定されている場合には、このプロセスを実行しないでください。Bug 1683893 で追跡されている競合状態があります。これは、geo レプリケーションが有効な場合にボリュームを変換する際にデータが失われます。
  1. 修復中ではないことを確認します。

    # gluster volume heal VOLNAME info
    保留中の修復エントリーが 0 になるまで待ってから続行します。
  2. 自己修復の無効化と停止

    以下のコマンドを実行して、データ、メタデータ、エントリー自己修復デーモン、および自己修復デーモンを無効にします。
    # gluster volume set VOLNAME cluster.data-self-heal off
    # gluster volume set VOLNAME cluster.metadata-self-heal off
    # gluster volume set VOLNAME cluster.entry-self-heal off
    # gluster volume set VOLNAME self-heal-daemon off
  3. ボリュームへの arbiter ブックの追加

    各複製サブボリュームに arbiter ブックを追加して、ボリュームを変換します。
    # gluster volume add-brick VOLNAME replica 3 arbiter 1 HOST:arbiter-brick-path
    たとえば、testvol と呼ばれる双方向で複製されたボリュームがあり、arbiter が使用する新しいブリックがある場合は、次のコマンドを使用して、ブリックを arbiter として追加できます。
    # gluster volume add-brick testvol replica 3 arbiter 1 server:/bricks/arbiter_brick
    既存の双方向分散型ボリュームがある場合、判別分散複製ボリュームに変換するには、各サブボリュームに新たなブリックが必要になります。以下に例を示します。
    # gluster volume add-brick testvol replica 3 arbiter 1 server1:/bricks/arbiter_brick1 server2:/bricks/arbiter_brick2
  4. クライアントの volfiles が更新するまで待ちます。

    これには約 5 分かかります。
  5. ブリックが正常に追加されたことを確認します。

    # gluster volume info VOLNAME
    # gluster volume status VOLNAME
  6. 自己修復を再度有効化

    以下のコマンドを実行して、サーバーで自己修復を再度有効にします。
    # gluster volume set VOLNAME cluster.data-self-heal on
    # gluster volume set VOLNAME cluster.metadata-self-heal on
    # gluster volume set VOLNAME cluster.entry-self-heal on
    # gluster volume set VOLNAME self-heal-daemon on
  7. すべてのエントリーが修復されていることを確認

    # gluster volume heal VOLNAME info
    保留中の秀句エントリーが 0 になるまで待機して、すべての修復が正常に実行されるようにします。

手順5.2 レプリカ 3 ボリュームの判別ボリュームへの変換

警告
geo レプリケーションが設定されている場合には、このプロセスを実行しないでください。Bug 1683893 で追跡されている競合状態があります。これは、geo レプリケーションが有効な場合にボリュームを変換する際にデータが失われます。
  1. 修復中ではないことを確認します。

    # gluster volume heal VOLNAME info
    保留中の修復エントリーが 0 になるまで待ってから続行します。
  2. ボリュームのレプリカ数を 2 に減らす

    レプリカ数が 2 に削減されるように、ボリュームのすべてのサブボリュームからブリックを削除します。たとえば、2 つのサブボリュームにデータを分散するレプリカ 3 ボリュームでは、以下のコマンドを実行します。
    # gluster volume remove-brick VOLNAME replica 2 HOST:subvol1-brick-path HOST:subvol2-brick-path force
    注記
    分散複製ボリュームでは、データはサブボリューム全体に分散され、サブボリュームのブリック全体に複製されます。つまり、ボリュームのレプリカ数を減らすには、すべてのサブボリュームからブリックを削除する必要があります。
    ブリックは、gluster volume info 出力で サブボリュームでグループ化されます。レプリカ数が 3 の場合は、最初の 3 つのブリックが最初のサブボリュームを形成し、次の 3 つのブリックは 2 番目のサブボリュームなどを形成します。
    # gluster volume info VOLNAME
    [...]
    Number of Bricks: 2 x 3 = 6
    Transport-type: tcp
    Bricks:
    Brick1: node1:/test1/brick
    Brick2: node2:/test2/brick
    Brick3: node3:/test3/brick
    Brick4: node1:/test4/brick
    Brick5: node2:/test5/brick
    Brick6: node3:/test6/brick
    [...]
    このボリュームでは、データは 2 つのサブボリュームに分散され、それぞれ 3 つのブリックで構成されます。最初のサブボリュームは、ブリック 1、2、および 3 で構成されます。2 つ目のサブボリュームは、ブリック 4、5、および 6 で構成されます。以下のコマンドを使用して各サブボリュームから 1 つのブリックを削除すると、必要に応じてレプリカ数を 2 に減らします。
    # gluster volume remove-brick VOLNAME replica 2 HOST:subvol1-brick-path HOST:subvol2-brick-path force
  3. 自己修復の無効化と停止

    以下のコマンドを実行して、データ、メタデータ、エントリー自己修復デーモン、および自己修復デーモンを無効にします。
    # gluster volume set VOLNAME cluster.data-self-heal off
    # gluster volume set VOLNAME cluster.metadata-self-heal off
    # gluster volume set VOLNAME cluster.entry-self-heal off
    # gluster volume set VOLNAME self-heal-daemon off
  4. ボリュームへの arbiter ブックの追加

    各複製サブボリュームに arbiter ブックを追加して、ボリュームを変換します。
    # gluster volume add-brick VOLNAME replica 3 arbiter 1 HOST:arbiter-brick-path
    たとえば、複製されたボリュームがある場合には、以下のコマンドを実行します。
    # gluster volume add-brick testvol replica 3 arbiter 1 server:/bricks/brick
    既存の分散複製のボリュームがある場合:
    # gluster volume add-brick testvol replica 3 arbiter 1 server1:/bricks/arbiter_brick1 server2:/bricks/arbiter_brick2
  5. クライアントの volfiles が更新するまで待ちます。

    これには約 5 分かかります。各クライアントで以下のコマンドを実行して、これが完了したことを確認します。
    # grep -ir connected mount-path/.meta/graphs/active/volname-client-*/private
    出力で connected=1 に表示される回数は、クライアントに接続されたブリックの数になります。
  6. ブリックが正常に追加されたことを確認します。

    # gluster volume info VOLNAME
    # gluster volume status VOLNAME
  7. 自己修復を再度有効化

    以下のコマンドを実行して、サーバーで自己修復を再度有効にします。
    # gluster volume set VOLNAME cluster.data-self-heal on
    # gluster volume set VOLNAME cluster.metadata-self-heal on
    # gluster volume set VOLNAME cluster.entry-self-heal on
    # gluster volume set VOLNAME self-heal-daemon on
  8. すべてのエントリーが修復されていることを確認

    # gluster volume heal VOLNAME info
    保留中の秀句エントリーが 0 になるまで待機して、すべての修復が正常に実行されるようにします。