web-dev-qa-db-ja.com

サーバーの変更-新しいIPにリダイレクト=ダウンタイムなし?

ウェブサイトのサーバーを変更しています。古いサーバーのIPを新しいサーバーに移動することはできません。ダウンタイムをなくすために、私は次のことを計画しています。誰かがそれが機能することを確認してください:

  1. 新しいサーバーをセットアップし、新しいIPをリッスンします
  2. 古いサーバーはすべてのトラフィックを新しいIPにリダイレクトします
  3. 新しいIPを指すようにDNSレコードを変更する

私のロジックによると、古いボックスから新しいIPにリダイレクトすると、ユーザーにはブラウザーにドメイン名は表示されず、新しいIPが表示されます。ユーザーがブラウザにドメイン名を表示できるように、新しいIPにリダイレクトしてHOSTNAMEと一緒に送信する方法はありますか?

これは、サイトが常に使用されており、伝播中にデータベースが新しいサーバーと古いサーバーの間で同期されないため、DNS設定を変更するだけでは機能しないためです。

13
Denis Pshenov

これが私のために働いた方法です:

  1. ファイルとデータベースを新しいサーバーと同期します。
  2. カットオフの直前に再同期を実行します。
  3. 新しいサーバーを指すようにDNSを変更します。
  4. DNSの伝播が完了するまで、古いIPに送信された要求を新しいサーバーに転送します。

手順4は次のとおりです。

LinuxサーバーでIPTablesを構成して、ポート80(デフォルトのWebサーバーポート)に着信するすべてのトラフィックをIP 122.164.34.240。最初のステップは、この種の転送が行われるようにLinuxボックスを設定することです。ターミナルウィンドウを開き、rootユーザーとしてログインして、次のコマンドを実行します。

# echo 1 >/proc/sys/net/ipv4/ip_forward

次のステップは、トラフィックを新しいサーバーにリダイレクトするようにIPTablesに指示することです。

# iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 122.164.34.240

ここでIPTablesマジックが起こります。最後の3番目のステップでは、IPTablesに新しいサーバーのポート80への接続の起点を書き換えて、古いサーバーからのように見えるように指示します。

# iptables -t nat -A POSTROUTING -p tcp -d 122.164.34.240 --dport 80 -j MASQUERADE

接続がクライアントマシンからのものであることを新しいサーバーのWebサーバーに通知しない場合、接続が古いサーバーからのものであると考えるため、最後の手順が必要です。

データベースと電子メールサーバーポートについても、これを繰り返すことができます。

19
Shain Padmajan

複数のAレコードを追加することもできます。たとえば、Googleはこれを使用し、nslookupの出力を確認します。

Name:       google.com
Addresses:  209.85.148.101
            209.85.148.102
            209.85.148.113
            209.85.148.138
            209.85.148.100
            209.85.148.139

ドメインに複数のAレコードを追加すると、訪問者は複数のIPを受け取り、その順序でそれらを試します。 1つが失敗すると、クライアントは次のクライアントに移動して試行します。

24時間前に追加のAレコードとして新しいIPをセットアップし、新しいサーバーを起動し、古いサーバーをシャットダウンして、IPを削除します。

5
JapyDooge

別のオプションは、VIP(仮想IP)を使用することです。したがって、手順は次のようになります。

  1. 新しいサーバーをセットアップし、新しいIPをリッスンします。
  2. VIP=を古いサーバーに追加します。
  3. VIP IPを指すようにDNSレコードを変更します。これまでは、すべてのトラフィックが古いサーバーに送信されますが、VIPを使用しています。
  4. 準備ができたら、VIP=を新しいサーバーに移動します。
  5. 必要に応じて、DNSを新しいサーバーIPに変更し、VIP(しばらくすると))をDNSから削除できます。
1
Khaled

OK、データベースのレプリケーションについて説明したので、次のことを行う必要があります。

  1. 2つのサーバーのデータベース間のレプリケーションをセットアップします。
  2. カットオーバー中に、新しいサーバーのDBをプライマリとして、古いサーバーを読み取り専用にします。
  3. 古いサーバーと新しいサーバーの両方で、アプリケーションのデータベース接続文字列が新しいサーバーを指すようにします。サイトでセッションを使用している場合は、セッションがDBで永続化されていることを確認してください。
  4. DNSのIPアドレスを新しいサーバーに変更します。
  5. 両方のサーバーを少なくとも48時間実行し続けます。
0
  1. 新しいサーバーをセットアップし、新しいIPをリッスンします
  2. 次に、透過的なリダイレクトを構成します。古いサーバーにrinetdをインストールします。

Rinetd.conf内:

OLD_SERVER_IP 80 NEW_SERVER_IP 80
  1. 新しいIPを指すようにDNSレコードを変更する
0
yadaya

webサーバーの前でHAプロキシを使用できます。その1つがメンテナンスモードになると、セカンダリサーバーが引き継ぎます。

0
apoc