LVS 负载均衡 keepalive
为什么要学lvs
工作在网络模型的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介绍
早在2.2内核时, IPVS就已经以内核补丁的形式出现。
从2.4.23版本开始, IPVS软件就合并到Linux内核的常用版本的内核补丁的集合。从2.4.24以后IPVS已经成Linux官方标准内核的一部分。
LVS无需安装
安装的是管理工具,第一种叫ipvsadm,第二种叫keepalive
ipvsadm是通过命令行管理,而keepalive读取配置文件管理
后面我们会用Shell脚本实现keepalive的功能
lvs集群部署
安装lpvsadm管理工具
查看系统的LVS模块
- lsmod|grep ip_vs
默认没有加载模块,安装管理工具
- yum install -y ipvsadm
查看lvs默认状态并且激活lvs
- [root@lb03 ~]# ipvsadm
- IP Virtual Server version 1.2.1 (size=4096)
- Prot LocalAddress:Port Scheduler Flags
- -> RemoteAddress:Port Forward Weight ActiveConn InActConn
配置lvs负载均衡服务
第一步:在eth0网卡绑定VIP地址(ip)
第二步:清楚当前说有LVS规则(-C)
第三步:设置tcp、tcpfin、udp链接超时时间(--set)
第四步:添加虚拟服务(-A),调度算法(man ipvsadm)
第五步:将虚拟服务关联到真是服务上(-a)
第六步:查看配置结果(ln)
- ip addr add 10.0.0.13/24 dev eth0
- ipvsadm -C
- ipvsadm --set 30 5 60 #控制浏览器与lb01的超时时间
- ipvsadm -A -t 10.0.0.13:80 -s wrr -p 20 -p控制lb01与web01、web02的超时时
- ipvsadm -a -t 10.0.0.13:80 -r 10.0.0.17:80 -g -w 1
- ipvsadm -a -t 10.0.0.13:80 -r 10.0.0.18:80 -g -w 1
- ipvsadm -ln
配置web操作
- ip addr add 10.0.0.13/32 dev lo
- cat >>/etc/sysctl.conf<<EOF
- net.ipv4.conf.all.arp_ignore = 1
- net.ipv4.conf.all.arp_announce = 2
- net.ipv4.conf.lo.arp_ignore = 1
- net.ipv4.conf.lo.arp_announce = 2
- EOF
- sysctl -p
修改web03 web04 tomcat端口号为 80
web03 启动 tomcat8_1
web04 启动 tomcat_02
访问测试
lb02测试
说有访问的返回值都是10.0.0.3
lvs跟nginx不一样 17和18不通过IP地址访问,通过mac地址访问
lvs通过mac地址访问
访问10.0.0.3就是访问lb01
10.0.0.3的数据包mac地址的返回值就是访问web03
抓包结果总结
数据包的ip地址只有lb的vip 10.0.0.3
数据包的接收mac地址也是lb01的网卡mac地址
数据包的返回mac地址可能是web03的网卡mac,也可能是web04的网卡mac地址。
服务器切换arp
vip漂移,手动更改vip的mac地址
- 在lb03删除vip
- ip addr del 10.0.0.13/24 dev eth0
- 在lb04添加vip
- ip addr add 10.0.0.13/24 dev eth0
- 查看lb04 eth0的vip地址
- ip addr show eth0
- 全网广播vip的mac地址改变
- arping -I eth0 -c 1 -U 10.0.0.13
- windows查看
- arp -a
lvs高可用
keepalive功能:
通用功能:实现vip高可用,漂移。
LVS专属技能:通过配置文件控制LVS集群节点。
LVS专属技能:对后端的真实服务器节点进行健康检查。
在lb03和lb04安装Keepalive
- yum -y install keepalived
Keepalive的配置文件分成三部分配置
- vim /etc/keepalived/keepalived.conf
1.global_defs è全局定义
同一集群每个节点不一样
router_id LVS_03
router_id LVS_04
- ###########lb03###########
- global_defs {
- router_id LVS_03
- }
- ###########lb04###########
- global_defs {
- router_id LVS_04
- }
2.vrrp 实例配置 èVIP
- ###########lb01########### ###########lb02###########
- vrrp_instance VI_1 { vrrp_instance VI_1 {
- state MASTER state BACKUP
- interface eth0 interface eth0
- virtual_router_id 51 virtual_router_id 51
- priority 150 priority 100
- advert_int 1 advert_int 1
- authentication { authentication {
- auth_type PASS auth_type PASS
- auth_pass 1111 auth_pass 1111
- } }
- virtual_ipaddress { virtual_ipaddress {
- 10.0.0.3/24 10.0.0.3/24
- } }
- } }
virtual_router_id 51 分组,同一集群每个节点相同不同集群一定不要同。
3.virtual_server配置 èlvs的配置
- virtual_server 10.0.0.13 80 {
- delay_loop 6
- lb_algo wrr
- lb_kind DR
- nat_mask 255.255.255.0
- persistence_timeout 50
- protocol TCP
- real_server 10.0.0.17 80 {
- weight 1
- TCP_CHECK {
- connect_timeout 8
- nb_get_retry 3
- delay_before_retry 3
- connect_port 80
- }
- }
- real_server 10.0.0.18 80 {
- weight 1
- TCP_CHECK {
- connect_timeout 8
- nb_get_retry 3
- delay_before_retry 3
- connect_port 80
- }
- }
- }
keepalive健康检查功能
模拟web03出现问题
查看lb03 lvs状态
关闭web03
查看lb03状态
web03被剔除
开启web03
查看lvs状态
web03返回。
以上是健康检查功能
LVS集群的工作模式
DR直接路由模式
NAT模式
FULLNAT
TUNNEL