web-dev-qa-db-ja.com

HAProxyがリモートマシン上のプロキシのソケットをバインドできない

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を妨害していると思います。何か案は?

3
SJ.Jafari

また、net.ipv4.ip_nonlocal_bind=1/etc/sysctl.confに追加してsysctl -pを実行することにより、プロセスが非ローカル(つまり、存在しないIP)にバインドできるようにすることもできます。しかし、どのsysadmin1138が有効であるか:フェイルオーバーをどのように設計したかを確認したい場合があります。

7
cjc

あなたが望むようにフェイルオーバー構成を行うとき、HAProxyで何とかするよりも、クラスタリングメカニズムにIPアドレスの移動を処理させる方が良いことがわかりました。ノード間を移動するように仮想IPアドレスを構成し、サービス(HAproxy)がその仮想IPに従うように構成します。次に、仮想IPのみをリッスンするようにHAProxyを構成します。これは、HAproxyプロセスが動き回るときに開始および停止するのはクラスタリングソフトウェアであるため機能します。通常のサービスからは実行しません。

3
sysadmin1138

Haproxyが存在しないIPアドレスをリッスンしようとするため、エラーが発生します。 VIPがマシンに割り当てられる前にhaproxyプロセスを開始しているようです。

1つの解決策は、すべてのインターフェイスをリッスンすることです0.0.0.0。その後、必要に応じてiptablesを使用してVIPへのアクセスを制限できます。

別のオプションはVIPをリッスンすることですが、haproxyの開始時にVIPが存在することを確認する必要があります。これは、クラスタリングソフトウェア(keepalivedなど)がhaproxyを開始するときに実行できます。 VIPを取得します。

2
Khaled

net.ipv4.ip_nonlocal_bind=1の設定に関する上記の回答を参照してください。

それが機能しない場合は、Sudo lsof -i :80を使用して、バインドしようとしているポートでリッスンしている既存のサービスがあるかどうかを確認してください。

0
Dave Stibrany