前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >高并发场景 LVS 安装及高可用实现

高并发场景 LVS 安装及高可用实现

作者头像
惨绿少年
发布于 2017-12-27 07:53:47
发布于 2017-12-27 07:53:47
3.2K00
代码可运行
举报
文章被收录于专栏:惨绿少年惨绿少年
运行总次数:0
代码可运行

1.1 负载均衡介绍

1.1.1 负载均衡的妙用

 负载均衡(Load Balance)集群提供了一种廉价、有效、透明的方法,来扩展网络设备和服务器的负载、带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。

ü 单台计算机无法承受大规模的并发访问或数据流量了,此时需要搭建负载均衡集群把流量分摊到多台节点设备上分别处理,即减少用户等待响应的时间又提升了用户体验;

ü 7*24小时的服务保证,任意一个或多个有限后端节点设备宕机,不能影响整个业务的运行。

1.1.2 为什么要用lvs

n 工作在网络模型的7层,可以针对http应用做一些分流的策略,比如针对域名、目录结构,Nginx单凭这点可利用的场合就远多于LVS了。

n 最新版本的Nginx也支持4层TCP负载,曾经这是LVS比Nginx好的地方。

n Nginx对网络稳定性的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势之一,相反LVS对网络稳定性依赖比较大。

n Nginx安装和配置比较简单,测试起来比较方便,它基本能把错误用日志打印出来。LVS的配置、测试就要花比较长的时间了,LVS对网络依赖比较大。

那为什么要用lvs呢?

ü 简单一句话,当并发超过了Nginx上限,就可以使用LVS了。

ü 日1000-2000W PV或并发请求1万以下都可以考虑用Nginx。

ü 大型门户网站,电商网站需要用到LVS。

1.2 LVS介绍

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

1.2.1 相关参考资料

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

相关中文资料

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 

1.2.2 LVS内核模块ip_vs介绍

早在2.2内核时, IPVS就已经以内核补丁的形式出现。

从2.4.23版本开始,IPVS软件就合并到Linux内核的常用版本的内核补丁的集合。

2.4.24以后IPVS已经成为Linux官方标准内核的一部分。

ü LVS无需安装

ü 安装的是管理工具,第一种叫ipvsadm,第二种叫keepalive

ü ipvsadm是通过命令行管理,而keepalive读取配置文件管理

ü 后面我们会用Shell脚本实现keepalive的功能

1.3 LVS集群搭建

1.3.1 集群环境说明

主机名

IP地址

软件

系统版本

lb03

10.0.0.15

lvs keepalived

CentOS Linux release 7.4.1708

lb04

10.0.0.16

lvs keepalived

CentOS Linux release 7.4.1708

web03

10.0.0.18

tomcat

CentOS Linux release 7.4.1708

web04

10.0.0.17

tomcat

CentOS Linux release 7.4.1708

主机说明

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@lb03 ~]# cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core) 
[root@lb03 ~]# uname -a
Linux lb03 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[root@lb03 ~]# systemctl status firewalld.service 
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)
[root@lb03 ~]# getenforce 
Disabled

web环境说明

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@lb03 ~]# curl 10.0.0.17
web03
[root@lb03 ~]# curl 10.0.0.18
web04

  web服务器的搭建参照: Tomcat: http://www.cnblogs.com/clsn/p/7904611.html

               Nginx: http://www.cnblogs.com/clsn/p/7750615.html

1.3.2 安装ipvsadm管理工具

安装管理工具

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yum -y install ipvsadm

查看当前LVS状态,顺便激活LVS内核模块。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ipvsadm

查看系统的LVS模块。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@lb03 ~]# lsmod|grep ip_vs
ip_vs_wrr              12697  1
ip_vs                 141092  3 ip_vs_wrr
nf_conntrack          133387  1 ip_vs
libcrc32c              12644  3 xfs,ip_vs,nf_conntrack

1.3.3 LVS集群搭建

