MySQL数据库机器配置的3个网络参数

简介:程序上 k8s后,数据库服务加上这些参数,不然连接会有问题。我们来探究下原因:

首先,看下这3个参数的意义:

1、net.ipv4.tcp_tw_recycle=0

为1表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭。

2、net.ipv4.tcp_tw_reuse=0

为1表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。

在关闭net.ipv4.tcp_tw_reuse的情况下,是不能重复利用TIME_WAIT的,需要等待TIME_WAIT自己关闭,并且TIME_WAIT的时间不能通过参数进行配置,如果修改的话,需要自己编译内核。

3、net.ipv4.tcp_timestamps=0

tcp_timestamps设计目的是为了记录数据包的发送时间,过程如下

  1. 发送方在发送数据包时,在TCP协议中的TSopt选项记录当前的发送的时间戳TSval中。
  2. 接收方收到数据包,进行拆封并把发送的时间戳TSval记录在TSecr返回给发送方一个ack。
  3. 发送包收接收方的ack包,用当前时间戳 - ack中的TSecr时间戳就可以得到精确的RTT。

服务端

1、针对参数tcp_tw_recycle分析:

在服务端,不要启用net.ipv4.tcp_tw_recycle,除非你能确保你的服务器网络环境不是NAT。

2、针对参数tcp_tw_reuse分析:

在服务端,不要启用net.ipv4.tcp_tw_reuse,除非你能确保你的服务器网络环境不是NAT。

3、针对参数tcp_timestamps分析:

今天发生了一个奇怪的现象,在家里始终打开公司的网站打开不了,从ping到dig域名,然后curl,都是没有问题的,但是就是打不开,最好没有办法只能抓包了,从抓包的然后来看就是syn-ack没有返回,然后就看到底是因为什么原因:

原因就是net.ipv4.tcp_timestamps=1,启用了时间戳,原理如下:
问题出在了 tcp三次握手,如果有一个用户的时间戳大于这个链接发出的syn中的时间戳,服务器上就会忽略掉这个syn,不返会syn-ack消息,表现为用户无法正常完成tcp的3次握手,从而不能打开web页面。在业务闲时,如果用户nat的端口没有被使用过时,就可以正常打开;业务忙时,nat端口重复使用的频率高,很难分到没有被使用的端口,从而产生这种问题。

解决方法:net.ipv4.tcp_timestamps = 0

总结:

1、开启net.ipv4.tcp_tw_reuse可以复用TIME_WAIT的连接,但是要求服务器与客户端都必须开启net.ipv4.tcp_timestamps

为了保证安全性,假如说没有net.ipv4.tcp_timestamps,当连接被复用后,如果这时候有延迟或者重发的数据包到达,新的连接就无法判断数据包属于复用前的连接还是复用后的连接了。
​2、tcp_tw_reuse 服务器端应该不会有大量主动连接的动作(或许会连接DB等,但一般也是长连接)。因此这个选项对于TCP服务器来说,基本上是无用的,没必要打开。

参考:

以讹传讹的“tcp_tw_reuse” - 腾讯云开发者社区-腾讯云

运维中tcp_tw_recycle net.ipv4.tcp_timestamps引发的坑 - 知乎

net.ipv4.tcp_tw_reuse是干嘛的?_三天饿九顿的萌新的博客-CSDN博客_net.ipv4.tcp_tw_reuse

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值