l_threshold と u_threshold の使い方

IPVSには設定した接続数を越えると、それ以上の接続を抑止する threshold という機能があります。
これに関連するパラメータは l_threshold と u_threshold のふたつです。
今回はこれらの使い方をおさらいします。

u_threshold

現在の接続数がこの値よりも大きくなると、それ以上の接続をしなくなります。
全サーバがこの状態に陥るとサービス停止となるので要注意です。

net/ipv4/ipvs/ip_vs_conn.c
  if (dest->u_threshold != 0 &&
    ip_vs_dest_totalconns(dest) >= dest->u_threshold)
      dest->flags |= IP_VS_DEST_F_OVERLOAD;

IP_VS_DEST_F_OVERLOADフラグが立っている転送先には新規の接続はされなくなります。

l_threshold

u_thresholdでセットされたIP_VS_DEST_F_OVERLOADフラグをクリアする条件を指定します。
接続数がこの値を下回ったらIP_VS_DEST_F_OVERLOADフラグがクリアされます。
l_thresholdが0の場合は、接続数がu_thresholdの75%を下回ったらクリアされます。

net/ipv4/ipvs/ip_vs_conn.c
  if (dest->l_threshold != 0) {
    if (ip_vs_dest_totalconns(dest) < dest->l_threshold)
      dest->flags &= ~IP_VS_DEST_F_OVERLOAD;
  } else if (dest->u_threshold != 0) {
    if (ip_vs_dest_totalconns(dest) * 4 < dest->u_threshold * 3)
      dest->flags &= ~IP_VS_DEST_F_OVERLOAD;
  } else {

使用例

設定

# ipvsadm -a -t x.x.x.x -r y.y.y.y -s rr -x u_threshold -y l_threshold

参照

# ipvsadm -L -n --thresholds