配置LVS负载均衡服务(在lb03操作

步骤1:在eth0网卡绑定VIP地址(ip)

步骤2:清除当前所有LVS规则(-C)

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

步骤4:添加虚拟服务(-A),-t指定虚拟服务的IP端口,-s 指定调度算法 调度算法见man ipvsadm, rr wrr 权重轮询 -p 指定超时时间

步骤5:将虚拟服务关联到真实服务上(-a) -r指定真实服务的IP端口 -g LVS的模式 DR模式 -w 指定权重

步骤6:查看配置结果(-ln)

命令集

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ip addr add 10.0.0.13/24 dev eth0
ipvsadm -C                    
ipvsadm --set 30 5 60         
ipvsadm -A -t 10.0.0.13:80 -s wrr -p 20   
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

检查结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@lb03 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.0.0.13:80 wrr persistent 20
  -> 10.0.0.17:80                 Route   1      0          0  
  -> 10.0.0.18:80                 Route   1      0          0   

ipvsadm参数说明:(更多参照 man ipvsadm)

参数 (短格式)

参数 (长格式)

参数说明

-A

--add-service

在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器。

-E

--edit-service

编辑内核虚拟服务器表中的一条虚拟服务器记录。

-D

--delete-service

删除内核虚拟服务器表中的一条虚拟服务器记录。

-C

--clear

清除内核虚拟服务器表中的所有记录。

-R

--restore

恢复虚拟服务器规则

-S

--save

保存虚拟服务器规则,输出为-R 选项可读的格式

-a

--add-server

在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录。也就是在一个虚拟服务器中增加一台新的真实服务器

-e

--edit-server

编辑一条虚拟服务器记录中的某条真实服务器记录

-d

--delete-server

删除一条虚拟服务器记录中的某条真实服务器记录

-L|-l

--list

显示内核虚拟服务器表

-Z

--zero

虚拟服务表计数器清零(清空当前的连接数量等)

-

--set tcp tcpfin udp

设置连接超时值

-

--start-daemon

启动同步守护进程。他后面可以是master 或backup,用来说明LVS Router 是master 或是backup。在这个功能上也可以采用keepalived 的VRRP 功能。

-

--stop-daemon

停止同步守护进程

-h

--help

显示帮助信息

-t

--tcp-service service-address [vip:port] or [real-server-ip:port]

说明虚拟服务器提供的是tcp 的服务

-u

--udp-service service-address [vip:port] or [real-server-ip:port]

说明虚拟服务器提供的是udp 的服务

-f

--fwmark-service fwmark

说明是经过iptables 标记过的服务类型。

-s

--scheduler scheduler

使用的调度算法,有这样几个选项 rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq 默认的调度算法是: wlc

-p

--persistent [timeout]

持久稳固的服务。这个选项的意思是来自同一个客户的多次请求,将被同一台真实的服务器处理。timeout 的默认值为300秒。

-M

--netmask netmask

persistent granularity mask

-r

--real-server server-address

真实的服务器[Real-Server:port]

-g

--gatewaying

指定LVS 的工作模式为直接路由模式(也是LVS 默认的模式)

-i

--ipip

指定LVS 的工作模式为隧道模式

-m

--masquerading

指定LVS 的工作模式为NAT 模式

-w

--weight weight

真实服务器的权值

-

--mcast-interface

interface 指定组播的同步接口

-c

--connection

显示LVS 目前的连接 如:ipvsadm -L -c

-

--timeout

显示tcp tcpfin udp 的timeout 值 如:ipvsadm -L --timeout

-

--daemon

显示同步守护进程状态

-

--stats

显示统计信息

-

--rate

显示速率信息

-

--sort

对虚拟服务器和真实服务器排序输出

-

--numeric -n

输出IP 地址和端口的数字形式

1.3.4 在web浏览器配置操作

步骤1:在lo网卡绑定VIP地址(ip)

步骤2:修改内核参数抑制ARP响应

命令集

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

至此LVS集群配置完毕

1.3.5 进行访问测试

浏览器访问:

命令行测试:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@lb04 ~]# curl 10.0.0.13
web03

抓包查看结果:

arp解析查看:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@lb04 ~]# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
10.0.0.254               ether   00:50:56:e9:9f:2c   C                     eth0
10.0.0.18                ether   00:0c:29:ea:ca:55   C                     eth0
10.0.0.13                ether   00:0c:29:de:7c:97   C                     eth0
172.16.1.15              ether   00:0c:29:de:7c:a1   C                     eth1
10.0.0.17                ether   00:0c:29:4a:ac:4a   C                     eth0

1.4 负载均衡(LVS)相关名词

术语说明:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DS:Director Server。指的是前端负载均衡器节点。
RS:Real Server。后端真实的工作服务器。
VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址。
DIP:Director Server IP,主要用于和内部主机通讯的IP地址。
RIP:Real Server IP,后端服务器的IP地址。
CIP:Client IP,访问客户端的IP地址。

1.4.1 LVS集群的工作模式--DR直接路由模式

DR模式是通过改写请求报文的目标MAC地址,将请求发给真实服务器的,而真实服务器将响应后的处理结果直接返回给客户端用户。

DR技术可极大地提高集群系统的伸缩性。但要求调度器LB与真实服务器RS都有一块物理网卡连在同一物理网段上,即必须在同一局域网环境。

