11.9. ボリュームの移行

信頼できるストレージプールがオンラインになり、利用可能な場合に、データはブリック全体に再配布できます。次に、新しいサーバーのブリックを置き換えて、信頼済みストレージプールに新規サーバーが正常に追加されたことを確認します。
注記
replace-brick 操作を実行する前に、Red Hat Gluster Storage リリースノートの replace-brick 操作に関連する既知の問題を確認してください。

11.9.1. 分散ボリュームまたは複製ボリュームでのサブボリュームの置き換え

この手順は、置き換えるサブボリュームからのブリックが 1 つ以上オンラインの場合にのみ適用されます。Distribute ボリュームの場合は、置き換える必要のあるブリックをオンラインにする必要があります。Distribute-replicate の場合は、置き換える必要のあるレプリカセットのサブボリュームからの少なくとも 1 つのブリックをオンラインにする必要があります。
サブボリューム全体を Distribute-replicate ボリュームの新しいブリックに置き換えるには、以下の手順に従います。
  1. 新しいブリックをボリュームに追加します。
    # gluster volume add-brick VOLNAME [replica <COUNT>] NEW-BRICK

    例11.1 ボリュームへのブリックの追加

    # gluster volume add-brick test-volume server5:/rhgs/brick5
    Add Brick successful
  2. 以下のコマンドを使用してボリューム情報を確認します。
    # gluster volume info
     Volume Name: test-volume
        Type: Distribute
        Status: Started
        Number of Bricks: 5
        Bricks:
        Brick1: server1:/rhgs/brick1
        Brick2: server2:/rhgs/brick2
        Brick3: server3:/rhgs/brick3
        Brick4: server4:/rhgs/brick4
        Brick5: server5:/rhgs/brick5
    注記
    Distribute-replicate ボリュームの場合は、add-brick コマンドでレプリカ数を指定し、add-brick コマンドにレプリカ数と同じ数のブリックを指定する必要があります。
  3. サブボリュームから置き換えるブリックを削除します。
    1. 以下のコマンドを使用して remove-brick 操作を起動します。
      # gluster volume remove-brick VOLNAME [replica <COUNT>] <BRICK> start

      例11.2 分散ボリュームで削除操作の開始

      # gluster volume remove-brick test-volume server2:/rhgs/brick2 start
      Remove Brick start successful
    2. 以下のコマンドを使用して remove-brick 操作のステータスを表示します。
      # gluster volume remove-brick VOLNAME [replica <COUNT>] BRICK status

      例11.3 remove-brick 操作のステータスの表示

      # gluster volume remove-brick test-volume server2:/rhgs/brick2 status
      
      Node   Rebalanced-files size   scanned  failures  skipped   status  run-time in
                                                                            h:m:s
      ----      -------       ----    ----     ------    -----    -----     ------
      server2   10045       204.9MB   73522      0         0     in progress  0:10:34
      
      Estimated time left for rebalance to complete: 0:10:23
      
      上記のコマンドを実行して remove-brick 操作のステータスの監視を保持します。上記の例では、リバランスの完了までの推定時間は 10 分です。status フィールドの値が remove-brick ステータスコマンドの出力で complete に設定されている場合には、さらに次に進みます。
    3. 以下のコマンドを使用して remove-brick 操作をコミットします。
      # gluster volume remove-brick VOLNAME [replica <COUNT>] <BRICK> commit

      例11.4 ボリュームでの remove-brick 操作のコミット

      # gluster volume remove-brick test-volume server2:/rhgs/brick2 commit
    4. 以下のコマンドを使用してボリューム情報を確認します。
      # gluster volume info
      Volume Name: test-volume
      Type: Distribute
      Status: Started
      Number of Bricks: 4
      Bricks:
      Brick1: server1:/rhgs/brick1
      Brick3: server3:/rhgs/brick3
      Brick4: server4:/rhgs/brick4
      Brick5: server5:/rhgs/brick5
    5. ボリュームで remove-brick 操作をコミットした後に、ブリックの内容を確認します。残りファイルがある場合は、FUSE または NFS マウントでコピーします。
      1. サブボリュームのブリックに保留中のファイルがあるかどうかを確認します。
        ファイルとともに、アプリケーション固有の拡張属性をすべてコピーする必要があります。また、glusterFS は拡張属性を使用して内部データを保存することもできます。glusterFS が使用する拡張属性は、trusted.glusterfs.*trusted.afr.*、および trusted.gfid 形式です。上記以外の拡張属性もコピーする必要があります。
        アプリケーション固有の拡張属性をコピーし、上記と同様の効果を実現するには、以下のシェルスクリプトを使用します。
        構文:
        # copy.sh <glusterfs-mount-point> <brick>

        例11.5 コード実行のための使用

        マウントポイントが /mnt/glusterfs で、ブリックパスが /rhgs/brick1 の場合は、以下のようにスクリプトを実行する必要があります。
        # copy.sh /mnt/glusterfs /rhgs/brick1
        #!/bin/bash
        
        MOUNT=$1
        BRICK=$2
        
        for file in `find $BRICK ! -type d`; do
            rpath=`echo $file | sed -e "s#$BRICK\(.*\)#\1#g"`
            rdir=`dirname $rpath`
        
            cp -fv $file $MOUNT/$rdir;
        
            for xattr in `getfattr -e hex -m. -d $file 2>/dev/null | sed -e '/^#/d' | grep -v -E "trusted.glusterfs.*" | grep -v -E "trusted.afr.*" | grep -v "trusted.gfid"`;
            do
                key=`echo $xattr | cut -d"=" -f 1`
                value=`echo $xattr | cut -d"=" -f 2`
        
                setfattr $MOUNT/$rpath -n $key -v $value
            done
        done
      2. スプリットブレイン状態にあるファイルの一覧を特定するには、以下のコマンドを実行します。
        # gluster volume heal test-volume info split-brain
      3. 上記のコマンドの出力にリストされているファイルがある場合は、レプリカセットのブリック全体でファイルを比較し、ブリックから不要なファイルを削除して、ファイルの正しいコピーを保持します。システム管理者による手動の介入は、正しいファイルのコピーを選択するために必要です。