HAProxyを使用して、2つのTomcatバックエンドサーバーで着信要求の負荷を分散しています。 HAProxyがHAProxyがインストールされているのと同じマシンをリッスンするように指定すると、構成ファイルですべてが正常になり、チャームのように機能し始めます。 (フェイルオーバーとして別のLBをインストールできるように)別のマシンで仮想IPをリッスンするためにHAProxyが必要ですが、HAProxyを構成してHAProxyを起動すると次のエラーが発生します。
プロキシhttp_proxyのソケットをバインドできません。中止しています。
ここに私の設定ファイルがあります:
global
maxconn 4096 # Total Max Connections. This is dependent on ulimit
daemon
nbproc 4
defaults
mode http
clitimeout 60000
srvtimeout 30000
contimeout 4000
option httpclose # Disable Keepalive
listen http_proxy 10.0.5.99:80 #the virtual IP I want to listen to
mode http
stats enable
stats auth xxx:xxx
balance source # Load Balancing algorithm
option httpchk
option forwardfor # This sets X-Forwarded-For
## Define your servers to balance
server web1 10.0.5.102:8080 weight 1 maxconn 512 check
server web2 10.0.5.103:8080 weight 1 maxconn 512 check
一部の仮想マシンにインストールされているCentOS 5.1を使用しています。リモートマシンのiptablesサービスを完全に停止しましたが、問題はまだ残っています。リモートマシンで何かがhaproxyを妨害していると思います。何か案は?
また、net.ipv4.ip_nonlocal_bind=1
を/etc/sysctl.conf
に追加してsysctl -p
を実行することにより、プロセスが非ローカル(つまり、存在しないIP)にバインドできるようにすることもできます。しかし、どのsysadmin1138が有効であるか:フェイルオーバーをどのように設計したかを確認したい場合があります。
あなたが望むようにフェイルオーバー構成を行うとき、HAProxyで何とかするよりも、クラスタリングメカニズムにIPアドレスの移動を処理させる方が良いことがわかりました。ノード間を移動するように仮想IPアドレスを構成し、サービス(HAproxy)がその仮想IPに従うように構成します。次に、仮想IPのみをリッスンするようにHAProxyを構成します。これは、HAproxyプロセスが動き回るときに開始および停止するのはクラスタリングソフトウェアであるため機能します。通常のサービスからは実行しません。
Haproxyが存在しないIPアドレスをリッスンしようとするため、エラーが発生します。 VIPがマシンに割り当てられる前にhaproxyプロセスを開始しているようです。
1つの解決策は、すべてのインターフェイスをリッスンすることです0.0.0.0
。その後、必要に応じてiptables
を使用してVIPへのアクセスを制限できます。
別のオプションはVIPをリッスンすることですが、haproxyの開始時にVIPが存在することを確認する必要があります。これは、クラスタリングソフトウェア(keepalivedなど)がhaproxyを開始するときに実行できます。 VIPを取得します。
net.ipv4.ip_nonlocal_bind=1
の設定に関する上記の回答を参照してください。
それが機能しない場合は、Sudo lsof -i :80
を使用して、バインドしようとしているポートでリッスンしている既存のサービスがあるかどうかを確認してください。