DR直接路由模式说明:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
a)通过在调度器LB上修改数据包的目的MAC地址实现转发。注意,源IP地址仍然是CIP,目的IP地址仍然是VIP。
b)请求的报文经过调度器,而RS响应处理后的报文无需经过调度器LB,因此,并发访问量大时使用效率很高,比Nginx代理模式强于此处。
c)DR模式是通过MAC地址的改写机制实现转发的,因此,所有RS节点和调度器LB只能在同一个局域网中。需要注意RS节点的VIP的绑定(lo:vip/32)ARP抑制问题。
d)强调下:RS节点的默认网关不需要是调度器LBDIP,而应该直接是IDC机房分配的上级路由器的IP(这是RS带有外网IP地址的情况),理论上讲,只要RS可以出网即可,不需要必须配置外网IP,但走自己的网关,那网关就成为瓶颈了。
e)由于DR模式的调度器仅进行了目的MAC地址的改写,因此,调度器LB无法改变请求报文的目的端口。LVS DR模式的办公室在二层数据链路层(MAC),NAT模式则工作在三层网络层(IP)和四层传输层(端口)。
f)当前,调度器LB支持几乎所有UNIX、Linux系统,但不支持windows系统。真实服务器RS节点可以是windows系统。
g)总之,DR模式效率很高,但是配置也较麻烦。因此,访问量不是特别大的公司可以用haproxy/Nginx取代之。这符合运维的原则:简单、易用、高效。日1000-2000W PV或并发请求1万以下都可以考虑用haproxy/Nginx(LVSNAT模式)
h)直接对外的访问业务,例如web服务做RS节点,RS最好用公网IP地址。如果不直接对外的业务,例如:MySQL,存储系统RS节点,最好只用内部IP地址。

DR的实现原理和数据包的改变

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(a) 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IPCIP,目标IPVIP
(b) PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT
(c) IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIPMAC地址,将目标MAC地址修改RIPMAC地址,然后将数据包发至POSTROUTING链。 此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIPMAC地址,目标MAC地址为RIPMAC地址 
(d) 由于DSRS在同一个网络中,所以是通过二层来传输。POSTROUTING链检查目标MAC地址为RIPMAC地址,那么此时数据包将会发至Real Server。
(e) RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文。处理完成之后,将响应报文通过lo接口传送给eth0网卡然后向外发出。 此时的源IP地址为VIP,目标IPCIP 
(f) 响应报文最终送达至客户端

1.5 在web端的操作有什么含义?

1.5.1 RealServer为什么要在lo接口上配置VIP?

既然要让RS能够处理目标地址为vip的IP包,首先必须要让RS能接收到这个包。

  在lo上配置vip能够完成接收包并将结果返回client。

1.5.2 在eth0网卡上配置VIP可以吗?

不可以,将VIP设置在eth0网卡上,会影响RS的arp请求,造成整体LVS集群arp缓存表紊乱,以至于整个负载均衡集群都不能正常工作。

1.5.3 为什么要抑制ARP响应?

① arp协议说明

ARP协议,全称"Address Resolution Protocol",中文名是地址解析协议,使用ARP协议可实现通过IP地址获得对应主机的物理地址(MAC地址)。

ARP协议要求通信的主机双方必须在同一个物理网段(即局域网环境)!

为了提高IP转换MAC的效率,系统会将解析结果保存下来,这个结果叫做ARP缓存。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Windows查看ARP缓存命令 arp -a
Linux查看ARP缓存命令 arp -n
Linux解析IP对应的MAC地址 arping -c 1 -I eth0 10.0.0.6

ARP缓存表是把双刃剑

a) 主机有了arp缓存表,可以加快ARP的解析速度,减少局域网内广播风暴。因为arp是发广播解析的,频繁的解析也是消耗带宽的,尤其是机器多的时候。

b) 正是有了arp缓存表,给恶意黑客带来了攻击服务器主机的风险,这个就是arp欺骗攻击。

c) 切换路由器负载均衡器等设备时,可能会导致短时网络中断。因为所有的客户端ARP缓存表没有更新

②服务器切换ARP问题

  当集群中一台提供服务的lb01机器宕机后,然后VIP会转移到备机lb02上,但是客户端的ARP缓存表的地址解析还是宕机的lb01的MAC地址。从而导致,即使在lb02上添加VIP,也会发生客户端无法访问的情况。

  解决办法是:当lb01宕机,VIP地址迁移到lb02时,需要通过arping命令通知所有网络内机器更新本地的ARP缓存表,从而使得客户机访问时重新广播获取MAC地址。

  这个是自己开发服务器高可用脚本及所有高可用软件必须考虑到的问题。

ARP广播进行新的地址解析

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
arping -I eth0 -c 1 -U VIP
arping -I eth0 -c 1 -U 10.0.0.13

