11.9. ボリュームの移行
信頼できるストレージプールがオンラインになり、利用可能な場合に、データはブリック全体に再配布できます。次に、新しいサーバーのブリックを置き換えて、信頼済みストレージプールに新規サーバーが正常に追加されたことを確認します。
注記
replace-brick 操作を実行する前に、Red Hat Gluster Storage リリースノートの replace-brick 操作に関連する既知の問題を確認してください。
11.9.1. 分散ボリュームまたは複製ボリュームでのサブボリュームの置き換え
この手順は、置き換えるサブボリュームからのブリックが 1 つ以上オンラインの場合にのみ適用されます。Distribute ボリュームの場合は、置き換える必要のあるブリックをオンラインにする必要があります。Distribute-replicate の場合は、置き換える必要のあるレプリカセットのサブボリュームからの少なくとも 1 つのブリックをオンラインにする必要があります。
サブボリューム全体を Distribute-replicate ボリュームの新しいブリックに置き換えるには、以下の手順に従います。
- 新しいブリックをボリュームに追加します。
# gluster volume add-brick VOLNAME [replica <COUNT>] NEW-BRICK
例11.1 ボリュームへのブリックの追加
# gluster volume add-brick test-volume server5:/rhgs/brick5 Add Brick successful
- 以下のコマンドを使用してボリューム情報を確認します。
# 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 コマンドにレプリカ数と同じ数のブリックを指定する必要があります。 - サブボリュームから置き換えるブリックを削除します。
- 以下のコマンドを使用して 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
- 以下のコマンドを使用して 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
に設定されている場合には、さらに次に進みます。 - 以下のコマンドを使用して 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
- 以下のコマンドを使用してボリューム情報を確認します。
# 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
- ボリュームで remove-brick 操作をコミットした後に、ブリックの内容を確認します。残りファイルがある場合は、FUSE または NFS マウントでコピーします。
- サブボリュームのブリックに保留中のファイルがあるかどうかを確認します。ファイルとともに、アプリケーション固有の拡張属性をすべてコピーする必要があります。また、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
- スプリットブレイン状態にあるファイルの一覧を特定するには、以下のコマンドを実行します。
# gluster volume heal test-volume info split-brain
- 上記のコマンドの出力にリストされているファイルがある場合は、レプリカセットのブリック全体でファイルを比較し、ブリックから不要なファイルを削除して、ファイルの正しいコピーを保持します。システム管理者による手動の介入は、正しいファイルのコピーを選択するために必要です。