このトピックでは、rsyncコマンドラインツールを使用してネットワークファイルシステム (NFS) ファイルシステム間でデータを移行する方法について説明します。
前提条件
ソースNFSファイルシステムが作成され、データが格納されます。 NFSファイルシステム用に仮想プライベートクラウド (VPC) タイプのマウントターゲットが作成されます。
課金
NASファイルシステム間の移行には、次のコストがかかります。
データ転送の中間ノードとしてElastic Compute Service (ECS) インスタンスを使用する場合、インスタンス設定に基づいてECSインスタンスに対して課金されます。 ECSの課金の詳細については、「概要」をご参照ください。
2つのNASファイルシステムのストレージ使用量に対して課金されます。 ストレージ使用料を相殺するためにリソースプランを購入することを推奨します。 NASの課金の詳細については、「課金の概要」をご参照ください。
Cloud Enterprise Network (CEN) を使用してVPCを接続する場合、使用したトランジットルーターおよびリージョン間接続に対して課金されます。 CENの課金の詳細については、「課金ルール」をご参照ください。
始める前に
NASファイルシステム間でデータを移行する場合、ECSインスタンスはソースNASファイルシステムとターゲットNASファイルシステムの両方にアクセスできる必要があります。 したがって、ソースNASファイルシステムとターゲットNASファイルシステムに同じVPCからアクセスできることを確認する必要があります。
ソースファイルシステムのマウントターゲットに関する情報を表示します。
データを移行する前に、ソースファイルシステムのマウントターゲットとマウントターゲットが存在するVPCに関する情報を取得する必要があります。 詳細については、「マウントターゲットの表示」をご参照ください。
説明NFSファイルシステムのマウントターゲットがクラシックネットワークで作成されている場合、ファイルシステムのVPCにマウントターゲットを作成する必要があります。 詳細については、「マウントターゲットの作成」をご参照ください。
移行先ファイルシステムのマウント対象を設定します。
ファイルシステムは同じリージョンにあります。
移行先ファイルシステムと移行元ファイルシステムのマウントターゲットが同じVPCに属している場合、マウントターゲットに関する情報を取得してデータを移行できます。 詳細については、「データの移行」をご参照ください。
移行先ファイルシステムと移行元ファイルシステムのマウントターゲットが異なるVPCに属している場合、次のいずれかの方法でマウントターゲットを準備できます。
ターゲットリージョンとゾーンにファイルシステムを作成します。 ファイルシステムのマウントターゲットが自動的に作成されます。 詳細については、「NASコンソールでの汎用NASファイルシステムの作成」をご参照ください。
説明従量課金制の汎用NASファイルシステム (容量、パフォーマンス、またはプレミアム) をNFSプロトコルで購入する場合は、ソースマウントターゲットで使用されるVPCとvSwitchを選択します。 ファイルシステムのマウントターゲットが自動的に作成されます。 ファイルシステムを作成した後、リソースプランを購入して、ファイルシステムのストレージ使用料を相殺することができます。
ターゲットファイルシステムのマウントターゲットを作成します。 詳細については、「マウントターゲットの作成」をご参照ください。
CENを使用して、移行先マウントターゲットと移行元マウントターゲットのVPCを接続します。 詳細については、「CENを使用した同じリージョンのVPC間のNASファイルシステムのマウント」をご参照ください。
ファイルシステムは、異なるアカウントに属するか、異なるリージョンに存在します。
ターゲットファイルシステムとソースファイルシステムのマウントターゲットが異なるアカウントに属している場合、または異なるリージョンにある場合は、CENを使用してVPCを接続する必要があります。 詳細については、「CENを使用したアカウントとリージョン間のNASファイルシステムのマウント」をご参照ください。
データの移行
移行元と移行先のマウントターゲットを準備したら、新しいECSインスタンスを購入し、ECSインスタンスに2つのNFSファイルシステムをマウントしてから、rsyncツールを使用してデータを複製します。 データを移行するには、次の手順を実行します。
ソースとターゲットのファイルシステムをECSインスタンスにマウントします。
重要データを移行する場合は、新しいECSインスタンスを購入することを推奨します。 既存のECSインスタンスを使用してデータを移行する場合、移行タスクは、実行中のワークロードに割り当てられているCPUおよびネットワーク帯域幅リソースを消費する可能性があります。
ECSコンソールにログインし、[インスタンスの作成] をクリックします。 表示されるページで、次のパラメーターを設定します。
リージョン: ソースファイルシステムが存在するリージョンを選択します。
ネットワークとゾーン: ソースファイルシステムが存在するVPCとゾーンを選択します。
インスタンス: 最小仕様を選択します。
画像: CentOS 7.6を選択します。
ストレージ: [NASファイルシステム (オプション)] をクリックし、[ファイルシステムの追加] をクリックします。 次の図は、詳細な設定を示しています。
説明ソースと宛先のマウントターゲットが同じVPCにある場合、ECS購入ページでNASファイルシステムのマウント情報を設定できます。 ECSインスタンスを起動すると、ソースNASファイルシステムとターゲットNASファイルシステムが自動的にインスタンスにマウントされます。
ソースマウントターゲットとターゲットマウントターゲットが異なるVPC、リージョン、またはアカウントに属している場合、ECS購入ページでソースファイルシステムを設定するだけで済みます。 ECSインスタンスを作成した後、ターゲットファイルシステムを手動でECSインスタンスにマウントできます。 詳細については、「NFS ファイルシステムのマウント」をご参照ください。
ECSインスタンスを作成し、ECSインスタンスにソースNASファイルシステムとターゲットNASファイルシステムをマウントした後、次のコマンドを実行して、マウントが成功したかどうかを確認します。
mount | grep nas.aliyuncs.com
次のような出力が表示された場合、ファイルシステムがマウントされます。 ソースファイルシステムは
/mnt/volumeA
ディレクトリにマウントされ、ターゲットファイルシステムは/mnt/volumeB
ディレクトリにマウントされます。データの移行に使用するツールをインストールします。
次のコマンドを実行して、データの移行に使用するツールをインストールします。
sudo yum install -y rsync tmux
説明rsyncツールは、データのコピーに使用されます。
tmuxツールは、rsyncのインストールの進行状況を確認するために使用されます。
既存のデータを移行します。
次のコマンドを実行して、ソースファイルシステムに格納されている既存のデータをターゲットファイルシステムに同期します。
tmux sudo rsync -avP /mnt/volumeA/ /mnt/volumeB/
rsyncを使用して、データを同時にコピーおよびアップロードすることもできます。 以下のコマンドを実行します。
threads=<Number of threads>; src=<Source path/>; dest=<Destination path/>; rsync -av -f"+ */" -f"- *" $src $dest && (cd $src && find . -type f | xargs -n1 -P$threads -I% rsync -av % $dest/% )
たとえば、スレッド数は10、ソースパスは /abc、宛先パスは
/mnt1
です。threads=10; src=/abc/; dest=/mnt1/; rsync -av -f"+ */" -f"- *" $src $dest && (cd $src && find . -type f | xargs -n1 -P$threads -I% rsync -av % $dest/% )
説明rsyncコマンドのソースパスは、スラッシュ (/) で終わる必要があります。 それ以外の場合、データが同期された後、ソースパスは宛先パスと一致しません。
tmuxコマンドは、新しいtmuxセッションを作成する。 tmuxセッションで
rsync
と入力して、データ移行の進行状況を表示できます。 移行中にECSインスタンスが切断された場合、ECSインスタンスにログインし、tmux attach
コマンドを実行してtmuxセッションを再開し、移行の進行状況を確認します。テストの結果、合計サイズ100 GiB (各100 KiB) のファイルをソースファイルシステムからターゲットファイルシステムに移行するには320分かかることがわかります。
増分データを移行します。
他のECSインスタンスで実行されているアプリケーションがデータ移行中にソースファイルシステムにデータを書き込む場合、既存のデータの移行後に増分データを移行先ファイルシステムに移行する必要があります。
ソースファイルシステムを使用するアプリケーションの実行を停止します。
増分データ移行中にソースファイルシステムにデータが書き込まれないようにするには、増分データを同期する前に、ソースファイルシステムを使用するECSインスタンスおよびコンテナ上のすべての実行中のアプリケーションを停止する必要があります。
重要ソースファイルシステムを使用するすべてのアプリケーションを停止した後、ソースファイルシステムからデータを削除しないでください。 そうしないと、増分データ移行中にデータが失われる可能性があります。
オフピーク時に増分データを移行することを推奨します。 fuser -mv
<dir>
コマンドを実行して、ソースファイルシステムにデータを読み書きするプロセスのIDを検索できます。
増分データを同期します。
次のコマンドを実行して、既存のデータをターゲットファイルシステムに移行するときに生成される増分データを同期します。
sudo rsync -avP --delete /mnt/volumeA/ /mnt/volumeB/
rsyncコマンドは、増分データを同期する前にソースディレクトリをスキャンします。 したがって、少量のデータを移行するのに必要な時間が予想よりも長くなる可能性があります。
警告コマンドの -- deleteオプションを使用して、増分データ移行中にソースから削除されたデータをターゲットファイルシステムから削除します。 このオプションを使用する場合は、コピー先のファイルシステムから誤ってデータが削除されないように注意してください。
移行結果を確認します。
移行が完了したら、次のコマンドを実行して、移行先ファイルシステムに格納されているデータが移行元ファイルシステムに格納されているデータと一致しているかどうかを確認します。
sudo rsync -rvn /mnt/volumeA/ /mnt/volumeB/
次の図に示すように、2つのファイルシステムのデータが一致している場合、ファイルパスは返されません。
ワークロードを新しいファイルシステムに切り替える
データの移行後に現在のワークロードを元のファイルシステムから新しいファイルシステムに切り替える場合は、すべてのECSインスタンスとコンテナから元のファイルシステムをアンマウントし、新しいファイルシステムをインスタンスとコンテナにマウントします。
新しいファイルシステムをECSインスタンスにマウントするには、次の手順を実行します。
mount | gre p nas.aliyuncs.com
を実行して、既存のNASファイルシステムのマウント情報を記録します。 ファイルシステムがマウントされているディレクトリ <dir> に注意してください。fuser -mv<dir>
コマンドを実行して、ファイルシステムにデータを読み書きするプロセスのIDを見つけます。 次に、kill -9
コマンドを実行してプロセスを停止します。umount <dir>
コマンドを実行して、元のファイルシステムをアンマウントします。新しいファイルシステムを元の <dir> ディレクトリにマウントします。 マウントパラメーターの詳細については、「NFSファイルシステムのマウント」をご参照ください。
新しいファイルシステムにアクセスするプロセスを再起動して、プロセスがファイルシステムに対して期待どおりに読み取りおよび書き込み操作を実行できるかどうかを確認します。
元のマウントターゲットを新しいマウントターゲットに置き換えて、/etc/fstabファイルの自動マウント情報を変更します。
新しいファイルシステムをKubernetesコンテナにマウントするには、次の手順を実行します。
元のマウントターゲットを新しいマウントターゲットに置き換えて、動的ボリュームまたは永続ボリュームのYAML構成ファイルを変更します。
変更した構成ファイルを使用して、新しいポッドを生成します。 新しいファイルシステムがポッドにマウントされており、ポッドがファイルシステムに対して期待どおりに読み取りおよび書き込み操作を実行できることを確認します。
元のファイルシステムを使用するすべてのポッドをリサイクルします。
ワークロードを新しいファイルシステムに切り替えた後、元のファイルシステムに保存されているデータを少なくとも1週間保持します。 元のファイルシステムからすぐにデータを削除すると、誤った削除や誤った同期によりデータが失われる可能性があります。