問題の説明
Microservices Engine(MSE)インスタンスを使用すると、クライアントに多数のTIME_WAIT状態の接続が存在します。この問題は、セルフマネージドNacosインスタンスを使用している場合は発生しません。
考えられる原因
クライアントはサーバーロードバランサー(SLB)インスタンスへの多数の同時短命接続を確立し、接続のクローズを担当します。
MSEインスタンスを使用した後にのみ多数のTIME_WAIT状態の接続が存在し、アクセスモードが変更されていない場合、クライアントでTIME_WAITソケットの迅速な再利用または再利用が発生している可能性があります。この場合、この問題は次のTCPカーネルパラメーターが原因である可能性があります。
net.ipv4.tcp_tw_recycle = 1net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_timestamps = 1
キャプチャされたパケットは、SLBインスタンスが net.ipv4.tcp_timestamps パラメーターを削除するため、この問題が発生することを示しています。
解決策
TCPタイムスタンプ情報を持たないクライアントの場合は、短命接続を永続的なTCP接続に置き換えます。
この問題を解決するには、TIME_WAIT関連のしき値を指定する次のパラメーターにも注意する必要があります。
net.ipv4.ip_local_port_range:送信元ポートの最大数を指定します。
net.ipv4.tcp_max_tw_buckets:TIME_WAIT状態のバケットの最大数を指定します。
max open files:ファイル記述子の最大数を指定します。
TIME_WAIT状態の接続数が上記の各パラメーターで指定されたしき値よりも大幅に小さい場合は、この問題を無視してください。
TIME_WAIT状態の接続数が上記の各パラメーターで指定されたしき値に近い場合は、次のいずれかの解決策を試してください。
TIME_WAIT状態の接続数が各しきい値の半分より小さくなるように、クライアントマシンのしきい値を上げます。
Nacos Client 1.x を使用している場合は、永続接続をサポートする Nacos Client 2.x にアップグレードします。