ダウンタイムを最小限に抑えながら、あるサーバーから別のサーバーにデータを移行する方法は?

ダウンタイムを最小限に抑えながら、あるサーバーから別のサーバーにデータを移行する方法は?

私はかなり大きなユーザーベース(約10,000人のユーザー)を持ち、各ユーザーのクォータが約GBのmaildir形式を使用してdovecotを実行するサーバーを持っています。

物理メールディレクトリは、NFSを介してEメールサーバーにマウントされている別のストレージシステムに保存されます。

ストレージシステムのパフォーマンス上の問題により、新しいストレージシステムにアップグレードしています。古いシステムから新しいシステムにデータを直接同期しましたが、プロセスにはかなり長い時間がかかります(16時間以上)。

私たちの計画は、rsyncを継続的に実行し、2番目のタスクが完了したらすぐにメールサーバーからdovecot / qmail / etcを削除し、インストール場所を新しいシステムに切り替えてから電子メールを復元することです。運が良ければダウンタイムは合計1~2分に過ぎません。問題は、最後に、rsyncが実行されたときに電子メールがまだコピーされないことです。したがって、これを軽減するために、切り替え後に通常使用される --delete フラグを使用せずに再度 rsync を実行します。これにはいくつかの問題がありますが、私の視点で最大の問題は、ユーザーが移行直前に持っていた電子メールにアクセスできないことです。

ダウンタイムを最小限に抑え、時間を無駄にせずにこれを行う方法について提案がある人はいますか?以前のストレージシステムはNetAppであり、新しいシステムは大きな山が接続されたfreebsdボックスであり、電子メールサーバーはUbuntuです。

移行が完了するまで、ユーザーの観点からストレージシステムをネストする方法があるはずですが、どうすればよいかわかりません(可能であれば)

答え1

あなたは次のようにこれを行うことができますオブまたは連合ファイルシステム

どちらのファイルシステムも「共同」ファイルシステムです。あなたは次のことをします

  • 既存のNASをインストールしてください。/mnt/old
  • 新しいNASを次の場所にインストールします。/mnt/new
  • ここ/mnt/nasに統合ファイルシステムをマウントします。/mnt/new/mnt/old
  • そのペアへのすべてのアクセスは/mnt/nas/foo/bar最初に照会され、/mnt/new/foo/bar存在しない場合は再び置き換えられます/mnt/old/foo/bar。ファイルを変更すると、元のファイルがコピーされ、変更されたバージョンがコピー/mnt/old/mnt/new/mnt/newます。
  • rsync統合ファイルシステムをマウントしたら、fromから/mnt/old実行できます/mnt/new。これはシステムの実行中に実行できます。 rsyncがファイルを保存すると、Accessは/mnt/nasファイルの選択を開始します。/mnt/new

答え2

次のように続けるのはどうですか?

  1. 最初の同期
  2. 421 Service not available, closing transmission channelバナーでキューメール返信を作成
  3. 2番目の同期
  4. キューメールの元の構成を復元します(または別のサーバーに切り替えます。その部分があるかどうかわからない)

これにより、顧客は後で電子メールを再送信しようとすると信じることができます。

答え3

ストレージバックエンドを変更すると、多くのダウンタイムを避けることはできないようですが、いくつかのオプションがあります。しかし、最善の選択はあなたのニーズと状況に合わせて調整されます。

メッセージをランダムに削除したくない場合は、421、450、または452で応答してストレージシステムへの書き込みを停止する必要があります。個人的には、450「ユーザーの電子メールは利用できません」を選択します。

したがって、Rsyncを実行して450を返し、rsyncを実行して最後に変更を保存します。

電子メールは信頼できるものではないことを覚えておいてください。それが私たちがそれを見なければならない方法です。メッセージを受け入れることができないということは、メッセージを送信したサーバーが再試行する必要があることを意味します。通常、これは24時間ごとに4時間ごとに行われますが、これは規則ではなく「正常」です。

ただし、NFSを使用していない場合(またはそのようなNFSサーバーにアクセスできる場合)、ストレージをある種のクラスタに入れてから、新しいストレージをクラスタに追加して古いストレージを削除できます。これは、ある種のRAID(同じマシン上にある場合)またはDRBDなどのものを使用して実行できます。アイデアは、クラスタに新しいサーバーを追加する一般的なサーバーアップグレードパスに従い、「追いつく」時間をかけて古いサーバーを削除することです。

関連情報