工作在网络模型的7层,可以针对http应用做一些分流的策略,比如针对域名、
目录结构, Nginx单凭这点可利用的场合就远多于LVS了。
最新版本的Nginx也支持4层TCP负载,曾经这是LVS比Nginx好的地方。
Nginx对网络稳定性的依赖非常小,理论上能ping通就就能进行负载功能,这个
也是它的优势之一,相反LVS对网络稳定性依赖比较大。
Nginx安装和配置比较简单,测试起来比较方便,它基本能把错误用日志打印出
来。 LVS的配置、测试就要花比较长的时间了, LVS对网络依赖比较大。

简单一句话,当并发超过了Nginx上限,就可以使用LVS了。
日1000-2000W PV或并发请求1万以下都可以考虑用Nginx。
大型门户网站,电商网站需要用到LVS。

LVS 介绍

LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系
统,可以在UNIX/LINUX平台下实现负载均衡集群功能。该项目在1998年5月由章文嵩博士组
织成立,是中国国内最早出现的自由软件项目之一。

官网:http://www.linuxvirtualserver.org/index.html

中文资料

LVS项目介绍 http://www.linuxvirtualserver.org/zh/lvs1.html

LVS集群的体系结构 http://www.linuxvirtualserver.org/zh/lvs2.html

LVS集群中的IP负载均衡技术 http://www.linuxvirtualserver.org/zh/lvs3.html

LVS集群的负载调度 http://www.linuxvirtualserver.org/zh/lvs4.html

 

LVS内核模块ip_vs介绍

LVS 负载均衡 keepalive早在2.2内核时, IPVS就已经以内核补丁的形式出现。
从2.4.23版本开始, IPVS软件就合并到Linux内核的常用版本的内核补丁的集合。从2.4.24以后IPVS已经成Linux官方标准内核的一部分。

LVS无需安装
安装的是管理工具,第一种叫ipvsadm,第二种叫keepalive
ipvsadm是通过命令行管理,而keepalive读取配置文件管理
后面我们会用Shell脚本实现keepalive的功能

lvs集群部署

LVS 负载均衡 keepalive

安装lpvsadm管理工具

查看系统的LVS模块

  1. lsmod|grep ip_vs

    默认没有加载模块,安装管理工具

  2. yum install -y ipvsadm

    查看lvs默认状态并且激活lvs

  3. [root@lb03 ~]# ipvsadm
  4. IP Virtual Server version 1.2.1 (size=4096)
  5. Prot LocalAddress:Port Scheduler Flags
  6.   -> RemoteAddress:Port Forward Weight ActiveConn InActConn

配置lvs负载均衡服务

第一步:在eth0网卡绑定VIP地址(ip)

第二步:清楚当前说有LVS规则(-C)

第三步:设置tcp、tcpfin、udp链接超时时间(--set)

第四步:添加虚拟服务(-A),调度算法(man ipvsadm)

第五步:将虚拟服务关联到真是服务上(-a)

第六步:查看配置结果(ln)

  1. ip addr add 10.0.0.13/24 dev eth0
  2. ipvsadm -C
  3. ipvsadm --set 30 5 60 #控制浏览器与lb01的超时时间
  4. ipvsadm -A -t 10.0.0.13:80 -s wrr -p 20 -p控制lb01与web01、web02的超时时
  5. ipvsadm -a -t 10.0.0.13:80 -r 10.0.0.17:80 -g -w 1
  6. ipvsadm -a -t 10.0.0.13:80 -r 10.0.0.18:80 -g -w 1
  7. ipvsadm -ln

LVS 负载均衡 keepalive

LVS 负载均衡 keepalive

配置web操作

  1. ip addr add 10.0.0.13/32 dev lo
  2.  
  3. cat >>/etc/sysctl.conf<<EOF
  4. net.ipv4.conf.all.arp_ignore = 1
  5. net.ipv4.conf.all.arp_announce = 2
  6. net.ipv4.conf.lo.arp_ignore = 1
  7. net.ipv4.conf.lo.arp_announce = 2
  8. EOF
  9. sysctl -p

    修改web03 web04 tomcat端口号为 80

LVS 负载均衡 keepalive

web03 启动 tomcat8_1

web04 启动 tomcat_02

