ロードバランサーを使用することは、データベース環境を改善するための優れたオプションです。アプリケーションを使用可能なデータベースノードにリダイレクトしたり、トラフィックを複数のサーバーに分散してパフォーマンスを向上させたり、必要に応じてフェイルオーバーしたりするのに役立ちます。トラフィック/システムで何が起こっているかを知るには、データベースノードだけでなくロードバランサーも監視し、現在または将来の問題を軽減するための予防的または事後対応的なアクションを実行するための適切な監視システムを用意する必要があります。問題を見つけるには、表示されている各値の意味を理解する必要があります。
このブログでは、HAProxy統計の意味と、グラフとClusterControlを使用してわかりやすく監視する方法について説明します。
HAProxyとは何ですか?
HAProxyは、TCPおよびHTTPベースのアプリケーションの高可用性、負荷分散、およびプロキシを実装するために使用できるオープンソースプロキシです。
ロードバランサーとして、HAProxyは1つの発信元から1つ以上の宛先にトラフィックを分散し、このタスクの特定のルールやプロトコルを定義できます。いずれかの宛先が応答を停止すると、オフラインとしてマークされ、トラフィックは残りの利用可能な宛先に送信されます。
HAProxyノードタイプ
HAProxyロードバランサーを構成する場合、必要な機能に応じて構成するノードタイプが異なります。オプションは、フロントエンド、バックエンド、およびリッスンです。
バックエンドサーバーの前にリバースプロキシとしてHAProxyを配置する場合、構成ファイルのフロントエンドセクションは、クライアントが接続できるIPアドレスとポートを定義します。リクエストはロードバランサーに入り、レスポンスはクライアントに返されます。フロントエンドを通過します。
frontend site1.com
bind 10.10.10.150:80
use_backend api_servers if { path_beg /api/ }
default_backend web_servers
選択したポリシーに応じて、負荷分散され、リクエストを処理するために割り当てられるサーバーのグループを定義します。 HAProxyはリクエストをバックエンドに送信してから、アクティブなサーバーの1つから応答を受信します。
backend web_servers
balance roundrobin
cookie SERVERUSED insert indirect nocache
option httpchk HEAD /
default-server check maxconn 20
server server1 10.10.10.151:80 cookie server1
server server2 10.10.10.152:80 cookie server2
listen haproxy_10.10.10.143_3307_rw
bind *:3307
mode tcp
tcp-check connect port 9200
timeout client 10800s
timeout server 10800s
balance leastconn
option httpchk
default-server port 9200 inter 2s downinter 5s rise 3 fall 2 slowstart 60s maxconn 64 maxqueue 128 weight 100
server 10.10.10.139 10.10.10.139:3306 check
server 10.10.10.140 10.10.10.140:3306 check backup
server 10.10.10.141 10.10.10.141:3306 check backup
HAProxy統計ページ
HAProxyを使用すると、リアルタイム情報を含む統計ページを有効にして、ロードバランサーで何が起こっているかを確認できます。統計ページを有効にするには、HAProxy設定ファイル(/etc/haproxy/haproxy.cfg)で「statsenable」ディレクティブを使用する必要があります。例を見てみましょう:
userlist STATSUSERS
group admin users admin
user admin insecure-password admin
user stats insecure-password admin
listen admin_page
bind *:9600
mode http
stats enable
stats refresh 60s
stats uri /
acl AuthOkay_ReadOnly http_auth(STATSUSERS)
acl AuthOkay_Admin http_auth_group(STATSUSERS) admin
stats http-request auth realm admin_page unless AuthOkay_ReadOnly
バインド行は、統計ページへのアクセスに使用するIPアドレスとポートを設定します。認証と更新期間を構成することもできます。指定されたポート(例では9600)、admin / admin資格情報を使用してHAProxyノードにアクセスすると、次のように表示されます。
ここでは、HAProxyノードを監視するためのさまざまな有用なメトリックを見つけることができます。
HAProxy統計
では、これらの指標が何であるかを見てみましょう。意味はコンテキストによって異なるため、フロントエンドとバックエンドに分割します。
このセクションはバックエンドにのみ適用され、サーバーが使用可能になるのをクライアントが待機している時間を示します。 maxconn設定を使用すると、HAProxyは接続をキューに入れることができます。
「Cur」列には、現在キューに入れられており、サーバーにまだ割り当てられていないクライアント接続の数が表示されます。 「最大」列には、これまでに一度にキューに入れられた接続のほとんどが表示されます。 「制限」列には、構成ファイルの各サーバー行のmaxqueue設定で定義されている、キューに入れることができる接続の最大数が表示されます。
「Cur」列には、クライアントセッション、またはクライアントとサーバー間で完全に確立された接続が作成されている現在の速度が表示されます。このフィールドにマウスを合わせると、ページに次のメトリックが表示されます。
- 現在の接続速度:クライアントがHAProxyに接続している速度。
- 現在のセッションレート:エンドツーエンド接続の状態を保持するエンティティであるセッションが作成されているレート。
- 現在のリクエストレート:確立された接続を介してHTTPリクエストが受信されるレート。
「最大」列には、これまで同時に使用されたセッションのほとんどが表示されます。このフィールドにマウスを合わせると、ページに次のメトリックが表示されます。
- 最大接続速度:クライアントがHAProxyに接続した最高速度。
- 最大セッションレート:クライアントがセッションを確立した最高レート。これは、エンドツーエンド接続の状態を保持するエンティティです。
- 最大リクエストレート:確立された接続を介してHTTPリクエストが受信された最高レート。
「制限」列には、レート制限セッション設定で設定された、フロントエンドが受け入れる1秒あたりの最大セッション数が表示されます。この制限を超えると、追加の接続がソケットのバックログで保留されたままになります。
これらの統計は、サーバーへの接続が確立されている速度を示しています。
「Cur」列には、サーバーへの接続が確立されている1秒あたりの現在の速度が表示されます。 「最大」列は、特定のサーバーへの接続がこれまでに確立された最高速度を示します。ここでは「制限」列は使用されていません。
このセクションでは、ロードバランサーで使用されているセッションの数、つまりクライアントからサーバーへの完全な接続をカウントします。
「Cur」列には、確立されたセッションの現在の数が表示されます。 「最大」列には、これまでに同時に確立されたセッションのほとんどが表示されます。 「制限」列には、フロントエンドのmaxconn設定で定義されている、許可される最も同時のセッションが表示されます。この制限に達すると、その特定のフロントエンドは新しい接続の受け入れを停止します。 maxconnが設定されていない場合、「Limit」は構成のグローバルセクションのmaxconn値と同じです。それが設定されていない場合、値はシステムに基づいています。 [合計]列にカーソルを合わせると、ページに次の指標が表示されます。
- HTTP xxx応答:xxx応答を受信したHTTPリクエストの総数。
- 圧縮された2xx:圧縮が有効になっている場合、圧縮された2xx応答の総数。また、圧縮されたリクエストの割合も表示されます。
- その他の応答:その他の指標でカバーされていない応答を受信したHTTPリクエストの総数。
- インターセプトされたリクエスト:インターセプトされてHAProxy統計ページにリダイレクトされたリクエストの総数。
このセクションには、アクティブなサーバーへの現在の接続数が表示されます。
「Cur」列には、サーバーへのアクティブな接続の数が表示されます。 「最大」列には、特定のサーバーに対してこれまでに同時に確立された接続のほとんどが表示されます。 「制限」列には、サーバー回線のmaxconnパラメーターで設定された、サーバーで許可される接続の最大数が表示されます。
バックエンドの行には、「制限」のfullconnの値が表示されます。設定されていない場合は、次の式が使用されます。このバックエンドにルーティングされるフロントエンドのセッション制限値の合計を10で割った値。 「合計」列には、特定のサーバーを使用した接続の累積数が表示されます。このフィールドにカーソルを合わせると、ページに次の指標が表示されます。
- HTTP xxx応答:このサーバーからのHTTPxxx応答の総数。
- その他の回答:その他の指標でカバーされていないHTTP回答の総数。
- キュー時間:サーバーへの接続スロットを待機している間、接続がキューにとどまった時間(ミリ秒単位)。過去1024回の成功した接続の平均。
- 接続時間:サーバーに正常に接続するのにかかった時間(ミリ秒単位)。過去1024回の接続の成功の平均。
- 応答時間:サーバーの応答時間(ミリ秒単位)。過去1024回の接続が成功した場合の平均。
- 合計時間:過去1024回の成功した接続の平均であるミリ秒単位の合計セッション時間。
「LbTot」列には、特定のサーバーがリクエストを処理するために選択された合計回数が表示されます。これは、通常の負荷分散が原因であるか、障害が発生したサーバーからの再ディスパッチが原因である可能性があります。 「最後」の列には、最後の接続が受信されてからの時間が表示されます。
このセクションには、HAProxyとクライアント間で送受信されたデータの累積量が表示されます。 「In」列には受信した合計バイト数が表示され、「Out」列には送信した合計バイト数が表示されます。
このセクションには、HAProxyとサーバーの間で送受信されるデータの量が表示されます。 「In」列には、サーバーに送信されたバイト数が表示されます。 「Out」列には、受信されたバイト数が表示されます。
「Req」列には、フロントエンドまたはリッスンセクションに配置された構成ディレクティブ(http-request deny、http-request rejectなど)が原因で拒否されたリクエストの数が表示されます。
「応答」列には、フロントエンドまたはリッスンに配置されたhttp-responsedenyディレクティブによって拒否された応答の数が表示されます。
「Req」列は、バックエンド全体にのみ適用されます。バックエンドで構成ディレクティブ(http-request deny、http-request rejectなど)によって拒否されたリクエストの数を示します。
「応答」列には、バックエンドのhttp-responsedenyまたはtcp-responsecontentreject構成ディレクティブが原因で特定のサーバーに対して拒否された応答の数が表示されます。
フロントエンドに適用されるこのセクションの唯一のフィールドは、ステータスフィールドです。ステータスがOPENの場合、フロントエンドは正常に動作しており、トラフィックを受信する準備ができています。
このセクションには、各サーバーのステータス、正常性、および重みに関する詳細が表示されます。 「ステータス」列には、サーバーが現在稼働しているかどうか、およびその期間が表示されます。次のステータスのいずれかを表示できます:
- UP:サーバーは正常であると報告しています。
- ダウン:サーバーが異常であり、リクエストを受信できないと報告しています。
- NOLB:バックエンドにhttp-check disable-on-404を追加し、ヘルスチェックされたURLがHTTP404応答を返しました。
- MAINT:サーバーが無効になっているか、メンテナンスモードになっています。
- DRAIN:サーバーはドレインモードになっています。
- チェックなし:このサーバーではヘルスチェックが有効になっていません。
「LastChk」列には、XmsでL7OK/200のような値が表示されます。この値は、レイヤー7ヘルスチェックが実行されたことを意味します。 HTTP 200 OK応答を返し、Xミリ秒以内に返しました。
「Wght」列には、サーバー回線の重みパラメーターで設定された、受け入れるトラフィックの割合が表示されます。 「Act」列は、サーバーがアクティブ(Yでマーク)またはバックアップ(-でマーク)のどちらであるかを示します。 「Bck」列は、サーバーがバックアップ(Yでマーク)であるかアクティブ(-でマーク)であるかを示します。
「Chk」列には、失敗したヘルスチェックの数が表示されます。 「Dwn」列には、UPからDOWNへの遷移の数が表示されます。 「Dwntme」列には、サーバーがダウンしている期間が表示されます。
サーバーラインにslowstartパラメータを追加した場合、そのサーバーを無効にして後で有効にすると、[Thrtle]列にサーバーが受け入れるトラフィックの割合が表示されます。設定した期間中、パーセンテージは徐々に100%に上昇します。
この情報は、HAProxyのブログ投稿に基づいており、詳細情報を参照できます。
ClusterControlのHAProxy
ClusterControlは、展開と管理の他に、UIからHAProxy統計とリアルタイムダッシュボードへの洞察も提供します。 ClusterControlから、ClusterControl-> Select Cluster-> Nodes->以下のスクリーンショットのようなHAProxyノードを選択して、統計ページにアクセスできます。
チェックボックスをオン/オフにすることで、サーバーの負荷分散を有効/無効にできます「有効」列の下のチェックボックスボタン。これは、メンテナンスや、新しい構成パラメーターや最適化されたクエリのテストと検証など、アプリケーションがサーバーへの接続を意図的にスキップする場合に非常に便利です。
ダッシュボードセクションを確認して、ClusterControlからHAProxyサーバーを監視することもできます。
有効にするには、ClusterControl->SelectClusterに移動するだけです。 ->ダッシュボード->エージェントベースの監視を有効にします。これにより、各ノードにエージェントが配置され、対応するグラフを生成するためのすべての情報が取得されます。
ここでは、HAProxyノードを監視するために必要なすべてのメトリックを表示するだけでなく、さまざまなダッシュボードを使用してすべての環境を監視することもできます。
HAProxyは、データベースとアプリケーションのパフォーマンスを向上させるための優れた強力なツールです。環境に高可用性とフェイルオーバーを追加することも役立ちます。 HAProxyノードで何が起こっているかを知るには、統計ページで監視されているメトリックを理解する必要があります。または、ダッシュボードを追加して監視を改善し、より使いやすくする必要があります。
このブログでは、HAProxyの統計ページに記載されている各指標について説明しました。また、同じシステムから統計とダッシュボードの両方のHAProxyセクションにアクセスできるClusterControlでの外観も示しました。