我正在使用 keepalived 并在我的主节点上运行该设置:
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass XXXXXXXXXXXXXXXXXXXXXXXXX
}
virtual_ipaddress {
192.168.178.200/32 dev eth0
192.168.178.201/32 dev eth0
}
}
virtual_server 192.168.178.201 8443 {
delay_loop 10
protocol TCP
lb_algo rr
lb_kind DR
real_server 192.168.178.210 8443 {
weight 1
TCP_CHECK {
connect_timeout 5
}
}
real_server 192.168.178.211 8443 {
weight 1
TCP_CHECK {
connect_timeout 5
}
}
real_server 192.168.178.212 8443 {
weight 1
TCP_CHECK {
connect_timeout 5
}
}
}
priority
在从属节点上,我具有与较低和相同的设置state BACKUP
。
出于测试原因,3 个节点中有 2 个处于离线状态,并且我期望 VIP(.201
)将流量平衡到192.168.178.211:8443
。(.212
并且213
处于离线状态,.211
处于在线状态)我面临的行为192.168.178.201:8443
只有当 MASTER 节点与可用的后端计算机是同一台计算机时才可用。
在我看来,这意味着,只有当是主节点192.168.178.211:8443
时才可以访问。如果是主节点,则流量不会路由到。192.168.178.211
192.168.178.212
192.168.178.211:8443
系统配置信息:
#keepalived
net.ipv4.ip_nonlocal_bind=1
net.ipv4.ip_forward=1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.eth0.rp_filter = 2
谁能帮助我?
答案1
我从您的问题和评论中了解到负载平衡器和真实服务器是同一台机器。
根据Redhat 文档:
不支持从负载平衡器或某个真实服务器访问虚拟 IP。同样,不支持在与真实服务器相同的计算机上配置负载平衡器。
然而,根据LVS 知识库,但需要更多的配置工作。
根据您的示例,让我们keepalived-2.0.19
在 CentOS 7 上设置一个没有跟踪脚本的 3 个节点和一个虚拟 IP 地址:
- 虚拟 IP 地址:
192.168.178.201
- 节点 1:
192.168.178.210
优先级为 150 - 节点 2:
192.168.178.211
优先级 100 - 节点 3:
192.168.178.212
优先级 50
那么 keepalived 的一个可能配置是:
在节点 1 上
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 150
advert_int 1
virtual_ipaddress {
192.168.178.201/32
}
}
virtual_server 192.168.178.201 {
lvs_sched rr
lvs_method DR
protocol TCP
persistence_timeout 50
delay_loop 10
real_server 192.168.178.210 {
TCP_CHECK {
connect_timeout 5
connect_port 8443
}
}
real_server 192.168.178.211 {
TCP_CHECK {
connect_timeout 5
connect_port 8443
}
}
real_server 192.168.178.212 {
TCP_CHECK {
connect_timeout 5
connect_port 8443
}
}
}
在节点 2 上
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
virtual_ipaddress {
192.168.178.201/32
}
}
virtual_server 192.168.178.201 {
lvs_sched rr
lvs_method DR
protocol TCP
persistence_timeout 50
delay_loop 10
real_server 192.168.178.211 {
TCP_CHECK {
connect_timeout 5
connect_port 8443
}
}
real_server 192.168.178.212 {
TCP_CHECK {
connect_timeout 5
connect_port 8443
}
}
}
在节点 3 上
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 50
advert_int 1
virtual_ipaddress {
192.168.178.201/32
}
}
virtual_server 192.168.178.201 {
lvs_sched rr
lvs_method DR
protocol TCP
persistence_timeout 50
delay_loop 10
real_server 192.168.178.212 {
TCP_CHECK {
connect_timeout 5
connect_port 8443
}
}
}
注意:每个节点都根据其优先级(越来越少real_server
)配置 LVS。如果你对称配置 LVS,那么数据包将在节点之间无限地来回发送,从未回答。
您需要在所有节点上将虚拟 IP 地址添加为环回地址。否则,BACKUP 节点会收到来自负载均衡器的 TCP 消息,但不知道如何处理它。
在所有节点上在/etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.178.201
NETMASK=255.255.255.255
ONBOOT=yes
NAME=loopback
在所有节点上在/etc/sysconfig/network
,添加行
GATEWAYDEV=eth0
在所有节点上、配置内核参数
net.ipv4.conf.ens192.arp_ignore = 1
net.ipv4.conf.ens192.arp_announce = 2
net.ipv4.ip_forward = 1