背景
最近发现业务POD使用短连接过程中,端口被耗尽,一系列操作。
方案
- 扩大端口数量
- 降低单pod配置,横向扩容pod个数
- 改成长链接
- 调整内核参数
扩大端口数量
pod新增内核参数
1
| net.ipv4.ip_local_port_range = 1024 65535
|
横向扩容
如果上述修改端口限制无法解决你的问题,那么能快速解决问题的方法就是降低你单pod规格,使得pod个数增加,分担端口压力。
修改成长链接
改这个,也需要你业务支持,编程语言有比较好的支持。
调整内核参数
这两个参数配合使用,reuse能复用time_wait端口
1 2
| net.ipv4.tcp_timestamps=1 # 与tw_reuse一起用 net.ipv4.tcp_tw_reuse=1
|
这个参数没必要开tcp_rw_recycle
额外说一句
有同学说修改这个参数tcp_fin_timeout
,字面意思是缩短time_wait的时间,加速端口回收,其实没啥*用,看看内核源码,就知道默认60s,除非修改内核代码,重新编译内核。
来一个生产环境机器的内核参数列表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_timestamps=1 net.ipv4.tcp_tw_recycle = 0 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_synack_retries = 2 net.ipv4.tcp_mem = 94500000 915000000 927000000 net.ipv4.ip_local_reserved_ports=30000-32767 net.ipv4.tcp_max_syn_backlog = 819200 net.ipv4.ip_forward = 1 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.default.accept_source_route = 0 net.core.wmem_max = 16777216 net.core.wmem_default = 8388608 net.core.somaxconn = 32768 net.core.rmem_max = 16777216 net.core.rmem_default = 8388608 net.core.netdev_max_backlog = 32768 kernel.sysrq = 0 kernel.core_uses_pid = 1 net.ipv4.tcp_max_tw_buckets = 30000000 vm.swappiness=0
|