测试命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ip addr del 10.0.0.13/24 dev eth0
ip addr add 10.0.0.13/24 dev eth0
ip addr show eth0
arping -I eth0 -c 1 -U 10.0.0.13

windows查看arp -a

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
接口: 10.0.0.1 --- 0x12
  Internet 地址         物理地址              类型
  10.0.0.13             00-0c-29-de-7c-97     动态       
  10.0.0.15             00-0c-29-de-7c-97     动态       
  10.0.0.16             00-0c-29-2e-47-20     动态       
  10.0.0.17             00-0c-29-4a-ac-4a     动态       
  10.0.0.18             00-0c-29-ea-ca-55     动态        

③arp_announce和arp_ignore详解

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#  配置的内核参数
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

lvs在DR模式下需要关闭arp功能

arp_announce

对网络接口上,本地IP地址的发出的,ARP回应,作出相应级别的限制:

确定不同程度的限制,宣布对来自本地源IP地址发出Arp请求的接口

数值

含义

0(默认)

在任意网络接口(eth0,eth1,lo)上的任何本地地址

1

尽量避免不在该网络接口子网段的本地地址做出arp回应. 当发起ARP请求的源IP地址 是被设置应该经由路由达到此网络接口的时候很有用.此时会检查来访IP是否为所有接口 上的子网段内ip之一.如果改来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理.

2

对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试 选择与能与该地址通信的本地地址.首要是选择所有的网络接口的子网中外出访问子网中 包含该目标IP地址的本地地址. 如果没有合适的地址被发现,将选择当前的发送网络接口 或其他的有可能接受到该ARP回应的网络接口来进行发送.

arp_ignore定义

对目标地定义对目标地址为本地IP的ARP询问不同的应答模式0

数值

含义

0(默认值)

回应任何网络接口上对任何本地IP地址的arp查询请求

1

只回答目标IP地址是来访网络接口本地地址的ARP查询请求

2

只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内

3

不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应

4-7

保留未使用

8

不回应所有(本地地址)的arp查询

抑制RS端arp前的广播情况

抑制RS端arp后广播情况

1.6 LVS集群的工作模式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DR(Direct Routing)直接路由模式
NAT(Network Address Translation)
TUN(Tunneling)隧道模式
FULLNAT(Full Network Address Translation)

1.6.1 LVS集群的工作模式--NAT

通过网络地址转换,调度器LB重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器,真实服务器的响应报文处理之后,返回时必须要通过调度器,经过调度器时报文的源地址被重写,再返回给客户,完成整个负载调度过程。

收费站模式---来去都要经过LB负载均衡器。

NAT方式的实现原理和数据包的改变

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(a). 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IPCIP,目标IPVIP
(b). PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT
(c). IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,然后将数据包发至POSTROUTING链。 此时报文的源IPCIP,目标IPRIP
(d). POSTROUTING链通过选路,将数据包发送给Real Server
(e). Real Server比对发现目标为自己的IP,开始构建响应报文发回给Director Server。 此时报文的源IPRIP,目标IPCIP
(f). Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端。 此时报文的源IPVIP,目标IPCIP

LVS-NAT模型的特性

l RS应该使用私有地址,RS的网关必须指向DIP

l DIP和RIP必须在同一个网段内

l 请求和响应报文都需要经过Director Server,高负载场景中,Director Server易成为性能瓶颈

l 支持端口映射

l RS可以使用任意操作系统

l 缺陷:对Director Server压力会比较大,请求和响应都需经过director server

1.6.2 LVS集群的工作模式--隧道模式TUN

采用NAT技术时,由于请求和响应的报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈,为了解决这个问题,调度器把请求的报文通过IP隧道(相当于ipip或ipsec )转发至真实服务器,而真实服务器将响应处理后直接返回给客户端用户,这样调度器就只处理请求的入站报文。由于一般网络服务应答数据比请求报文大很多,采用 VS/TUN技术后,集群系统的最大吞吐量可以提高10倍。

VS/TUN工作流程,它的连接调度和管理与VS/NAT中的一样,只是它的报文转发方法不同。调度器根据各个服务器的负载情况,连接数多少,动态地选择一台服务器,将原请求的报文封装在另一个IP报文中,再将封装后的IP报文转发给选出的真实服务器;真实服务器收到报文后,先将收到的报文解封获得原来目标地址为VIP地址的报文, 服务器发现VIP地址被配置在本地的IP隧道设备上(此处要人为配置),所以就处理这个请求,然后根据路由表将响应报文直接返回给客户。

