最終更新日: 2019年6月16日

セッション数について

HAProxyでは多数のクランアントから同時に複数の処理ができようにしなくてはなりません。
これを実現するために、HAProxyのようなソフトウェアでは、同じポートへのアクセスを同時に受信できるように設計されています。
ただし、その為にはOS(カーネル)の中のリソースを同時接続の数だけ利用する必要がでてきます。
ネットワークのソフトウェアでは、特にセッションというリソースを使っておりこれが不足するとそれ以降はクライアントからリクエストに答えられなくなったり、通信途中で切断されてしまうといった現象が発生します

1. セッション数の確認

現在HAProxyに接続されているクライアントから要求セッションはnetstat コマンドで調べるか、HAProxyの統計情報で表示できます。 HAProxyの統計情報は、本資料を使ったHAProxyの設定を行った場合には”http://HAProxyのIP:8888”でアクセスできるようになっています。
① システム全体で接続を許しているセッション数
② "haproxy "というフロントエンドに許されているセッション数
③ 各バックエンドサーバ毎に渡すことができるセッションの上限(省略されている場合は④により自動で配分)
④ バックエンドとしてバックエンドサーバ全体の渡すことができるセッションの上限
この例の場合、クライアントPCからHAProxyへは同時に20,000セッションのアクセスが可能です。
また、バックエンドのそれぞれのサーバには7,000セッション以内でパケットを転送します。

2. 設定方法

/etc/haproxy.haproxy.confの以下のところで設定します。

① システム総セッション数

HAProxyがシステムとして受信できるすべてのセッション数です。各フロントエンドのセッション数の合計よりも大きい設定をしてください。指定は[global]セクションのmaxconnに指定します。

global
    ::
    maxconn 30000
    ::

② フロントエンドセッション数

フロントエンド毎に受信できるセッション数となります。複数のフロントエンドを設定する場合には、その合計は①の値以内になるようにしてください。[defaults]セクションまたは、[frontend]セクション内のmaxconnに指定します。
[frontend]セクションで指定しなかった場合には、[default]セクションのmaxconnの値となります。

defaults
    ::
    maxconn 20000
    ::
frontend
    ::
    maxconn 20000

③ バックエンドサーバセッション数

バックエンドとして指定するサーバへ接続できるセッション数となります。各バックエンドサーバのmaxconnで指定します。指定しない場合には、④の値の範囲となります。

backend back_proxy # --- 'back_proxy'という名前でバックエンドを定義します。
    ::
    server proxy1 192.168.10.21:8080 check maxconn 3000
    server proxy2 192.168.10.22:8080 check maxconn 3000
    server proxy3 192.168.10.23:8080 check maxconn 3000

④ バックエンドセッション数

バックエンドとしてバックエンドサーバ全体へ接続できる総数です。fullconnの値となります。 ③の値の総計よりも大きい値にします。 ③が指定されなかった場合には、各エンドポイントサーバはこの値の範囲手接続されます。

backend back_proxy # --- 'back_proxy'という名前でバックエンドを定義します。
    ::
    fullconn 10000
    ::



参考: