我遇到了一个问题,我的出站连接使用了错误的接口。我相信我已经正确配置了所有路由。
- 我在两个使用虚拟 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?设置源码路线上的参数似乎没有帮助。也许这根本不可能?
谢谢您的反馈!