TUN原理和数据包的改变

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(a) 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IPCIP,目标IPVIP 
(b) PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT
(c) IPVS比对数据包请求的服务是否为集群服务,若是,在请求报文的首部再次封装一层IP报文,封装源IP为为DIP,目标IPRIP。然后发至POSTROUTING链。 此时源IPDIP,目标IPRIP
(d) POSTROUTING链根据最新封装的IP报文,将数据包发至RS(因为在外层封装多了一层IP首部,所以可以理解为此时通过隧道传输)。 此时源IPDIP,目标IPRIP
(e) RS接收到报文后发现是自己的IP地址,就将报文接收下来,拆除掉最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的lo接口VIP,那么此时RS开始处理此请求,处理完成之后,通过lo接口送给eth0网卡,然后向外传递。 此时的源IP地址为VIP,目标IPCIP
(f) 响应报文最终送达至客户端

LVS-Tun模型特性

l RIP、VIP、DIP全是公网地址

l RS的网关不会也不可能指向DIP

l 所有的请求报文经由Director Server,但响应报文必须不能进过Director Server

l 不支持端口映射

l RS的系统必须支持隧道

1.6.3 LVS集群的工作模式--FULLNAT

LVS的DR和NAT模式要求RS和LVS在同一个vlan中,导致部署成本过高;TUNNEL模式虽然可以跨vlan,但RealServer上需要部署ipip隧道模块等,网络拓扑上需要连通外网,较复杂,不易运维。

为了解决上述问题,开发出FULLNAT,该模式和NAT模式的区别是:数据包进入时,除了做DNAT,还做SNAT(用户ip->内网ip),从而实现LVS-RealServer间可以跨vlan通讯,RealServer只需要连接到内网。

类比地铁站多个闸机。

1.7 IPVS调度器实现了如下八种负载调度算法:

  a) 轮询(Round Robin)RR

调度器通过"轮叫"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。

  b) 加权轮叫(Weighted Round Robin)WRR

调度器通过"加权轮叫"调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

  c) 最少链接(Least Connections) LC

调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载。

  d) 加权最少链接(Weighted Least Connections) Wlc

在集群系统中的服务器性能差异较大的情况下,调度器采用"加权最少链接"调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

  e) 基于局部性的最少链接(Locality-Based Least Connections) Lblc

"基于局部性的最少链接" 调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器 是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用"最少链接"的原则选出一个可用的服务 器,将请求发送到该服务器。

  f) 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)

"带复制的基于局部性最少链接"调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个 目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务 器组,按"最小连接"原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按"最小连接"原则从这个集群中选出一 台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的 程度。

  g) 目标地址散列(Destination Hashing) Dh

"目标地址散列"调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

  h) 源地址散列(Source Hashing)SH

"源地址散列"调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

1.8 LVS+Keepalived方案实现

1.8.1 keepalived功能

1. 添加VIP

2. 添加LVS配置

3. 高可用(VIP漂移)

4. web服务器健康检查

1.8.2 在负载器安装Keepalived软件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yum -y install keepalived

# 检查软件是否安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@lb03 ~]# rpm -qa keepalived
keepalived-1.3.5-1.el7.x86_64

1.8.3 修改配置文件

lb03上keepalied配置文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 [root@lb03 ~]# cat /etc/keepalived/keepalived.conf
 2 global_defs {
 3    router_id LVS_01
 4 }
 5 
 6 vrrp_instance VI_1 {
 7     state MASTER
 8     interface eth0
 9     virtual_router_id 51
10     priority 150
11     advert_int 1
12     authentication {
13         auth_type PASS
14         auth_pass 1111
15     }
16     virtual_ipaddress {
17      10.0.0.13/24
18     }
19 }
20 
21 virtual_server 10.0.0.13 80 {
22     delay_loop 6              
23     lb_algo wrr                
24     lb_kind DR                
25     nat_mask 255.255.255.0
26     persistence_timeout 50     
27     protocol TCP                
28 
29     real_server 10.0.0.17 80 {
30         weight 1              
31         TCP_CHECK {
32         connect_timeout 8       
33         nb_get_retry 3
34         delay_before_retry 3
35         connect_port 80
36         }
37     }
38 
39     real_server 10.0.0.18 80 {
40         weight 1              
41         TCP_CHECK {
42         connect_timeout 8       
43         nb_get_retry 3
44         delay_before_retry 3
45         connect_port 80
46         }
47     }
48 }

lb03 /etc/keepalived/keepalived.conf