访问测试

LVS 负载均衡 keepalive

lb02测试

LVS 负载均衡 keepalive

说有访问的返回值都是10.0.0.3

lvs跟nginx不一样 17和18不通过IP地址访问,通过mac地址访问

lvs通过mac地址访问

访问10.0.0.3就是访问lb01

LVS 负载均衡 keepalive

10.0.0.3的数据包mac地址的返回值就是访问web03

LVS 负载均衡 keepalive

抓包结果总结

数据包的ip地址只有lb的vip 10.0.0.3

数据包的接收mac地址也是lb01的网卡mac地址

数据包的返回mac地址可能是web03的网卡mac,也可能是web04的网卡mac地址。

服务器切换arp

vip漂移,手动更改vip的mac地址

  1. 在lb03删除vip
  2. ip addr del 10.0.0.13/24 dev eth0
  3. 在lb04添加vip
  4. ip addr add 10.0.0.13/24 dev eth0
  5. 查看lb04 eth0的vip地址
  6. ip addr show eth0
  7. 全网广播vip的mac地址改变
  8. arping -I eth0 -c 1 -U 10.0.0.13
  9. windows查看
  10. arp -a

 

lvs高可用

keepalive功能:

通用功能:实现vip高可用,漂移。

LVS专属技能:通过配置文件控制LVS集群节点。

LVS专属技能:对后端的真实服务器节点进行健康检查。

在lb03和lb04安装Keepalive

  1. yum -y install keepalived

Keepalive的配置文件分成三部分配置

  1. vim /etc/keepalived/keepalived.conf

1.global_defs è全局定义

同一集群每个节点不一样

router_id LVS_03

router_id LVS_04

  1. ###########lb03###########
  2. global_defs {
  3. router_id LVS_03
  4. }
  5. ###########lb04###########
  6. global_defs {
  7. router_id LVS_04
  8. }

2.vrrp 实例配置 èVIP

  1. ###########lb01########### ###########lb02###########
  2. vrrp_instance VI_1 { vrrp_instance VI_1 {
  3. state MASTER state BACKUP
  4. interface eth0 interface eth0
  5. virtual_router_id 51 virtual_router_id 51
  6. priority 150 priority 100
  7. advert_int 1 advert_int 1
  8. authentication { authentication {
  9. auth_type PASS auth_type PASS
  10. auth_pass 1111 auth_pass 1111
  11. } }
  12. virtual_ipaddress { virtual_ipaddress {
  13. 10.0.0.3/24 10.0.0.3/24
  14.   } }
  15. } }

virtual_router_id 51 分组,同一集群每个节点相同不同集群一定不要同。

3.virtual_server配置 èlvs的配置

  1. virtual_server 10.0.0.13 80 {
  2.     delay_loop 6
  3.     lb_algo wrr
  4.     lb_kind DR
  5.     nat_mask 255.255.255.0
  6.     persistence_timeout 50
  7.     protocol TCP
  8.  
  9.     real_server 10.0.0.17 80 {
  10.         weight 1
  11.         TCP_CHECK {
  12.         connect_timeout 8
  13.         nb_get_retry 3
  14.         delay_before_retry 3
  15.         connect_port 80
  16.         }
  17.     }
  18.  
  19.     real_server 10.0.0.18 80 {
  20.         weight 1
  21.         TCP_CHECK {
  22.         connect_timeout 8
  23.         nb_get_retry 3
  24.         delay_before_retry 3
  25.         connect_port 80
  26.         }
  27.     }
  28. }

keepalive健康检查功能

模拟web03出现问题

查看lb03 lvs状态

LVS 负载均衡 keepalive

关闭web03

LVS 负载均衡 keepalive

 

 

查看lb03状态

LVS 负载均衡 keepalive

web03被剔除

开启web03

LVS 负载均衡 keepalive

查看lvs状态

LVS 负载均衡 keepalive

web03返回。

以上是健康检查功能

 

 

 

 

 

LVS集群的工作模式

DR直接路由模式

LVS 负载均衡 keepalive

NAT模式

LVS 负载均衡 keepalive

FULLNAT

LVS 负载均衡 keepalive

TUNNEL

LVS 负载均衡 keepalive

 

相关文章: