连接到本地 VIP:使用了错误的出站接口

连接到本地 VIP:使用了错误的出站接口

我遇到了一个问题,我的出站连接使用了错误的接口。我相信我已经正确配置了所有路由。

  • 我在两个使用虚拟 IP 的刀片服务器上有一个主动/备用数据库。VIP 已重新分配给具有主动数据库的刀片服务器。
  • 我在连接到数据库的同一刀片上运行进程
  • 如果 DB VIP 在另一个刀片上,则使用默认接口 src 地址建立数据库连接,一切正常。
  • 如果 DB VIP 位于本地刀片上,则使用数据库 VIP 建立数据库连接。

我遇到了问题,就像在最后一种情况下一样,连接使用 DB VIP 作为其出站接口,然后数据库 VIP 被重新分配给另一个刀片。程序保持运行,但 VIP 消失了。

当数据库位于本地时,IP 地址如下:

[root@xxxx-b1 ~]# ip addr list
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 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
 2: eth0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP qlen 1000
    link/ether redacted
3: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    link/ether redacted
    inet 172.18.3.12/22 brd 172.18.3.255 scope global bond0
    inet 172.18.3.10/22 brd 172.18.3.255 scope global secondary bond0:0
    inet6 readcted/64 scope link 
       valid_lft forever preferred_lft forever

数据库是 bond0:0 辅助。

这是我的路线:

[root@xxxx-b1 ~]# ip route list
172.18.0.0/22 dev bond0  proto kernel  scope link  src 172.18.3.12 
169.254.0.0/16 dev bond0  scope link  metric 1003 
default via 172.18.0.1 dev bond0  src 172.18.3.12 

下面是一个当数据库VIP为本地时使用telnet连接数据库的示例:

[root@xxxx-b1 ~]# telnet 172.18.3.10 2315 &
[1] 13676
[root@xxxx-b1 ~]# Trying 172.18.3.10...
Connected to 172.18.3.10.
Escape character is '^]'.

[1]+  Stopped                 telnet 172.18.3.10 2315
[root@xxxx-b1 ~]# netstat -np | grep telnet
tcp  0  0 172.18.3.10:53583  172.18.3.10:2315   ESTABLISHED 13676/telnet        

我遗漏了什么?有什么方法可以让出站连接使用 bond0 地址 (172.18.3.12) 而不是数据库 VIP?设置源码路线上的参数似乎没有帮助。也许这根本不可能?

谢谢您的反馈!

相关内容