Iptables
在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 } } }
在 NodeJS 伺服器上,重新定義預設路由,指向浮動 IP
192.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