私のhaproxy.cfgファイルには、ホスト名を使用する2つのバックエンドサーバーがあります。
server ops-ca-revealv2e-prod-1 ops-ca-revealv2e-prod-1:443 cookie ops-ca-revealv2e-prod-1 ssl weight 1 maxconn 512 check
server ops-ca-revealv2e-prod-2 ops-ca-revealv2e-prod-2:443 cookie ops-ca-revealv2e-prod-2 ssl weight 1 maxconn 512 check
これらのホスト名はAmazon OpsWorksの一部であり、インスタンスが起動または停止するたびに/ etc/hostsに自動的に挿入されます。インスタンスの1つがダウンしているときにHAProxyを再起動しようとすると、次のエラーが表示されます。
[ALERT] 362/225440 (27202) : parsing [/opt/haproxy-ssl/haproxy.cfg:42] : 'server ops-ca-revealv2e-prod-2' : invalid address: 'ops-ca-revealv2e-prod-2' in 'ops-ca-revealv2e-prod-2:443'
[ALERT] 362/225440 (27202) : Error(s) found in configuration file : /opt/haproxy-ssl/haproxy.cfg
[ALERT] 362/225440 (27202) : Fatal errors found in configuration.
ホスト名が有効かどうかを確認するようにHAProxyに指示する方法はありますか?有効な場合は使用し、無効な場合は無視してください。
Haproxy> = 1.7では、init-addr
オプションを使用して、起動時にDNS解決を防ぐためにnoneを指定できるはずです。
docs から:
init-addr {last | libc | none | <ip>},[...]*
サーバーがFQDNを使用している場合、起動時にサーバーのアドレスを解決する順序を示します。カンマ区切りのリストに記載されている各メソッドを順に適用することにより、アドレスを解決する試みが行われます。成功した最初の方法が使用されます。機能するメソッドが見つからずにリストの最後に到達すると、エラーがスローされます。メソッド「last」は、状態ファイルに表示されるアドレスを選択することを推奨します(「server-state-file」を参照)。メソッド「libc」は、libcの内部リゾルバー(オペレーティングシステムとビルドオプションに応じてgethostbyname()またはgetaddrinfo())を使用します。メソッド「none」は、サーバーがダウン状態の有効なIPアドレスなしで起動することを明確に示します。状況が後で修正されるのを待って、起動時に一部のDNS問題を無視すると便利です。最後に、IPアドレス(IPv4またはIPv6)が提供されます。
だからあなたの設定行は次のようになります:
server s1 myhostname init-addr none
いいえ、haproxy内からはできません。
マニュアルによると、address
構成行のserver
は
[...]サーバーのIPv4またはIPv6アドレス。あるいは、解決可能なホスト名がサポートされています[...]
つまり、構成で解決できないホスト名を使用することはできません。
考え:
Bourne Shellで行われるのと同様に、アドレス文字列の任意の部分は、名前の前にドル記号( '$')を付け、オプションでそれらを中かっこ( '{}')で囲むことにより、任意の数の環境変数を参照できます。