环境:
Centos 7
Keepalived
机器一
enp0s3 --> 192.168.1.38(连接外界) en0s8 --> 192.168.100.101(连接内网)
机器二
enp0s3 --> 192.168.100.102 默认网关 --> 192.168.100.101
机器二
enp0s3 --> 192.168.100.103 默认网关 --> 192.168.100.101
我已经按照教程这里一步一步来。虽然评论中的每个人都说它对他们来说效果很好,但我不明白保持活跃demon 监听其配置文件。这是一个非常简单的设置。我要做的是:
- 机器 I 对外界来说充当虚拟服务器,连接到两个真实的网络服务器(机器 II 和机器 III)。
- 机器 I 将首先尝试为机器 II 提供服务,如果机器 II 出现故障,则不会发生任何事情,客户端不会注意到,并且机器 I 应该立即开始为机器 III 提供服务。
第 2 点应该用 Keepalived 来完成,但它就是不起作用。以下是配置文件/etc/keepalived/keepalived.conf
global_defs{
notification_email{
[email protected]
}
notification_email_from [email protected]
smtp_server 193.145.147.51
smtp_connect_timeout 30
lvs_id LVS_MAIN
}
vrrp_instance VI_1 {
interface enp0s3
state MASTER
virtual_router_id 51
priority 150
advert_int 1
virtual_ipaddress {
192.168.100.105/24 dev enp0s8
}
}
virtual_server 192.168.100.105 80 { !This would hosted in Machine I enp0s8
delay_loop 3
lb_algo wrr
lb_kind NAT
nat_mask 255.255.255.0
protocol TCP
real_server 192.168.100.102 8000 { !Machine II
weight 1
TCP_CHECK {
connect_timeout 3
connect_port 8000
}
}
real_server 192.168.100.103 8000 { !Machine III
weight 1
TCP_CHECK {
connect_timeout 3
connect_port 8000
}
}
}
当我运行keepalived时,sudo ip addr show enp0s8
我可以看到keepalived已经为接口提供了虚拟IP地址192.168.100.105但是当我进入机器 I 的浏览器并输入 IP 地址作为 URL 时192.168.100.105什么都没有返回,只是连接超时。但如果我输入192.168.100.102:8000或者 192.168.100.103:8000我受到了我的网络服务的欢迎。
keepalived 可能存在什么问题?
我感谢任何帮助。
答案1
就我而言,我使用 LVS-DR。如果你正在使用 LVS-DR
基于http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.ipvsadm.html
LVS-DR, LVS-Tun: the default gw cannot be the director - use some local router.
将虚拟地址更改为
virtual_ipaddress {
192.168.100.105 dev enp0s8
}
将真实服务器上的默认网关更改为路由器而不是 Director。
改变
lb_kind NAT
到
lb_kind DR
您还需要在真实服务器上添加 iptables 规则。
http://www.centos.org/docs/5/html/Virtual_Server_Administration/s2-lvs-direct-iptables-VSA.html
在真实服务器 192.168.100.102 和 192.168.100.103 上
iptables -t nat -A PREROUTING -p <tcp|udp> -d <vip> --dport <port> -j REDIRECT
在这种情况下变成:
iptables -t nat -A PREROUTING -p tcp -d 192.168.100.105 --dport 8000 -j REDIRECT