我正在尝试在 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