为什么要学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模块

  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

配置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

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地址

  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状态

关闭web03

 

 

查看lb03状态

web03被剔除

开启web03

查看lvs状态

web03返回。

以上是健康检查功能

 

 

 

 

 

LVS集群的工作模式

DR直接路由模式

NAT模式

FULLNAT

TUNNEL


 

LVS 负载均衡 keepalive的更多相关文章

  1. 高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群

    高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群 libnet软件包<-依赖-heartbeat(包含ldirectord插件(需要perl-MailTools的rpm包)) l ...

  2. 十 LVS 负载均衡

    回顾nginx 反向代理负载均衡 负载均衡的妙用 负载均衡(Load Balance)集群提供了一种廉价.有效.透明的方法, 来扩展网络设备和服务器的负载.带宽.增加吞吐量.加强网络数据处理能力. 提 ...

  3. LVS负载均衡集群

    回顾-Nginx反向代理型负载 负载均衡(load balance)集群,提供了一种廉价.有效.透明的方法,来扩展网络设备和服务器的负载.带宽.增加吞吐量.加强网络数据处理能力.提高网络的灵活性和可用 ...

  4. Linux中keepalived+LVS负载均衡的搭建测试

    1.1 LVS简介       LVS(Linux Virtual Server),也就是Linux虚拟服务器, 是一个自由软件项目.使用LVS技术要达到的目标是:通过LVS提供的负载均衡技术和Lin ...

  5. LVS负载均衡-基础知识梳理

    一. 集群的概念 服务器集群简称集群是一种服务器系统,它通过一组松散集成的服务器软件和/或硬件连接起来高度紧密地协作完成计算工作.在某种意义上,他们可以被看作是一台服务器.集群系统中的单个服务器通常称 ...

  6. 观nginx与lvs负载均衡的较量

    在技术工作者中,常用到的就是lvs负载均衡和Nginx负载均衡了.这两者也是比较普及的.那么,根据不同的需求,两者存在着不同的优势.具体选择哪一个,还要看您的要求了.那么我们在此为大家分享一篇文章,对 ...

  7. lvs负载均衡的搭建

       lvs负载均衡的搭建 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.         在部署环境前,我们需要了解一下一些协议 一.什么是arp 地址解析协议,即ARP(Addr ...

  8. nginx 反向代理 和lvs负载均衡

    nginx反向代理:用户请求nginx代理服务器然后代理服务器将用户请求转为服务器再由nginx代理服务器将服务器的响应反应给用户. lvs负载均衡:用户请求nginx代理服务器然后代理服务器将用户请 ...

  9. (转)详解LVS负载均衡之三种工作模型原理和10种调度算法

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://linuxnx.blog.51cto.com/6676498/1195379 LV ...

随机推荐

  1. Sequelize-nodejs-1-getting started

    Sequelize is a promise-based ORM for Node.js v4 and up. It supports the dialects PostgreSQL, MySQL, ...

  2. django restframework 序列化

    Serialization 序列化 创建表 from django.db import models from pygments.lexers import get_all_lexers from p ...

  3. Python自动化之django model验证(很弱,感觉应用场景不多)

    django model的数据验证 使用full_clean进行验证 obj = models.UserInfo(name="alex",email="tiantian& ...

  4. pl/sql连接远程oracle

    1.找到oracle安装程序下的网络配置助手 2.选中本地net服务,进行添加 3.输入远程oracle服务名 4.选中tcp协议 5.输入远程oracle的ip地址 6.在网络服务名处,随便输入一个 ...

  5. highcharts柱状图实现legend和数据列一一对应效果

    var cate = ['Green', 'Pink']; Highcharts.chart('container', { chart: { type: 'column' }, legend: { e ...

  6. oracle常用视图v$mystat v$sesstat v$sysstat v$statname v$thread v$ parameter v$session v$process

    这两天看了盖国强老师的<<深入浅出>>,很佩服盖老师钻研的精神.书中常用到一个查询语句,为了获取当前会话的跟踪文件路径,sql如下: SELECT d.VALUE || '/' ...

  7. Object-c SQLite 数据库内存溢出问题

    最近正在开发一个应用,应用里面使用SQLite 数据库的地方比较多,一些下载的内容都进行了SQLite数据库缓存,应用开发完成之后发现一个严重的问题,程序莫名其妙的崩溃,使用XCode的内存分析工具分 ...

  8. 内存管理与正则(re)模块

    内存管理 垃圾回收机制 不能被程序访问到的数据,就称之为垃圾 也就是失去了一个能够访问到值数据的名称空间,导致在内存中无作为 引用计数:是内存管理的原理 引用计数是用来记录值的内存地址被记录的次数 每 ...

  9. mysql8.0版本skip-grant-tables出现的新问题

    MySQL 初始化 mysqld --initialize 的时候会有密码,就这个样子, 可是毕竟总有人跟我一样,不熟悉安装过程,没有注意这一密码这一项,导致你现在不知道密码的尴尬处境,或者说你是正常 ...

  10. vue实现两重列表集合,点击显示,点击隐藏的折叠效果,(默认显示集合最新一条数据,点击展开,显示集合所有数据)

    效果图: 默认显示最新一条数据: 点击显示所有数据: 代码: 说明:这里主要是 这块用来控制显示或者隐藏 根据当前点击的  这个方法里传递的index 对应  isShow 数组里的index  ,对 ...