web-dev-qa-db-ja.com

(ペースメーカー)Nginxは仮想IPの代わりにプライマリIPアドレスを使用してWebサーバーと通信します

Corosync/Pacemakerとnginxをリバースプロキシとして使用して、2ノードクラスター(アクティブ/パッシブ)をセットアップしました。 OSはRHEL7であり、マシンには現在1つのネットワークインターフェイスしかありません。

2つのリソースを構成しました。

  • cluster-vip共有仮想IPの場合
  • reverse-proxy for nginx

両方のリソースの宣言は次のとおりです。

pcs resource create cluster-vip ocf:heartbeat:IPaddr2 ip=192.168.0.1 cidr_netmask=24 op monitor interval=30s

pcs resource create reverse-proxy systemd:nginx op monitor interval=5s meta failure-timeout=60s

pcs constraint colocation add reverse-proxy with cluster-vip INFINITY

pcs constraint order cluster-vip then reverse-proxy

昨日、ネットワークキャプチャを実行しているときに、予期しない動作を発見しました。クライアントと通信するとき、アクティブノードは仮想IPアドレス(192.168.0.1)を使用します。内部ネットワーク上にあるWebサーバーと通信する場合、vipの代わりにインターフェイスのプライマリIPアドレスを使用します(アクティブノードに応じて192.168.0.2または192.168.0.3)。

その結果、vipがWebサーバーと通信できるようにするだけでなく、ファイアウォールに2つの異なるルール(1つはnode1用、もう1つはnode2用)を作成する必要があります。他のノードをクラスターに追加する予定ですが、すべてのノードを1つずつ許可する必要はなく、vipを一度だけ許可すると便利です。

この動作には論理的な説明がありますか?ペースメーカーにVIPのみを使用するように指示する方法はありますか?そして、それは良い習慣ですか?馬鹿なことはしたくないので、やらないと思ったら喜んで聞いてみます。

よろしく

2
Litame

これは、ペースメーカーに仮想IPのみを使用するように指示することではなく、Nginxに仮想IPのみを使用するように指示することの問題ではないと思います。

私はNginxの専門家ではありませんが、ドキュメントを読んで、proxy_bindという名前の構成ディレクティブを見つけました。これは、望ましい動作を実現するために設定する必要があるものかもしれないと思います。 Nginxのドキュメントから ここ

プロキシサーバーに複数のネットワークインターフェイスがある場合、プロキシサーバーまたはアップストリームに接続するために特定の送信元IPアドレスを選択する必要がある場合があります。これは、NGINXの背後にあるプロキシサーバーが特定のIPネットワークまたはIPアドレス範囲からの接続を受け入れるように構成されている場合に役立つことがあります。

3
Dok