LVS配置

1、基本信息

LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群结构对客户是透明的,而且无需修改客户端和服务器端的程序。为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。

集群的架构:LVS集群采用三层结构,其主要组成部分为:

       1)负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。

       2)服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。

       3)共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。

调度器:调度器服务器集群系统的唯一入口点(Single Entry Point),它可以采用IP负载均衡技术、基于内容请求分发技术或者两者相结合。在IP负载均衡技术中,需要服务器池拥有相同的内容提供相同的服务。当客户请求到达时,调度器只根据服务器负载情况和设定的调度算法从服务器池中选出一个服务器,将该请求转发到选出的服务器,并记录这个调度;当这个请求的其他报文到达,也会被转发到前面选出的服务器。在基于内容请求分发技术中,服务器可以提供不同的服务,当客户请求到达时,调度器可根据请求的内容选择服务器执行请求。

分布式管理器:当不同服务器上的应用程序同时读写访问分布式文件系统上同一资源时,应用程序的访问冲突需要消解才能使得资源处于一致状态。这需要一个分布式锁管理器(Distributed Lock Manager),它可能是分布式文件系统内部提供的,也可能是外部的。

监视器:Graphic Monitor是为系统管理员提供整个集群系统的监视器,它可以监视系统的状态。Graphic Monitor是基于浏览器的,所以无论管理员在本地还是异地都可以监测系统的状况。为了安全的原因,浏览器要通过HTTPS(Secure HTTP)协议和身份认证后,才能进行系统监测,并进行系统的配置和管理。

组成:LVS 由2部分程序组成,包括 ipvs 和 ipvsadm。

          ipvs(ip virtual server):工作在内核空间,是真正生效实现调度的代码。

          ipvsadm:工作在用户空间,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器(Real Server)

相关术语:

          DS:Director Server, 指的是前端负载均衡器节点。

          RS:Real Server, 后端真实的工作服务器。

          VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址。

          DIP:Director Server IP, 前端负载均衡器IP地址,主要用于和内部主机通信。

          RIP:Real Server IP, 后端服务器的IP地址。

          CIP:Client IP, 访问客户端的IP地址。

2、安装与启动

要使用LVS的负载均衡,只需要安装其管理器ipvsadm即可,对LVS进行相应的配置和操作。

安装包: http://www.linuxvirtualserver.org/software/ipvs.html

安装的软件包(linux内核自带):ipvsadm

       配置文件目录:“/etc/sysconfig/ipvsadm-config”

配置策略管理文件:

       设置ipvsadm重启时保存配置文件。

图 1 设置配置策略

 

开启ipvsadm服务:

      首次开启时可能会产生文件,可以根据相应的文件报错信息进行排错,大多数情况下都是确守文件:/etc/sysconfig/ipvsadm,此时只需要建立即可。

3、ipvsadm参数及使用

3.1 参数简介:

参数作用
-A   --add-service     添加一条新的虚拟服务
-E   --edit-service  编辑虚拟服务
-D   --delete-service删除虚拟服务
-C   --clear  清除所有的虚拟服务规则
-R   --restore恢复虚拟服务规则
-a   --add-server在一个虚拟服务中添加一个新的真实服务器
-e   --edit-server编辑某个真实服务器
-d   --delete-server删除某个真实服务器
L | -l   --list   显示内核中的虚拟服务规则
-n  --numeric以数字形式显示IP端口
-c  --connection 显示ipvs中目前存在的连接,也可以用于分析调度情况
-Z   --zero   将转发消息的统计清零
-g | -m | -i   LVS模式为:DR | NAT | TUN
-p  --persistent配置持久化时间
--set tcp tcpfin udp    配置三个超时时间(tcp/tcpfin/udp)
-t | -uTCP/UDP协议的虚拟服务
-w     配置真实服务器的权重
-s    配置负载均衡算法,如:rr, wrr, lc等
--timeout显示配置的tcp/tcpfin/udp超时时间
--stats显示历史转发消息统计(累加值)
--rate显示转发速率信息(瞬时值)


 3.2 配置策略(参数可查看ipvsadm -h):

