ちょうど先週末、メインのFreeNASマシン用に新しい(クリーンインストール)バックアップサーバーをセットアップし、それらの間で手動の完全なプールバックアップを開始しました。どちらのマシンもエンタープライズハードウェアで高速に動作し、リンクは直接10GオプティックLAN(Chelsio)です。どちらのマシンにも、Xeonv4とSupermicroベースボードを備えた高速NVMeZIL /キャッシュと128GB高速ddr4がたくさんあります。私が複製/コピーしているプールは14GBの実際のデータであり、35GBの参照データで重複排除されています(2.5倍の重複排除)。プールは、RaidZではなくストライプミラー(エンタープライズ6 + TB 7200ディスクを備えた3ウェイミラーの4セット)であるため、それらを遅くするパリティさえありません。転送用のSSH接続を除いて、サーバーまたはその接続で実行されているものは他にありません。 _zfs send
_コマンドには、重複排除されたデータを送信するために必要な引数が含まれています(ただし、監視によるものであり、圧縮されていません)。
送信者へのコマンド:
_zfs send -vvDRLe mypool@latest_snapshot | nc -N BACKUP_IP BACKUP_PORT
_
受信者へのコマンド:
_nc -l PORT | zfs receive -vvFsd my_pool
_
14TBを送信して終了するか、35TBを送信するが、すでに送信されている21TB(重複データ)は非常に高速で、14ビットとわずかTB)のいずれかが発生することを期待していました。 =送信する必要がありますが、代わりに35TBをすべて送信することを意図しているようで、その時点で非常にゆっくりです-何か間違ったことをしたか、誤解しましたか?
私が得られないのは、スナップショット/データセットをシリアル化しても、バックアップサーバーのディスクはgstat
によるとほぼ100%で実行されており、4日間稼働しているということです。データは正しく到着しています(完了したスナップ/データセットをマウントできます)。ただし、プール全体を送信するには、オールインで約7日かかり、常にほぼ100%のディスクアクティビティが発生するようです。
2台の高速サーバー間の10Gリンクで14TBまたは35TBを転送する-コンソールに表示されるステータス情報が何であれ-信じられないほどでない限り、それほど長くはかからないはずです。 )非効率的で、ありそうもないようです。
どちらのシステムも、HDDスピナーでも約500 MB/sで読み取り/書き込みが可能であり、ZFSはディスクアクセスを最適化し、データはすでに重複排除されて送信されるため、データを再重複排除する必要はありません。
なんでこんなに時間がかかるの?プール内の生のブロックを1回だけ送信しないのはなぜですか?
コメントからいくつかのポイントに返信:
netcat (nc)
は、2つのシステム間でデータをパイプするための裸の透過的な暗号化されていないtcpトランスポート/トンネルを提供します(他の用途の中でも)-ssh/VPNに少し似ていますが、速度低下やベア以外の再パッケージ化TCPネットワーク上のハンドシェイク。_zfs send
_/_zfs receive
_に関する限り、それらは直接通信しており、わずかな遅延を超えてnetcat
linkは、送信/受信が処理できる最大速度で実行する必要があります。zdb
あたりのソースプールの合計ブロック数)で約40GBです。 L2ARCを使用する前に(send/rcvで使用する場合)、両方のシステムでsysctlを設定して、重複排除テーブルおよびその他のメタデータ用に85GBのRAM、したがってキャッシュデータ用に約35GB)を予約しました。 )。したがって、どちらのマシンでも、重複排除とメタデータをRAMから削除しないでください。速度と進捗状況の更新:
圧縮についておっしゃったことから、説明したすべてのストレージサイズ/速度は非圧縮サイズであると想定しています。そうでない場合は、could転送時間を平均圧縮率に等しい係数で長くします(ただし、ディスクアクセスがボトルネックの場合は、zfs send
でディスクから読み取った後、書き込む前に解凍/圧縮が行われるため、そうではありません) zfs receive
のディスクに)。
これまでに収集した情報に基づくと、ネットワーク接続ではなく、ディスク帯域幅でボトルネックになっているようです。各システムは最大500MB /秒で読み取り/書き込みが可能であるため、35TBの最適な転送時間は約20時間です(10Gb /秒ネットワークを介した転送よりも約2.5倍遅い)。しかし、ミラーリングの設定に基づいて、読み取りと書き込みで同じスループットが得られることに驚いています。それについてはよろしいですか?送信システムでは、1つのディスクから読み取るだけで済みます(3つのディスク間で読み取りを並列化できます)が、受信システムでは、3つのディスクすべてに書き込む必要があります(したがって、最も遅いディスクのスループットに制限されます。いつでも)。受信側で書き込みスループットをテストするには、dd if=/dev/urandom of=some_file_in_pool bs=1M count=1024 conv=fdatasync
を実行できます。
受信ディスクが100%ビジーであるとおっしゃっていたので、500MB /秒の書き込み帯域幅に達していないのではないかと思います。これは、実際の書き込み制限がそれよりも低いためである可能性があります(上記のdd
コマンドで確認する必要があります)、またはシステムが受信中にメタデータの読み取りを行う必要があり、それがあなたのニースを壊している可能性があります-ディスクシークの束をミックスに追加することによるIOサイズの書き込みワークロード。 DTraceを使用して、2番目の仮説をより深く調査し、io
プロバイダーが読み取り/書き込みサイズをどのように考えているかを確認できるはずです。