Centos 7でkeepalivedを使用してIPフェイルオーバーをテストしようとしています。仮想マシンに3つのCentos 7インスタンスがインストールされています。だから3つのサーバーがあります。そのうちの2つでkeepalivedを実行しようとしていますが、3番目のセントは実際のサーバーとして機能し、要求はそのサーバーに転送されます。 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サーバーでフローティング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