[root@localhost html]# ipvsadm -A -t 192.168.1.200:80 -s rr

##-A 添加策略
##-t 指定默认端口(此处的端口对外开放,但是是一个虚拟IP)
##-s 指定调度策略(rr为轮循)

[root@localhost html]# ipvsadm -a -t 192.168.1.200:80 -r 192.168.1.100:80 -g

##-a 添加真实主机地址
##-r 指定真实主机地址
##-g NR地址转化模式
##4中模式:NR(直接路由模式) NAT(网络地址转化模式) TUNNEL(管道模式) FULLNAT(完全地址转化)

【注】轮询(rr)、加权轮询(wrr)、最少连接(lc)和加权最少连接(wlc)

            轮询(rr):将收到的访问请求按照顺序轮流调度到不同的服务器上,不管后端真实服务器的实际连接数和系统负载。

            加权轮询(wrr):给RS设置权重,权重越高,那么分发的请求数越多,权重的取值范围0–100。权值越高的服务器,处理的请求越多。这种算法是对rr算法的一种优化和补充。

            最少连接(lc):根据后端RS的连接数来决定把请求分发给谁,比RS1连接数比RS2连接数少,那么请求就优先发给RS1。

            加权最少连接(wlc):根据后端RS的权重和连接数来决定把请求分发给谁,权重较高,连接数少的RS会优先处理请求。

 3.3 做DR模式配置:

图 2 策略查看

  查看配置,并不做地址解析:

图 3 不做地址解析的查看

添加真实IP入口:

图 4 添加真实ip入口

 轮循访问:

图 5 轮循访问

 这里curl请求时间过长,是因为在数据包返回的过程中,访问的主机时和192.168.1.200进行通信的,不能和内部主机直接通信,此时应该给内部主机也添加192.168.1.200的地址,即可得到正确结果。

图 6 轮循访问

当我们添加完IP时,此时的访问不一定每次都是通过调度器进行访问,有可能会直接对真实主机进行操作,此时则有可能造成泛洪攻击。为解决上述问题,我们采用防火墙的策略进行数据的过滤及调度。

在真实的主机上安装arptables服务,并进行配置。(arptables的语法和iptables相似,只是arptables处理的数据包为arp包)

##添加输入策略,使用户不能直接到达主机
[root@servera ~]# arptables -A INPUT -d 192.168.1.200 -j DROP
##添加输出策略,并指定真实IP
[root@servera ~]# arptables -A OUTPUT -s 192.168.1.200 -j mangle --mangle-ip-s 192.168.1.110
##将策略保存
[root@servera ~]# arptables-save > /etc/sysconfig/arptables

进行如下测试:

标题

【注】在上述实验中,可能出现设置完arptables时,结果依然没有改变,那是因为LVS做的缓存,前面的实验数据对本次实验产生影响。解决办法:清楚LVS部署的缓存:arp -d IP (IP指缓存的调度器地址)。

3.4 做隧道模式配置

添加隧道使用模块:modprobe ipip

添加完成后,会出现类似IP的规则:

图 7  添加ipip

添加ipvsadm规则:

[root@localhost ~]# ipvsadm -A -t 192.168.1.200:80 -s rr
[root@localhost ~]# ipvsadm -a -t 192.168.1.200:80 -r 192.168.1.110:80 -i
[root@localhost ~]# ipvsadm -a -t 192.168.1.200:80 -r 192.168.1.120:80 -i
图 8 配置TUN规则

 在调度器,真实服务器上分别配置网址信息,并在服务器去掉反向攻击测试。

配置网卡信息:

##删除原ens33上的地址
[root@localhost ~]# ip addr del 192.168.1.200/24 dev ens33
##添加指定虚拟地址到管道上
[root@localhost ~]# ip addr add 192.168.1.200/24 dev tunl0
##开启管道连接
[root@localhost ~]# ip link set up tunl0 

