Linux中socket绑定多个IP不直接实现负载均衡,而是作为基础:真正的负载均衡依赖策略路由(按源IP分流至不同出口)或SO_REUSEPORT(多进程监听同一端口由内核分发连接)。
Linux 中 socket 绑定多个 IP 地址本身不直接实现负载均衡,但它是构建负载均衡能力的基础环节。真正的负载均衡发生在网络栈或应用层:要么靠内核策略路由将不同源 IP 的流量导向不同出口,要么靠多监听 socket(如 SO_REUSEPORT)让多个进程/线程各自绑定同一端口、由内核分发连接请求。
这是多数负载均衡方案的前提——让一个网卡拥有多个可对外服务的地址。
cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0:0
ifcfg-eth0:0,修改 DEVICE=eth0:0、IPADDR=192.168.1.100、NETMASK=255.255.255.0,并确保 ONBOOT=yes
eth0:1、eth0:2 等,每份配置对应一个独立 IPsystemctl restart network 或 nmcli connection reload && nmcli connection up eth0
适用于高并发 TCP 服务(如 Web、API),让多个 worker 进程同时监听同一个端口,由内核按哈希分发新连接,天然支持多核并行。
SO_REUSEPORT 选项socket() → setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &on, sizeof(on)) → bind() 到相同 0.0.0.0:8080 或具体 IP:port当服务器有多个公网 IP(例如分别接电信、联通),可通过策略路由让不同 IP 发出的流量走不同网关,实现“出向”负载与冗余。
/etc/iproute2/rt_tables 中添加自定义表,如:100 tab_tel200 tab_cnc
ip route add default via 202.96.1.1 dev eth0 table tab_telip route add default via 219.141.1.1 dev eth1 table tab_cnc
ip rule add from 202.96.1.100/32 table tab_telip rule add from 219.141.1.100/32 table tab_cnc
多 IP 场景下最容易出问题的是响应包走错网关,导致连接失败或被丢弃。
GATEWAY=,只保留一个主网关,其余通过策略路由控制echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter,并在 /etc/sysctl.conf 中持久化ping -I 202.96.1.100 www.example.com 指定源 IP 测试iptables -t mangle -A OUTPUT -s 202.96.1.100 -j MARK --set-mark 1 做标记路由增强控制力