LVS +keepalived
环境准备:#
准备4台机器,两台装好LVS和Keepalived,作为调度器,另外两台装好httpd服务,作为Real Server。
网络配置:
Diretcory:
名称 | 接口 | IP | 用途 |
MASTER | eth0 | 192.168.1.19 | 用于WAN的数据转发 |
eth1 |
10.0.0.19 | 用于LAN的数据转发 | |
eth2 |
10.0.2.19 | 用于LB之间的心跳连接 | |
VIP |
|
192.168.1.29 | 解析到www.zydev.com |
BACKUP |
eth0 |
192.168.1.16 | 用于WAN的数据转发 |
eth1 |
10.0.0.16 | 用于LAN的数据转发 | |
eth2 |
10.0.2.16 | 用于LB之间的心跳连接 | |
VIP | 暂无 | ||
LAN不需要配置网关 |
具体的网卡参数配置以MASTER的3块网卡为例

DEVICE=eth0 HWADDR=00:0c:29:e7:ba:c6 TYPE=Ethernet UUID=af441a22-3ba9-42fe-9748-eeb78eccb374 ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=none USERCTL=no IPV6INIT=no IPADDR=192.168.1.19 NETMASK=255.255.255.0 GATEWAY=192.168.1.1

DEVICE=eth1 HWADDR=00:0c:29:e7:ba:bc TYPE=Ethernet ONBOOT=yes BOOTPROTO=none IPADDR=10.0.0.19 NETMASK=255.255.255.0

DEVICE=eth2 HWADDR=00:0c:29:e7:ba:d0 TYPE=Ethernet ONBOOT=yes BOOTPROTO=none IPADDR=10.0.2.19 NETMASK=255.255.255.0
RSV
名称 | 接口 | IP | 用途 |
RS1 | eth0 | 192.168.1.17 | 用于WAN数据转发 |
eth1 | 10.0.0.17 | 用于LAN数据转发 | |
RS2 | eh0 | 192.168.1.18 | 用于WAN数据转发 |
eth1 | 10.0.0.18 | 用于LAN数据转发 | |
VIP | 暂无 |
具体的网卡参数配置:

DEVICE=eth0 HWADDR=00:0c:29:a4:65:08 TYPE=Ethernet ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=none DNS2=8.8.8.8 DNS1=114.114.114.114 IPV6INIT=no USERCTL=no IPADDR=192.168.1.17 NETMASK=255.255.255.0 GATEWAY=192.168.1.1

DEVICE=eth1 HWADDR=00:0c:29:a4:65:12 TYPE=Ethernet ONBOOT=yes BOOTPROTO=none IPADDR=10.0.0.17 NETMASK=255.255.255.0 ~
配置调度器#
Master
vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived global_defs { notification_email { zy5724@163.com } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_01 } vrrp_instance VI_1 { state MASTER #备份服务器上MASTER为BACKUP interface eth0 lvs_sync_daemon_inteface eth2 #心跳线的网卡 virtual_router_id 51 priority 100 #备份服务上优先级要低于100,如改为90 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.29/24 #注意,这是是模拟外网IP。 } } # virtual_server 192.168.1.29 80 { delay_loop 6 lb_algo wrr lb_kind DR nat_mask 255.255.255.0 persistence_timeout 50 #会话保持 protocol TCP real_server 192.168.1.17 80 { weight 1 TCP_CHECK { connect_timeout 8 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.1.18 80 { weight 1 TCP_CHECK { connect_timeout 8 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } }
BACKUP

! Configuration File for keepalived global_defs { notification_email { zy5724@163.com } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_02 } vrrp_instance VI_1 { state BACKUP #备份服务器上MASTER为BACKUP interface eth0 lvs_sync_daemon_inteface eth2 virtual_router_id 51 priority 90 #备份服务上优先级要低于100,如改为90 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.29/24 #注意,这是是模拟外网IP。 } } # virtual_server 192.168.1.29 80 { delay_loop 6 lb_algo wrr lb_kind DR nat_mask 255.255.255.0 persistence_timeout 50 protocol TCP real_server 192.168.1.17 80 { weight 1 TCP_CHECK { connect_timeout 8 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.1.18 80 { weight 1 TCP_CHECK { connect_timeout 8 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } }
启动keepalived,查看LVS情况
配置RealServer#
RS1
ifconfig lo:17 192.168.1.29 netmask 255.255.255.255 up route add -host 192.168.1.29 dev lo echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
RS2
ifconfig lo:18 192.168.1.29 netmask 255.255.255.255 up route add -host 192.168.1.29 dev lo echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
访问http://192.168.1.29,可以发现实现了高可用和负载均衡。
分类:
LVS
标签:
LVS
, Keepalived
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了