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


13

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

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

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

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


3
おそらく考えたことはありますが、言及していません。関連するDNSエントリのTTLを減らすことを忘れないでください。
cjc

このWebサイトは人間だけが使用するのですか、それとも接続する可能性のあるアプリケーションがありますか?たとえば、Webサービスを使用しますか?その場合、ダウンタイムが発生する可能性があります。JavaはDNSの結果をキャッシュし、再起動されるまで新しいDNSエントリを尊重しない場合があります。長時間オンラインで転送を維持できない場合。また、暗号化リダイレクトを使用する場合は、いくつかの追加手順が必要です。
ブラム

どんな種類のデータベースを使用していますか?DNSを変更してもダウンタイムの問題は解決されないという点であなたは正しいです。私はこれを常に仕事で行っており、詳細な手順を提供できますが、同じサーバー上にデータベースがある場合、通常簡単に終わる小さな問題がスローされます来て
アンソニーフォルニート16

また、あなたは答え、彼らのLinuxへのすべてのポイントのいくつかを読んだが、後に、私は本当にあなたがLinuxの味対IISを使用していることをあなたの質問に何を参照してくださいいけない、WindowsまたはLinuxの種類、サーバーの何がありますか
アンソニーFornito

回答:


19

私のために働いた方法は次のとおりです:

  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サーバーに通知しない場合、古いサーバーからのものであると考えるため、最後の手順が必要です。

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


-Dではなく-Aを意味しましたか?? -Dはルールを削除するのではありませんか?とにかく、私が行った後、古いボックスはウェブをもうロードしていないので確実にリダイレクトしようとしていますが、新しいウェブも表示されていないので失敗します、接続がタイムアウトしたとだけ言います。他に必要な設定はありますか?私の新しい箱に何かありますか?
デニスプシェノフ

気にしないで、私はそれを修正しました!岸壁がリダイレクトをブロックしていたことがわかりました。ルールで許可していました。
デニスプシェノフ

私はそのことについて申し訳ありません。あなたは正しい、それは-Dでなく-Aだった。投稿を更新しました。
シャインパドマジャン

1
警告-iptablesを使用したアプローチでは、すべてのトラフィックが新しいサイトに転送されますが、そこに到着すると、元のブラウザの実際のIPアドレスではなく、古いサーバーから発信されたように見えます。これにより、地理的分析などが中断されます。特に、電子メール用にこの方法でポート25を転送するように誘惑されたり、古いサーバーを介したスパマーからのメールが新しいサーバーによって自分のマシンの1つからのものであるかのように扱われるため、誤ってオープンリレーを作成する可能性があります信頼され、中継が許可されます。
ゲイリービルカス

@ShainPadmajan、遅くなりましたが、ありがとうございました。これは2015
。-アビシェークマダニ

5

複数の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つが失敗した場合、クライアントは次のものに移動して試行します。

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


ただし、新しいサーバーが起動するまで、Aレコードを追加しないでください。:)
アーロンコプリー

@アーロン:どうして?Aレコードの追加には数時間(完全にアクティブになるまで最大24時間)かかり、2番目のサーバーが稼働していない限り、クライアントは最初のサーバーを選択します。
JapyDooge

ゾーンのTTLが期限切れになると、リソースについてネームサーバーに再度問い合わせが行われ、両方の回答が得られます。新しいAレコードを追加し、サーバーを起動するために任意の時間待機した場合、人々はおそらくまだ利用できないホストに既に解決しているでしょう。新しいサーバーがすでに稼働している場合、心配する必要はありません。
アーロンコプリー

1

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

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

私はあなたのソリューションが好きです。しかし、私はVIPとその入手方法に慣れていません。正しい方向に向けていただけますか?
デニスプシェノフ

本当に簡単です。次のようなコマンドifconfig eth0:0 <ip> <mask> upは、IPで構成されたサブインターフェースを作成し、ifconfig eth0:0 downそれを無効にするのに十分です。
ハレド

0

さて、データベースの複製について述べたので、次のことをしなければなりません。

  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レコードを変更する

apt-get install rinetdを実行し、/ etc / rinetd.confを新しい設定に変更し、/ etc / init.d / rinetd restartで再起動しましたが、リダイレクトしません。また、ログ/var/run/rinetd.logには何も表示されません
Denis Pshenov

あなたのショーiptables-savecat /etc/sysctl.conf | grep ip_forwardしてください。
yadaya

0

Webサーバーの1つがメンテナンスモードに移行するときに、セカンダリサーバーが引き継ぐときに、Webサーバーの前でHA-Proxyを使用できます。


-1

何をすべきかのリストは非常に賢明です。

例として、古いサーバーでapacheで次のような操作を行う場合、apacheを使用すると仮定します。

redirect permanent / http://newserver.example.com

ユーザーは、古いサイトを参照すると、ブラウザーに新しいドメインが表示されます。この場合、リダイレクトはブラウザーが実行されている限り永続的です。

したがって、他の変更に加えてWebサーバーに何らかのリダイレクトを実装する限り、問題ないはずです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.