lb04的Keepalied配置文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 [root@lb04 ~]# cat /etc/keepalived/keepalived.conf
 2 global_defs {
 3    router_id LVS_02
 4 }
 5 
 6 vrrp_instance VI_1 {
 7     state BACKUP
 8     interface eth0
 9     virtual_router_id 51
10     priority 100
11     advert_int 1
12     authentication {
13         auth_type PASS
14         auth_pass 1111
15     }
16     virtual_ipaddress {
17      10.0.0.13/24
18     }
19 }
20 virtual_server 10.0.0.13 80 {
21     delay_loop 6          
22     lb_algo wrr                
23     lb_kind DR                
24     nat_mask 255.255.255.0
25     persistence_timeout 50     
26     protocol TCP                
27 
28     real_server 10.0.0.17 80 {
29         weight 1              
30         TCP_CHECK {
31         connect_timeout 8       
32         nb_get_retry 3
33         delay_before_retry 3
34         connect_port 80
35         }
36     }
37 
38     real_server 10.0.0.18 80 {
39         weight 1              
40         TCP_CHECK {
41         connect_timeout 8       
42         nb_get_retry 3
43         delay_before_retry 3
44         connect_port 80
45         }
46     }
47 }

lb04 /etc/keepalived/keepalived.conf

keepalived persistence_timeout参数意义 LVS Persistence 参数的作用

http://blog.csdn.net/nimasike/article/details/53911363

