内核参数引起的服务启动失败

报错现象

err: listen tcp 10.123.45.78:50001: bind: address already in use
每次启动都报错,业务反馈服务启动后只会主动监听这一个端口所以因为逻辑错误引起的端口冲突可以排除

分析原因 观察服务器现象

本地localport 占用了50001 造成服务启动失败。因为服务启动时 socket=ip+port
netstat -antp 查看 服务端口竟然从50001开始 如下图
image
当服务初始化时,例如链接数据库等操作,会占用50001端口造成启动失败

cat /proc/sys/net/ipv4/ip_local_reserved_ports
10000-50000

问题分析并解决

ip_local_reserved_portsip_local_port_range是两个与本地端口分配相关的参数,它们可以通过sysctl接口进行配置。以下是它们的详细说明、默认配置以及最佳配置建议:

  1. ip_local_reserved_ports

    • 作用ip_local_reserved_ports参数用于指定一组保留端口,这些端口不会被普通用户的应用程序使用。这些端口通常被系统服务或特权应用程序使用。
    • 默认配置:默认情况下,该参数通常未设置,即没有保留端口。
    • 最佳配置:对于生产系统,建议根据实际需要配置一组保留端口,以避免这些端口被普通应用程序占用。例如,可以将一些常用的系统服务端口列入保留列表。
  2. ip_local_port_range

    • 作用ip_local_port_range参数定义了操作系统用于分配本地端口的范围。新的连接会从这个范围内选择一个空闲的端口。
    • 默认配置:默认情况下,Linux系统的ip_local_port_range参数通常设置为32768 65535,即从32768到65535之间的端口范围。
    • 最佳配置:最佳配置取决于系统的需求,但通常建议保持默认配置。如果你遇到端口耗尽问题,可以考虑适当调整端口范围,但请注意避免与其他系统服务或应用程序的端口冲突。

最佳配置建议取决于具体的系统需求和应用场景。在调整这些参数之前,请确保充分了解其作用,并在生产环境之前进行充分的测试。同时,建议根据实际情况监控系统的端口使用情况,以便及时调整配置以满足系统需求。

另外再k8s 中
在修改 NodePort 端口范围时必须十分谨慎。务必保证 NodePort 端口范围与集群节点上 Linux 内核提供的 net.ipv4.ip_local_port_range 参数中的端口范围不冲突。该内核参数 ip_local_port_range 控制了 Linux 系统上任意应用程序可以使用的本地端口号范围。ip_local_port_range 的默认值为 32768~60999,Nodeport 默认值为 30000~32767。

posted @ 2024-11-28 21:33  萱乐庆foreverlove  阅读(6)  评论(0编辑  收藏  举报