配置反向信息查询:

##查看相关策略
sysctl -a | grep rp_filter

##更改指定目录
sysctl -w ****=0

##更新记录
sysctl -p

将初始代理的1都改为0:

图 9初始代理
图 10 更改完成后

 

4、4中模式的工作原理

4.1 DR模式

LVS-DR数据流向:

            1)用户发送请求到Director Server,请求的数据报文(源IP是CIP,目标IP是VIP)到达内核空间。

            2)由于DS和RS在同一个网络中,所以是通过二层数据链路层来传输。

            3)内核空间判断数据包的目标IP是本机IP,此时IPVS比对数据包请求的服务是否为集群服务,若是,重新封装数据包,修改源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址,源IP地址与目标IP地址没有改变,然后将数据包发送给Real Server.

            4)RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文,重新封装报文(源IP地址为VIP,目标IP为CIP),将响应报文通过lo接口传送给eth0网卡然后向外发出。

            5)RS直接将响应报文传送到客户端。

 LVS-DR模型的特点:

            1)RS和DS必须在同一个物理网络中。

            2)RS可以使用私有地址,也可以使用公网地址,如果使用公网地址,可以通过互联网对RIP进行直接访问。

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

            4)RS的网关绝不允许指向DIP(不允许数据包经过director)。

            5)RS上的lo接口配置VIP的IP地址。

注意事项:

            保证前端路由将目标地址为VIP报文统统发给Director Server,而不是RS。

解决方法:修改RS上内核参数(arp_ignore和arp_announce)将RS上的VIP配置在lo接口的别名上,并限制其不能响应对VIP地址解析请求。arp_ignore=1表示系统只响应目的IP为本地IP的ARP请求;arp_announce=2表示系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址。

4.2 NAT模式

数据包流向分析:

            1)用户发送请求到Director Server,请求的数据报文(源IP是CIP,目标IP是VIP)到达内核空间。

            2)内核空间判断数据包的目标IP是本机,此时IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,重新封装数据包(源IP为CIP,目标IP为RIP),然后选路将数据包发送给Real Server。

            3)Real Server比对发现目标IP是本机的IP,重新封装报文(源IP为RIP,目标IP为CIP)发回给Director Server。

            4)Director Server重新封装数据包,将源IP地址修改为自己的VIP地址,然后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP。

LVS-NAT模型的特点:

            1)RS必须使用私有IP地址,网关指向DIP。

            2)DIP与RIP必须在同一网段内。

            3)DS作为所有服务器节点的网关,也就是说请求和响应报文都需要经过Director Server。

            4)支持端口映射

            5)高负载场景中,Director Server压力比较大,易成为性能瓶颈。

4.3 TUN模式

数据包流向:

     1)客户请求数据包,目标地址VIP发送到LB上。

     2)LB接收到客户请求包,进行IP Tunnel封装。即在原有的包头加上IP Tunnel的包头。然后发送出去。

     3)RS节点服务器根据IP Tunnel包头信息(此时就有一种逻辑上的隐形隧道,只有LB和RS之间懂)收到请求包,然后解开IP Tunnel包头信息,得到客户的请求包并进行响应处理。

     4)响应处理完毕之后,RS服务器使用自己的出公网的线路,将这个响应数据包发送给客户端。源IP地址还是VIP地址。

优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量,这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。

缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持”IP Tunneling”(IP Encapsulation)协议,服务器可能只局限在部分Linux系统上。

其他特点:

        1)UNNEL必须在所有的realserver上绑定VIP

        2)realserver直接把包发给client

        3)隧道模式运维起来会比较难,所以一般不用

        4)RIP,DIP,VIP全得是公网地址

【说明】上述功能的使用,都是在内核允许缓存的条件下使用的,查看内核允许的条件:lsmod

              查看本机网路路由路径:arp -an

参考资料:百度百科

                 https://blog.csdn.net/developerof/article/details/90214977

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值