1.8.4 启动keepalived服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@lb03 ~]# systemctl restart  keepalived.service 
# 检查lvs状态
[root@lb03 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.0.0.13:80 wrr persistent 50
  -> 10.0.0.17:80                 Route   1      0          0         
  -> 10.0.0.18:80                 Route   1      0          0  
# 检查虚拟ip
[root@lb03 ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:de:7c:97 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.15/24 brd 10.0.0.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 10.0.0.13/24 scope global secondary eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fede:7c97/64 scope link 
       valid_lft forever preferred_lft forever

1.8.5 在web服务器上进行配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(在web03/web04同时操作下面步骤)
步骤1:在lo网卡绑定VIP地址(ip)
步骤2:修改内核参数抑制ARP响应
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

注意:web服务器上的配置为临时生效,可以将其写入rc.local文件,注意文件的执行权限。

使用curl命令进行测试

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@lb04 ~]# curl 10.0.0.13
web03

至此keepalived+lvs配置完毕

1.9 常见LVS负载均衡高可用解决方案

Ø 开发类似keepalived的脚本,早期的办法,现在不推荐使用。

Ø heartbeat+lvs+ldirectord脚本配置方案,复杂不易控制,不推荐使用

Ø RedHat工具piranha,一个web界面配置LVS。

Ø LVS-DR+keepalived方案,老师推荐最优方案,简单、易用、高效。

1.9.1 lvs排错思路

1.9.2 参考文档

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 
NAT模式安装详解   http://www.cnblogs.com/liwei0526vip/p/6370103.html
开发眼光看lvs      http://blog.hesey.net/2013/02/introduce-to-load-balance-and-lvs-briefly.html
lvs 介绍      http://www.it165.net/admin/html/201401/2248.html

 本文出自“惨绿少年”,欢迎转载,转载请注明出处!http://blog.znix.top

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-11-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
清华刘知远:教你用HowNet在深度学习时代搞事情(附论文下载)
来源:知乎 作者:刘知远 本文共3539字,建议阅读11分钟。 本文为大家解读什么是HowNet,并且可以用HowNet在深度学习时代做些什么。 2017年12月底,清华大学张钹院士做了一场题为《AI科学突破的前夜,教授们应当看到什么?》的精彩特邀报告。他认为,处理知识是人类所擅长的,而处理数据是计算机所擅长的,如果能够将二者结合起来,一定能够构建出比人类更加智能的系统。因此他提出,AI未来的科学突破是建立一种同时基于知识和数据的AI系统。 我完全赞同张钹老师的学术观点。最近一年里,我们在这方面也做了一
数据派THU
2018/01/29
4K0
清华刘知远:教你用HowNet在深度学习时代搞事情(附论文下载)
对话清华NLP实验室刘知远:NLP搞事情少不了知识库与图神经网络
在这一年中,清华大学副教授刘知远和他所在的清华自然语言处理实验室同样在这个领域做出了很多成果,他们关注如何结合深度神经网络与大型知识库,并期望构建更多鲁棒及可解释性的自然语言理解系统。在这一篇文章中,机器之心采访了刘知远教授,他向我们介绍了 NLP 在过去一年的重要发展历程,以及实验室的重要研究成果与方向。
zenRRan
2019/11/19
9650
情感的强度分类_情感量表
其中,p1,p2为两个需要计算比较的义原,Depth(p)是义原层次体系中的深度,Spd(p1,p2)表示p1,p2两者在层次体系的重合度。
全栈程序员站长
2022/09/23
4350
情感的强度分类_情感量表
专访 | 潜心30年,知网知识系统如何从概念层次上计算自然语言
机器之心原创 作者:思源 近日,机器之心采访了语知科技的首席科学家董强先生,董强向我们详细介绍了一种基于 Common-sense 知识库体系从概念层次进行自然语言处理的技术。语知自然语言理解技术平台
机器之心
2018/05/09
9020
NLP泰斗董振东老师与他的知网 | 纪念
昨晚,我们通过中国中文信息学会发布的讣告得知,我国著名中文信息处理专家、《知网》(HowNet)发明人董振东教授,于 2019 年 2 月 28 日凌晨十二时零八分在加拿大蒙特利尔市逝世,享年 82 岁。昨日,也是我们获悉深度学习三巨头 Yoshua Bengio、Yann LeCun、Geoffrey Hinton 获得 ACM 图灵奖的日子。不禁慨叹:岁月既成就了对科研孜孜不倦者的计算机事业,也令其两鬓斑白、盛年不再,一晃几十年过去。
AI科技大本营
2019/05/06
1.3K0
NLP泰斗董振东老师与他的知网 | 纪念
【数据增强】Cutout「建议收藏」
论文: Improved Regularization of Convolutional Neural Networks with Cutout. Github: https://github.com/uoguelph-mlrg/Cutout.
全栈程序员站长
2022/11/08
8340
【数据增强】Cutout「建议收藏」
清华刘知远:知识指导的自然语言处理
自然语言处理是实现人工智能、通过图灵测试的关键。虽然目前深度学习在自然语言处理上取得了巨大的突破,对自然语言的深度理解仍需要复杂知识的支持,来实现从理解字面意思到言外之意的跃迁。本文介绍清华大学刘知远老师的《知识指导的自然语言处理》。
Datawhale
2019/10/09
1.4K0
清华刘知远:知识指导的自然语言处理
话到嘴边却忘了?这个模型能帮你 | AAAI 2020
本文对清华大学、华为诺亚方舟合作的论文《Multi-channel Reverse Dictionary Model》进行解读。该论文已经被AAAI-20录用。
AI科技评论
2019/12/30
5980
中文金融领域情感词典构建「建议收藏」
文章基于简单算法和人工判断,使用多阶段剔除法,构建了 中文金融情感词典CFSD(ChineseFinancialSentimentDictionary), 这个词典能帮到那些想用文本分析研究会计金融领域的中文文档的研究者。CFSD词典有1489个负面词,1108个正面词。并且简单讨论了CFSD词典的应用领域。
全栈程序员站长
2022/09/23
1.7K0
中文金融领域情感词典构建「建议收藏」
Python 文本挖掘:使用情感词典进行情感分析(算法及程序设计)
情感分析就是分析一句话说得是很主观还是客观描述,分析这句话表达的是积极的情绪还是消极的情绪。 原理 比如这么一句话:“这手机的画面极好,操作也比较流畅。不过拍照真的太烂了!系统也不好。” ① 情感词 要分析一句话是积极的还是消极的,最简单最基础的方法就是找出句子里面的情感词,积极的情感词比如:赞,好,顺手,华丽等,消极情感词比如:差,烂,坏,坑爹等。出现一个积极词就+1,出现一个消极词就-1。 里面就有“好”,“流畅”两个积极情感词,“烂”一个消极情感词。那它的情感分值就是1+1-1+1=2. 很明显这个分
机器学习AI算法工程
2018/03/14
21.1K4
Python 文本挖掘:使用情感词典进行情感分析(算法及程序设计)
孙茂松:深度学习的红利我们享受得差不多了!
访谈伊始,孙茂松首先简单概括了一下人工智能近几年的发展状况。他说道,人工智能这几年的发展,大家接触比较多的是图像方面的成果,包括很多创业公司的人脸识别、刷脸等技术,我们可以看到图像方面的进步非常快。但是,图像只是智能的一部分,人的智能区别于动物其实最主要的特征是语言。人工智能领域有一句话:自然语言理解是人工智能皇冠上的明珠。
AI科技大本营
2019/11/22
5000
孙茂松:深度学习的红利我们享受得差不多了!
情感词典是什么_中文情感分析词典
1.褒义词及其近义词;2.否定词典;3.情感词汇本体;4.清华大学中文褒贬词典;5.台湾大学NTUSD情感词典;6.知网情感词典;7.汉语情感极值表;8.情感词典及其分类。
全栈程序员站长
2022/09/23
1.2K0
基于段落检索的无监督阅读理解介绍
| 导语  阅读理解是当前火热的自然语言处理应用方向之一,但在大多数业务场景下都缺少有效的标注数据,这种情况下常常需要借助传统的信息检索方法。本文总结了TREC-9和TREC-10上几个比较经典的基于段落检索的无监督文档型问答系统,并介绍了这类系统的主要框架。 背景 在自动对话机器人或是智能客服中,根据用户问题,从文档中寻找可能的答案是一种很常见的需求。当前有很多基于神经网络的阅读理解模型,但是这些模型都需要大量的标注数据进行训练。在很多业务场景下,却常常难以拿到数量足够的监督数据,有时候甚至没有监督数据。
腾讯知文实验室
2018/08/13
1.7K0
【论文笔记】中文词向量论文综述(一)
最近在做中文词向量相关工作,其中看了一些中文词向量的相关论文,在这篇文章,将把近几年的中文词向量进展及其模型结构加以简述,大概要写3-4篇综述,每篇包含2-3篇论文。
zenRRan
2018/08/22
7180
【论文笔记】中文词向量论文综述(一)
用jina快速构建搜索服务
神经搜索工具 特定语法 excutor 编写自己的flow; class MyExecutor(Executor): @requests def foo(self, docs: DocumentArray, **kwargs): docs[0].text = 'hello, world!' docs[1].text = 'goodbye, world!' @requests(on='/crunch-numbers') def bar(sel
DC童生
2022/10/05
7020
用jina快速构建搜索服务
[Oracle]-[同义词]-public与非public同义词
Sys账户给bisal账户的t_emp表创建public同义词,bisal用户可以访问t_emp_syn,但scott账户无法查询,select ... t_emp_syn提示表或视图不存在。
bisal
2019/01/29
1K0
hostbyte=DID_XXX driverbyte=DRIVER_XXXX 错误查询
1. hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
PedroQin
2020/02/12
9.1K0
业界 | 还想去洗手间做坏事?小心被AI抓到!
为了应对初、高中学校电子烟日益流行的问题,学校拆除了洗手间的门、在洗手间安监视器甚至将其关闭。有一家美国公司给学校提供 AI 辅助的校园监控设备,来帮助老师和管理者监管洗手间里的电子烟或霸凌现象,这已经转化为这家公司的一项稳定业务。
机器之心
2018/12/12
5600
业界 | 还想去洗手间做坏事?小心被AI抓到!
告别单一,日本厂商推出集触觉、嗅觉及温度于一体的VR体验柜
虽然头戴式显示器(HMD)、3D耳机和跟踪控制器提供的沉浸式体验已经足够令人印象深刻了,但是VR产业仍旧在不断寻找新的方式,以期让更多的用户参与到虚拟世界中来。 日前,来自日本的Koei Tecmo厂
VRPinea
2018/05/15
6900
Elasticsearch推荐插件篇(head,sense,marvel)
安装head head插件可以用来快速查看elasticsearch中的数据概况以及非全量的数据,也支持控件化查询和rest请求,但是体验都不是很好。 一般就用它来看各个索引的数据量以及分片的状态。 [root@localnode1 bin]# ./plugin install mobz/elasticsearch-head -> Installing mobz/elasticsearch-head... Plugins directory [/usr/elk/elasticsearch-2.4.0/plu
用户1154259
2018/01/17
1.7K0
Elasticsearch推荐插件篇(head,sense,marvel)
推荐阅读
相关推荐
清华刘知远:教你用HowNet在深度学习时代搞事情(附论文下载)
更多 >
LV.6
阿里算法工程师
目录
  • 1.1 负载均衡介绍
    • 1.1.1 负载均衡的妙用
    • 1.1.2 为什么要用lvs
  • 1.2 LVS介绍
    • 1.2.1 相关参考资料
    • 1.2.2 LVS内核模块ip_vs介绍
  • 1.3 LVS集群搭建
    • 1.3.1 集群环境说明
    • 1.3.2 安装ipvsadm管理工具
    • 1.3.3 LVS集群搭建
    • 1.3.4 在web浏览器配置操作
    • 1.3.5 进行访问测试
  • 1.4 负载均衡(LVS)相关名词
    • 1.4.1 LVS集群的工作模式--DR直接路由模式
  • 1.5 在web端的操作有什么含义?
    • 1.5.1 RealServer为什么要在lo接口上配置VIP?
    • 1.5.2 在eth0网卡上配置VIP可以吗?
    • 1.5.3 为什么要抑制ARP响应?
  • 1.6 LVS集群的工作模式
    • 1.6.1 LVS集群的工作模式--NAT
    • 1.6.2 LVS集群的工作模式--隧道模式TUN
    • 1.6.3 LVS集群的工作模式--FULLNAT
  • 1.7 IPVS调度器实现了如下八种负载调度算法:
  • 1.8 LVS+Keepalived方案实现
    • 1.8.1 keepalived功能
    • 1.8.2 在负载器安装Keepalived软件
    • 1.8.3 修改配置文件
    • 1.8.4 启动keepalived服务
    • 1.8.5 在web服务器上进行配置
  • 1.9 常见LVS负载均衡高可用解决方案
    • 1.9.1 lvs排错思路
    • 1.9.2 参考文档
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档