在 centos 7 上使用 keepalived 尝试 IP 故障转移时,对虚拟 IP 的请求未转发

在 centos 7 上使用 keepalived 尝试 IP 故障转移时,对虚拟 IP 的请求未转发

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

相关内容