跳过通过 lo 接口路由传出数据包

跳过通过 lo 接口路由传出数据包

介绍:

我有以下负载平衡配置:10.0.1.31 - lb
10.0.1.32 - node1(tomcat + mysql)10.0.1.33 - node2(tomcat + mysql)

我正在使用 keepalived,它将数据包重定向到活动节点 - 共享 IP 地址是 10.0.1.35

当然 lb 有必需的配置:

echo "net.ipv4.ip_nonlocal_bind = 1" >> /etc/sysctl.conf

要正确处理传入的数据包,node1 和 node2 需要在 lo 上有 10.0.1.35

[root@lb-node1 ~]# ip addr list dev lo
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
   inet 127.0.0.1/8 scope host lo
   inet 10.0.1.35/32 scope global lo
   inet6 ::1/128 scope host 
   valid_lft forever preferred_lft forever

问题:

由于我们在 lo 上有 10.0.1.35,如果语言环境 tomcat 尝试通过 lb 连接到 mysql - 则会建立与本地实例的连接。

我希望 skipp lo 用于传出数据包

测试

从已禁用 mysql 服务和 lo 接口上的 10.0.1.35 ip 的 node1,我正尝试连接到 node2 上的 mysql

远程登录 10.0.1.35 3306

不幸的是结果是

   [root@lb-node1 ~]# telnet 10.0.1.35 3306
   Trying 10.0.1.35...
   telnet: connect to address 10.0.1.35: Connection refused 

当然,如果我从 lo 接口中删除 10.0.1.35 IP,我就可以连接到 node2 上的 mysql 实例

解决方案 ?

我尝试添加具有适当指标的路线,但没有帮助 :/

    [root@lb-node1 ~]# route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    10.0.1.0        0.0.0.0         255.255.255.255 UH    0      0        0 eth0
    10.0.1.0        0.0.0.0         255.255.255.255 UH    100    0        0 lo
    169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
    0.0.0.0         10.0.1.1        0.0.0.0         UG    0      0        0 eth0

相关内容