首页 > 其他 > 详细

lvs集群

时间:2020-07-23 15:45:29      阅读:58      评论:0      收藏:0      [点我收藏+]

1. LVS介绍

LVS,是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目。LVS由用户空间的ipvsadm和内核空间的IPVS组成,ipvsadm用来定义规则,IPVS利用ipvsadm定义的规则工作。现在LVS已经是 Linux标准内核的一部分,在Linux2.4内核以前,使用LVS时必须要重新编译内核以支持LVS功能模块,但是从Linux2.4内核以后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能。

LVS特点:

通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。LVS的主要特点有以下几个方面:

  • 负载能力强:LVS基于内核网络层面工作,有超强的承载能力和并发处理能力。单台LVS负载均衡器,可支持上万并发连接。稳定性强:是工作在网络4层之上仅作分发之用,这个特点也决定了它在负载均衡软件里的性能最强,稳定性最好,对内存和cpu资源消耗极低。

  • 成本低廉:硬件负载均衡器少则十几万,多则几十万上百万,LVS只需一台服务器和就能免费部署使用,性价比极高。

  • 配置简单:LVS配置非常简单,仅需几行命令即可完成配置,也可写成脚本进行管理。

  • 支持多种算法:支持多种论调算法,可根据业务场景灵活调配进行使用
    支持多种工作模型:可根据业务场景,使用不同的工作模式来解决生产环境请求处理问题。

  • 应用范围广:因为LVS工作在4层,所以它几乎可以对所有应用做负载均衡,包括http、数据库、DNS、ftp服务等等

2. LVS工作原理

技术分享图片

iptabls工作原理

LVS工作原理:

  1. 当客户端的请求到达负载均衡器的内核空间时,首先会到达PREROUTING链。
  2. 当内核发现请求数据包的目的地址是本机时,将数据包送往INPUT链。
  3. LVS由用户空间的ipvsadm和内核空间的IPVS组成,ipvsadm用来定义规则,IPVS利用ipvsadm定义的规则工作,IPVS工作在INPUT链上,当数据包到达INPUT链时,首先会被IPVS检查,如果数据包里面的目的地址及端口没有在规则里面,那么这条数据包将经过INPUT链送至用户空间,交给用户空间的进程来处理。
  4. 如果数据包里面的目的地址及端口在规则里面,那么这条数据报文将被修改目的地址为事先定义好的后端服务器,并送往POSTROUTING链。
  5. 最后经由POSTROUTING链发往后端服务器。

LVS常见术语

LVS中有一些常见的术语,如下表所示:

名称 解释
ipvsadm 用户空间的命令行工具,用于管理集群服务及集群服务上的RS等;
IPVS 工作于内核上的netfilter INPUT HOOK之上的程序,可根据用户定义的集群实现请求转发;
VS Virtual Server ,Director Server(DS),Dispatcher(调度器),Load Balancer
Director, Balancer 负载均衡器、分发器
RS Real Server(lvs),upstream server(nginx), backend server(haproxy)
CIP Client IP,客户端IP
VIP Director Virtual IP,负载均衡器虚拟IP , VS的外网IP
DIP Director IP,负载均衡器IP
RIP Real Server IP,后端请求处理服务器IP

3. LVS 工作模式和相关命令

3.1 LVS集群工作模式

? lvs-nat : 修改请求报文的目标IP,多目标的DNAT

? lvs-dir : 操纵封装新的MAC地址

? lvs-tun : 在原有请求IP报文之外加一个IP首部

? lvs-fullnat : 修改请求报文的源和目标IP

3.1.1 LVS的NAT模式

技术分享图片

lvs-nat : 本质是多目标IP的DNAT

  1. client 发送请求 给VIP;

  2. VIP 收到package后,会根据LVS设置的LB算法选择一个合适的RealServer,然后把package 的目的IP 修改为RIP:

  3. RealServer 收到这个package后判断目的ip 是自己,就处理这个package ,处理完后把这个包发送给LVS VIP

  4. LVS 收到这个package 后把源ip改成VIP的IP,dst ip改成 client ip然后发送给client:

NAT 模式的注意事项:

NAT 模式修改的是dst IP,直接走 switch 或pub 不需要修改MAC 所以,不需要VIP 和realserver 同在一个网段内。 NAT 模式 package in 和package out 都需要经过LVS ;因此LVS 的可能会成为一个系统瓶颈问题。

3.1.2 LVS的DR模式

技术分享图片

DR模式原理过程简述:

客户端将请求报文通过VIP发送给DR,DR模式将报文直接路由给目标真实服务器。在DR模式中,调度器根据调度算法选择RS来处理请求,不修改目标IP地址和目标端口,也不封装IP报文,而是将请求报文的数据帧的目标MAC地址改为真实服务器的MAC地址。然后再将修改的数据帧在服务器组的局域网上发送。因为数据帧的MAC地址是真实服务器的MAC地址,并且又在同一个局域网。那么根据局域网的通讯原理,RS是一定能够收到由DR发出的数据包。RS接收到请求数据包的时候,解开IP包头查看到的目标IP是VIP。(此时只有自己的IP符合目标IP才会接收进来,所以我们需要在本地的回环接口上面配置VIP。另:由于网络接口都会进行ARP广播响应,集群的其他机器都有这个VIP的lo接口,都响应就会冲突。所以我们需要把RS的lo接口的ARP响应关闭掉,抑制arp请求。)然后真实服务器做成请求响应,之后根据自己的路由信息将这个响应数据包发送回给客户,并且源IP地址还是VIP。

LVS-DR模式的注意情况:

VS 的VIP 和 RS 必须在同一个网段,不然广播后所有的包都会丢掉: 提前确认LVS/硬件LB 是什么模式,是否需要在同一个网段 所有的RS都必须绑定VIP的IP地址,否则RS收到package后发现dst 不是自己的IP,所有包都会丢掉。 RS处理完包后直接把package 通过dst IP 发送给 client ,不通过LVS/迎接IP 了这样的LVS /VIP 效率会更高一点。【通过把realserver的ip暴漏给外界,不是很安全】

4.LVS相关配置

LVS-DR配置

DR模式是通过director将报文源和目标MAC地址修改,发送给RS,RS将响应报文直接发送给client。

环境说明:

LVS服务器(DR) DIP:192.168.32.125 VIP:192.168.32.250
apache服务器(RS) DIP:192.168.32.130 VIP:192.168.32.250
apache服务器(RS) DIP:192.168.32.135 VIP:192.168.32.250

三台机器分别配置了对应的本地静态地址DIP和RIP,VIP之后配置

LVS服务器配置

  LVS是被编译进内核中,主要分为两部分ipvs和ipvsadm,ipvs是LVS软件核心,是运行在LB上的,这是个基于ip层的负载均衡;ipvsadm是用户空间的集群管理工具。

? 要想起到负载均衡效果,那么所有请求报文必须发往LVS服务器(DS),然后DS根据指定算法分发到后端服务器上,因此DS必须配置VIP地址,VIP是与公网client通信地址,这样DS才能接受到请求报文进行分发。

#安装ipvsadm工具
[root@dr ~]# yum -y install ipvsadm
[root@dr ~]# ip addr add 192.168.32.250/32 dev lo
[root@dr ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 192.168.32.250/32 scope global lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:39:18:a9 brd ff:ff:ff:ff:ff:ff
    inet 192.168.32.125/24 brd 192.168.32.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe39:18a9/64 scope link 
       valid_lft forever preferred_lft forever

RS服务器配置

arp_ignore和arp_announce内核参数

arp_announce : INTEGER

对网络接口上本地IP地址发出的ARP报文作出相应级别的限制。

0:本机所有IP地址都向任何一个接口通告ARP报文。

1:尽量仅向该网卡回应与该网段匹配的ARP报文。

2:只向该网卡回应与该网段匹配的ARP报文。

arp_ignore : INTEGER

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

0:响应任意网卡上接收到的对本机IP地址的arp请求(包括环回网卡上的地址),而不管该目的IP是否在接收网卡上。

1:只响应目的IP地址为接收网卡上的本地地址的arp请求。

2:只响应目的IP地址为接收网卡上的本地地址的arp请求,并且arp请求的源IP必须和接收网卡同网段。

3:如果ARP请求数据包所请求的IP地址对应的本地地址其作用域(scope)为主机(host),则不回应ARP响应数据包,如果作用域为全局(global)或链路(link),则回应ARP响应数据包。

4~7:预留。

8:不回应所有的arp请求。

[root@rs ~]# vim /etc/sysctl.conf
#添加以下两行
net.ipv4.conf.all.arp_ignore = 1
# 将对应网卡设置为只回应目标IP为自身接口地址的ARP请求
net.ipv4.conf.all.arp_announce = 2
# 将ARP请求的源IP设置为eth0上的IP,也就是RIP

[root@rs ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2



##两台RS都要进行以上操作

配置VIP

一定要先设置好内核参数在配置VIP,如果先配置VIP,VIP配置好后会立即通告给所有人,而修改内核参数就是为了不通告

#两台RS都要配置
[root@rs ~]# ip addr add 192.168.32.250/32 dev lo

配置路由信息

在DR和所有RS上都要做

[root@dr ~]# route add -host 192.168.32.250/32 dev lo
[root@rs ~]# route add -host 192.168.32.250/32 dev lo
[root@rs ~]# route add -host 192.168.32.250/32 dev lo

[root@dr ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.32.2    0.0.0.0         UG    100    0        0 eth0
192.168.32.0    0.0.0.0         255.255.255.0   U     100    0        0 eth0
192.168.32.250  0.0.0.0         255.255.255.255 UH    0      0        0 lo

[root@rs ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.32.2    0.0.0.0         UG    100    0        0 ens33
192.168.32.0    0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.32.250  0.0.0.0         255.255.255.255 UH    0      0        0 lo


在DR上添加并保存ipvs规则

在director上添加并保存规则:

ipvsadm -A -t vip:port -s wrr

ipvsadm -a -t vip:port -r rip:port -g -w权重

ipvsadm -S > /etc/sysconfig/ipvsadm

[root@dr ~]# ipvsadm -A -t 192.168.32.250:80 -s wrr
# 添加虚拟服务,指定IP、端口、算法
[root@dr ~]# ipvsadm -a -t 192.168.32.250:80 -r 192.168.32.130:80 -g
[root@dr ~]# ipvsadm -a -t 192.168.32.250:80 -r 192.168.32.135:80 -g

[root@dr ~]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  dr:http wrr
  -> 192.168.32.130:http          Route   1      0          0         
  -> 192.168.32.135:http          Route   1      0          0  
  
[root@dr ~]# ipvsadm -S > /etc/sysconfig/ipvsadm

验证

[root@rs ~]# cat /var/www/html/index.html 
http1
[root@rs ~]# cat /var/www/html/index.html 
http2
#在另一台主机上验证
[root@localhost ~]# for i in $(seq 10);do curl 192.168.32.250:80;done
http1
http2
http1
http2
http1
http2
http1
http2
http1
http2

lvs集群

原文:https://www.cnblogs.com/shipment/p/13365315.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!