特定の構成で、2台のバックエンドサーバーの前にHAProxyを設定しています。すべての要求はサーバーAに送信する必要があります。ただし、サーバーAが5xxエラーコードを返す場合、すべての要求はバックアップサーバーBに送られます。Aが「up」を返すと、すべての要求がAに送られます。
私はこの構成を試しています:
backend example_cluster
balance roundrobin
option httpclose
option forwardfor
option httpchk HEAD /ping.html HTTP/1.0\r\nHost:www.example.com
http-check disable-on-404
default-server error-limit 1 on-error mark-down
redirect scheme https if !{ ssl_fc }
server node1 1.2.3.4:80 check observe layer7
server node_back 5.6.7.8:443 backup ssl verify none
ただし、次の2つの理由で機能しません。
- node1(A)が起動している場合でも、すべてのリクエストはサーバーのnode_back(B)にルーティングされます。
- サーバーAに対してhttpcheckが実行されていないようです。以上、syslogにサーバーAのダウンに関するエラーは表示されません。
「option httpchk」行とそのすぐ下の2行を削除すると、また、サーバーAの「observe layer7」も削除します。HAProxyはすべてのリクエストをノードAにルーティングすることで機能します。ただし、サーバーAが500を返す場合、HAProxyはBに切り替わりません。したがって、問題はオプションのhttpchk構成にあると想定しています。
1
nginxで完全に実行可能です。実際、nginxはWebサーバーなので、nginxの方がより柔軟でシンプルなので、私はwebバランスでhaproxyを避けています。しかし、最初の質問はhaproxyに関するものだったので、nginxについての回答を提供する権利はないと思います。しかし、あなたがそれを望むなら、私はできます。結局、ほぼ1年が経過しましたが、とにかく解決策を見つけたと思います。
—
drookie 2016年