linux内核tcp配置--断网后连接卡住

通过隐藏通信应用程序中的临时网络中断,TCP 可以在偶尔不可靠的网络上提供可靠的通信。在通知发件人任何问题之前,您的操作系统将多次重发丢失的消息。大多数 Linux 发行版默认将任何丢失的数据包重传 15 次。重新传输以指数方式回退,因此这 15 次重新传输需要 900 秒钟以上的时间才能完成。这意味着使用这种方法,Linux 需要花费几分钟的时间来检测网络分区或故障节点。 Windows 默认仅重传 5 次,相应的超时时间约为 6 秒。

Linux 默认设置允许通过可能遭受很长数据包丢失的网络进行通信,但是对于大多数 Elasticsearch 集群而言,此默认设置对于单个数据中心内的生产网络而言过于昂贵。高可用性集群必须能够快速检测节点故障,以便它们可以通过重新分配丢失的碎片,重新路由搜索以及可能选择一个新的主节点来迅速做出反应。因此,Linux 用户应减少最大 TCP 重传次数。

通过以 root 身份运行以下命令,可以将最大 TCP 重传次数减少到 5 。五次重发对应于大约六秒钟的超时。

sysctl -w net.ipv4.tcp_retries2=5


要永久设置此值,请更新 /etc/sysctl.conf 中的 net.ipv4.tcp_retries2 设置。

定义一个时间段,在这个时间段内,如果没有任何连接相关的活动,TCP 保活机制会开始作用,每隔一个时间间隔,发送一个「探测报文」,该探测报文包含的数据非常少,如果连续几个探测报文都没有得到响应,则认为当前的 TCP 连接已经死亡,系统内核将错误信息通知给上层应用程序。

在 Linux 内核可以有对应的参数可以设置保活时间、保活探测的次数、保活探测的时间间隔,以下都为默认值:

net.ipv4.tcp_keepalive_time=7200
net.ipv4.tcp_keepalive_intvl=75  
net.ipv4.tcp_keepalive_probes=9


tcp_keepalive_time=7200:表示保活时间是 7200 秒(2小时),也就 2 小时内如果没有任何连接相关的活动,则会启动保活机制

tcp_keepalive_intvl=75:表示每次检测间隔 75 秒;

tcp_keepalive_probes=9:表示检测 9 次无响应,认为对方是不可达的,从而中断本次的连接
 

禁用IPv6:

如果您的系统不需要使用IPv6,可以尝试禁用它,以减少网络相关的问题。在终端中执行以下命令,将ipv6.disable参数设置为1:

sysctl -w net.ipv6.conf.all.disable_ipv6=1

TCP 重传超时 |Elasticsearch 指南 [8.10] |弹性的

你可能感兴趣的:(Linux,linux,tcp/ip,运维)