![在 centos 7 上使用 keepalived 尝试 IP 故障转移时,对虚拟 IP 的请求未转发](https://linux22.com/image/184841/%E5%9C%A8%20centos%207%20%E4%B8%8A%E4%BD%BF%E7%94%A8%20keepalived%20%E5%B0%9D%E8%AF%95%20IP%20%E6%95%85%E9%9A%9C%E8%BD%AC%E7%A7%BB%E6%97%B6%EF%BC%8C%E5%AF%B9%E8%99%9A%E6%8B%9F%20IP%20%E7%9A%84%E8%AF%B7%E6%B1%82%E6%9C%AA%E8%BD%AC%E5%8F%91.png)
我正在尝试在 centos 7 上使用 keepalived 测试 IP 故障转移。我的虚拟机上安装了三个 centos 7 实例。所以我有3台服务器。我正在尝试在其中两个上运行 keepalived,第三个 centos 将充当真正的服务器,请求将被转发到其中。 keepalived的配置在最后给出。 conf文件中192.168.10.40是真实服务器的ip地址。在真实服务器上,我只运行一个小型 Nodejs 服务器,当请求发送时,它会回复成功。当我直接向192.168.10.40:3869的nodejs服务器发送请求时。它回复,但是当我尝试使用虚拟 IP 192.168.10.100 和端口 3869 访问它时,它没有回复。尽管两台服务器上的 keepalived 都工作正常。
在主服务器上
Vrrp_instance_pi1 {
state MASTER
interface enp0s8
virtual_router_id 102
priority 101
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
192.168.10.100/24
}
}
virtual_server 192.168.10.100 3869 {
delay_loop 10
lb_algo rr
lb_kind DR
persistence_timeout 9600
real_server 192.168.10.40 3869 {
weight 1
TCP_CHECK {
connect_timeout 20
connect_port 80
}
}
}
在备份服务器上
Vrrp_instance_pi1 {
state BACKUP
interface enp0s8
virtual_router_id 102
priority 99
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
192.168.10.100/24
}
}
virtual_server 192.168.10.100 3869 {
delay_loop 10
lb_algo rr
lb_kind DR
persistence_timeout 9600
real_server 192.168.10.40 3869 {
weight 1
TCP_CHECK {
connect_timeout 20
connect_port 80
}
}
}
答案1
在NodeJS服务器上,重新定义默认路由,指向浮动IP192.168.10.100
$ sudo ip route del 0/0
$ sudo route add default gw 192.168.10.100
在两台路由器上,制定一些 NAT 规则:
$ sudo iptables -t nat -F
$ sudo iptables -t mangle -F
$ sudo iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to 192.168.10.100
$ sudo iptables -t nat -A PREROUTING -d 192.168.10.100 -p tcp --dport 3869 -j DNAT --to 192.168.10.40