Iptables

在centos 7上使用keepalived嘗試IP故障轉移時對虛擬IP的請求未轉發

  • December 13, 2020

我正在嘗試在 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 伺服器上,重新定義預設路由,指向浮動 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

引用自:https://unix.stackexchange.com/questions/624271