我正在用CentOS 7构build一个概念validation负载均衡器,并保持活动状态。
我以Red Hat的负载均衡器pipe理指南为参考,实现了一个带有两个节点的NAT负载均衡器,这两个节点负责在公用和专用networking之间传输stream量。 为此,负载均衡器有两个VIP:一个用于客户端stream量,一个用于公共networking; 另一个用于确保在专用networking上响应stream量的故障转移。
2个负载均衡器(lb1和lb2)正在向内部networking上运行apache(fe1和fe2)的2个主机发送stream量。 lb1是主,lb2是备份。
图表如下:

负载均衡器工作正常,当其中一名董事倒闭时,可以按照预期进行故障转移。
什么纠缠我真正的服务器上的传入stream量不是来自内部VIP(10.10.33.254),而是来自负载均衡主机的真实地址(10.10.33.2和10.10.33.3)。 来自真实服务器的Ping也通过真实IP地址,而不是内部VIP,尽pipe它被设置为它们的默认网关。
Traceroute(lb1为活动):
[root@rsfe2 ~]# tracepath www.google.com 1: rsfe2 0.081ms pmtu 1500 1: 10.10.33.2 0.385ms 1: 10.10.33.2 0.385ms 2: no reply 3: 192.168.1.1 1.552ms
(lb1下降,lb2作为有效):
[root@rsfe2 ~]# tracepath www.google.com 1: rsfe2 0.065ms pmtu 1500 1: 10.10.33.3 0.463ms 1: 10.10.33.3 0.462ms 2: no reply 3: 192.168.1.1 2.394ms
路由表:
[root@rsfe2 ~]# ip route default via 10.10.33.254 dev enp0s8 proto static metric 1024 10.10.33.0/24 dev enp0s8 proto kernel scope link src 10.10.33.12
尽pipe这种明显的exception情况,从一个负载均衡器到另一个负载均衡器的故障转移正如客户所期望的那样工作,这似乎是由于存活负载均衡器的无偿ARP。
看起来内部的VIP不是用于除了ARP通知之外的任何东西,最后(没有stream量通过它)。
我应该关心这个,还是按预期工作?
我的keepalived.conf内容:
global_defs { notification_email { [email protected] [email protected] [email protected] } notification_email_from [email protected] router_id LVS_DEVEL } vrrp_sync_group VG1 { group { RH_EXT RH_INT } } vrrp_script check_haproxy { script "/bin/pkill -0 -F /var/run/haproxy.pid" interval 1 fall 1 rise 5 } vrrp_instance RH_EXT { state MASTER interface enp0s3 virtual_router_id 50 priority 101 advert_int 1 authentication { auth_type PASS auth_pass password123 } virtual_ipaddress { 192.168.10.80 } track_script { check_haproxy } track_interface { enp0s3 } } vrrp_instance RH_INT { state MASTER interface enp0s8 virtual_router_id 2 priority 101 advert_int 1 authentication { auth_type PASS auth_pass password123 } virtual_ipaddress { 10.10.33.254 } track_script { check_haproxy } track_interface { enp0s8 } } virtual_server 192.168.10.80 80 { lb_algo rr lb_kind NAT real_server 10.10.33.11 80 { HTTP_GET { url { path /check.html } } } real_server 10.10.33.12 80 { HTTP_GET { url { path /check.html } } } }
我相当确定你在这种情况下实际上使用了VIP。 您看到本地IP的原因仅仅是由于traceroute的本质。 每一跳的devise都是为了让设备产生一个ICMP错误,系统总是使用它的适配器主地址发送。