Twilio: HAProxyの設定

https://www.twilio.com/engineering/2013/10/16/haproxy/

1 comment | 0 points | by Jshiike 約3年前


Jshiike 約3年前 | ▲upvoteする | link

音声/テキストコミュニケーションのクラウドサービスを提供するTwilioが、オープンソースのTCP/HTTPロードバランサーHAProxyの設定についてエンジニアブログで紹介しています。



1) 経緯


TwilioのFounder達が、クラスターのホストが他のホストと通信しトラッフィクを渡せるHAProxy Configを音声メッセージ用につくって、Venture Capitalから資金調達。次に、SMS (テキストサービス)サービスのAPIにHAProxy Configをそのまま適用。それがうまくワークしたのでHAProxy Configの内容を理解しないまま、Twilioのサービスに順次コピーされて、問題が感染していってしまった。


目標であるFive nine (99.999%)の稼働率を達成するため、その後HAProxy Configの設定を精査し、現在では以下で紹介する内容となっている。


2) 設定概要


mode    http

option httplog
log 127.0.0.1 local0 info

mode httpは、HAProxyがHTTPリクエストをチェックし、無効であればはじく設定。また、HTTPリクエストのログも下記のかたちで取得できる。


Oct  9 15:32:25 127.0.0.1 haproxy[32156]: 127.0.0.1:34677

[09/Oct/2013:15:32:25.744] twilio-frontend twilio-backends/10.10.10.10
0/0/0/38/71 200 944419 - - ---- 94/0/0/ 0/0 0/0
"GET http://example.com/ACaaaa?Signature=signature HTTP/1.1"

ログデータのおかげで、接続にかかった時間、ダウンロード時間、下りのトラフィックの同時接続数など有益な情報が取得できる。詳細は、HAProxy logging documentationを参照。また障害の調査にも大いに役立つ。


log 127.0.0.1 local0 info

この設定でHAProxy logging over syslogが可能になる。local0で別のデーモンが待ち受けし、HAProxyメッセージをログファイルに保存する。logrotateが前日のログデータを圧縮し、2週間以上の古いデータを破棄している。


option http-server-close

HAProxyのフロントエンドが通信している複数のバックエンドがHTTP keep-aliveをサポートしてない場合、上記の設定で、バックエンドサーバ間にHTTPリクエストをまわしながら、クライアントとフロントエンドの間でHAProxy keep a persistent connectionができる。


timeout client 30s

timeout server 30s

このHAproxyのタイムアウト設定に従って、内部サービスも30秒以内のタイムアウト設定をしている。


timeout connect 3100

これはHAProxyがホストに接続をトライするときのタイムアウト設定。ホストが同じマシン or LANにあれば、接続は瞬時に完了するので、3秒 + バッファーでセットしている。


retries 2

option redispatch

デフォルトでHAProxyは接続を3回トライする。上記の設定でリトライは2回、redispatchオプションで最後の接続リクエストを別の下りのトラフィックのホストに向ける。


option httpchk GET /healthcheck

デフォルトでHAProxyはpingでホストが死んでいるかどうか確認するが、ディスク or ネットワークの状況がよいかどうかの健康診断はしてくれない。httpchkでの健康診断の判定は、HAProxyがトラフィックを送らなくなる、そして全てのホストが「悪い」と判断されるとバックエンドがない状態になるので、慎重にセットする必要がある。



Twilioの設定はGithub上に公開されてます。



ワザノバ TOP100 アクセスランキング [8/25-10/12]



#twilio #haproxy

Back