はじめに
前回は 実践編!Amazon S3/Google Cloud Storage エンタープライズデータ保護のテクニック 中編 として 3-2-1 ルールや制約、検証で分かった制限事項を説明してきました。今回はベストプラクティスやトラブルシューティングについて解説していきます!
総所有コスト(TCO)
NetBackup を使ってs3fs をバイパスする保護を実装するには次のコストを考慮する必要があります。
- クラウドに対して行われた API 要求の数
- データ転送コスト
- ストレージコスト
- クラウドでマシンをホストするコスト
- FETB(フロントエンドテラバイト)ないし、アラカルトのライセンス料金
通常はこれらの要因がコストに影響しますが、コストの要因は環境やクラウドプロバイダーによって異なります。s3fs は S3 互換ストレージへデータをアップロードあるいはダウンロードするために、クラウドプロバイダーによるコストがかかります。
ベストプラクティスと考慮事項
ベストプラクティスと考慮事項はこちらを参考にしてください。
• バックアップに使用する NetBackup メディアサーバーに S3バケットをマウントします。メディアサーバーが Linux 以外の場合は、別の NetBackup クライアントまたはメディアサーバーが必要です。
• パフォーマンスを向上させるにはアクセラレータを有効にします。アクセラレータはフルバックアップでも、変更時間に基づいてファイルの読み取りを回避します。基本的な考え方として、最初のバックアップと 2 番目のバックアップの間で 10% のファイルだけが変更された場合、2 番目のバックアップは最初のバックアップにかかった時間の10%程度です。
• バックアップではバケットをマウントしたままにします。バケットを再マウントするとinode 番号が変更されます。これはアクセラレータの最適化に影響します。NetBackup アクセラレータは、バックアップ間で inode のファイル数を比較し、ファイルが変更されたかどうかを判断します。しかし FUSEはファイルシステムのマウント中にiノードのファイル数を変更することができます(開いているファイルの場合は変更できません)。これにより、Accelerator はファイルが変更されたことを確認しバックアップを作成します。 これを回避するには s3fs でバケットをマウントしている間、FUSE の remember =-1 オプションを使用します。
詳細は以下を確認してください。
https://libfuse.github.io/doxygen/structfuse__config.html
例えば以下のようなコマンドを発行します。
/usr/bin/s3fs <バケット名> /awsmount -o url=http://s3.amazonaws.com -o remember =-1
• パフォーマンスを向上させるために複数のストリームを使用してデータをバックアップします。この場合、追加の帯域幅が必要になりメディアサーバーの CPU 消費が増加します。設定方法はこちらをご覧ください。
• アクセラレータと s3fs のキャッシュは同じデータを繰り返し読み取らないようにする代替手段です。アクセラレータを使用できない場合は、s3fs データキャッシュを有効にし、s3fs の use_cache パラメータを使います。これにより、s3fs はクラウドからではなくローカルキャッシュからデータを読み取ります。キャッシュされたコピーが使えるかどうかを理解するために、s3fs はファイルの変更時間とS3ストレージから返されたファイルチェックサムを比較します。これらのいずれかが変更された場合、s3fs はキャッシュを再ダウンロードして更新します。これは、連続バックアップで同じデータを読み取り続ける NetBackup のようなアプリケーションに適しています。 キャッシュを使用する場合は次の予防的措置を講じる必要があります。
- キャッシュを使用する場合、1047 に遭遇する可能性があります。
- ensure_diskfree パラメータが正しく設定されていることを確認してください。 設定されていない場合、キャッシュのために構成されたパーティション全体が占有されてしまうことに配慮します。
- キャッシュサイズがバックアップ対象のサイズより大きい場合はより良い性能が得られます。
- 設定済み (かつ使用可能な) キャッシュサイズは、少なくとも最も大きなオブジェクトと同等以上のサイズであることが期待されます。それ以外の場合は s3fs はスペースが使用可能になるのを待機するため、バックアップ処理をポーズします。
-
s3fs は設定されたキャッシュサイズを使い尽くすまでデータキャッシュをトリミングしません。 データキャッシュを定期的にトリミングするにはスクリプトを実行します。例えば以下のようなスクリプトを実行します。
https://github.com/s3fs-fuse/s3fs-fuse/blob/master/test/sample_delcache.sh
• NetBackup はファイルをバックアップするときにデフォルトでファイルのアクセス時間をバックアップ前の状態にリセットします。ただしこれは、s3fsファイルシステムの場合、S3 ストレージに対して HTTP PUTをコールする必要があることを意味します。特に多数のファイルがある場合にパフォーマンスに悪影響を及ぼします。
NetBackupでは、バックアップ後のアクセス時間を保持するためにファイルのアクセス時間をバックアップ前の値にリセットする機能を提供しています。詳細はこちらをご覧ください。このオプションはデフォルトで true ですが、オフにするとバックアップのパフォーマンスが向上します。
メモ:アクセラレータでポリシーを構成した場合、この構成は無視されます。
• ファイルのサイズよりもファイルの数がバックアップ時間に影響します。ファイル数が増えるとバックアップの処理が遅くなります。これは、s3fs がファイル (オブジェクト) メタデータを取得するために、より多くの HTTP コールを起動する必要があるためです。推奨事項の 1 つは、マルチストリーミングを使用することです。詳細はこちらを参照してください。
• s3fs マウントに復元すると、s3fs は並列スレッドを持つマルチパートリクエストとしてデータをアップロードします。同時実行についてはparallel_countパラメータ (既定値は 5)、各パーツのサイズ multipart_size パラメータ (デフォルトは 10 MB)を用いて制御します。
• データはクラウドから読み取られるため、メディアサーバーはクライアントがデータを送信するのを待つ必要があります。これにより、タイムアウトが発生する可能性があります。タイムアウトを避けるには、クライアントのリードタイムアウトにより大きな値を設定します。 詳細はこちらを参照してください。
• バックアップセレクションでALL_LOCAL_DRIVES ディレクティブを設定し、NFS をフォローする (Follow NFS) オプションをポリシー属性の設定に含めます。
トラブルシューティング
-curldogフラグを設定し、s3fs を実行すると S3 に対して行われたすべての curlリクエストの URL とヘッダーが出力されます。これは問題のトラブルシューティングに役立ちます。トラブルシューティングのために、これらのログを bpbkar と tar ログと突き合わせる必要があるケースがあります。
おわりに
いかがでしたでしょうか。アクセラレータもきちんと機能しますので、マージ処理不要の永久増分高速バックアップも期待できますね!ちなみに Azure BLOB の保護の技法についてはこちらで公開していますので、合わせてご参照ください!
商談のご相談はこちら
本稿からのお問合せをご記入の際には「コメント/通信欄」に#GWCのタグを必ずご記入ください。ご記入いただきました内容はベリタスのプライバシーポリシーに従って管理されます。
その他のリンク
【まとめ記事】ベリタステクノロジーズ 全記事へのリンク集もよろしくお願い致します!