PHP-FPMサーバーがいくつかあり、データベース接続が必要な場合は、HAProxyサーバーに接続して、使用するデータベースサーバーを選択すると、接続が開きます。次に、HAProxyサーバーでメンテナンス(HAProxyの再起動が必要な構成の変更など)を実行する場合のプロセスは次のとおりです。
ステップ2が発生すると、その時点で開いているmysql接続はどうなりますか? this TCP Sessions and IP Changes question 接続が切断されます。これは本当ですか?もしそうなら、防ぐために何ができるでしょうか?これは起こっていますか?接続は、サーバーのメイン(非フローティング)IPを使用するように何らかの方法で強制できますか?
また、Keepalivedが実行されている2つのNginxサーバーを使用した同様のセットアップがあり、同等のプロセスを実行することを計画していました。その場合、同じ質問が当てはまります。IPが他のサーバーに移動すると、既存のhttp接続はどうなりますか?
私はあなたの助けに感謝します。
それらは切断されます。 TCP IPアドレスを変更するためのプロトコル部分がないため、クライアントはIPアドレスが魔法のように変更されたことを認識できません。新しい接続を確立する必要があります。
TCP接続に使用するIPアドレスは、接続が確立されたときにクライアントによって選択されます。接続前にソケットを特定のIPにバインドすることにより、アプリケーション層によって選択できます。または、アプリケーション層が選択を行わなかった場合はカーネルによって。
カーネルによる選択は、いくつかの異なる方法で制御できます。静的IPアドレスとフローティングIPアドレスの両方を持つホストは、発信接続に静的IPアドレスを使用するように構成する必要があります。 IPを着信接続にのみ使用し、発信接続には使用しない場合は、ダミーインターフェイスに割り当てることができます。
デフォルトでは、カーネルによって選択されたIPアドレスは、TCP SYNパケットが送信されるインターフェイスに割り当てられたものです。IPv6を使用している場合は、よりきめ細かい制御が可能です。ここにいくつかあります。 Linuxで使用できるコマンドの例:
/sbin/ip -6 addr change 2001:db8::234 dev eth0 preferred_lft 1
/sbin/ip -6 addr change 2001:db8::1 dev eth0 preferred_lft 0
上記のコマンドのペアは、2001:db8::234
を介して送信されるSYNパケットにeth0
を使用します。