LVS(Linux Virtual Serve)介绍

一、LVS是什么

1、LVS的英文全称是Linux Virtual Server,即Linux虚拟服务器。

2、它是我们国家的章文嵩博士的一个开源项目。

二、LVS能干什么

1、  LVS主要用于多服务器的负载均衡。
2、  它工作在网络层,可以实现高性能,高可用的服务器集群技术。
3、  它可把许多低性能的服务器组合在一起形成一个超级服务器。
4、  它配置非常简单,且有多种负载均衡的方法。
5、  它稳定可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果。
6、  可扩展性也非常好。

三、nginx和LVS对比:

1、nginx工作在网络的应用层,主要做反向代理;lvs工作在网络层,主要做负载均衡。nginx
也同样能承受很高负载且稳定,但负载度和稳定度不及lvs。  
2、nginx对网络的依赖较小,lvs就比较依赖于网络环境。
3、在使用上,一般最前端所采取的策略应是lvs。 nginx可作为lvs节点机器使用。

四、负载均衡机制

前面我们说了LVS是工作在网络层。相对于其它负载均衡的解决办法,它的效率是非常高的,LVS通过控制IP来实现负载均衡。IPVS是其具体的实现模块。IPVS的主要作用:安装在Director Server上面,在Director Server虚拟一个对外访问的IP(VIP)。用户访问VIP,到达Director Server,Director Server根据一定的规则选择一个Real Server,处理完成后然后返回给客户端数据。这些步骤产生了一些具体的问题,比如如何选择具体的Real Server,RealServer如果返回给客户端数据等等。IPVS为此有三种机制:

  1. VS/NAT(Virtual Server via Network Address Translation),即网络地址翻转技术实现虚拟服务器。
    当请求来到时,Diretor server上处理的程序将数据报文中的目标地址(即虚拟IP地址)改成具体的某台Real Server,端口也改成Real Server的端口,然后把报文发给Real Server。Real Server处理完数据后,需要返回给Diretor Server,然后Diretor server将数据包中的源地址和源端口改成VIP的地址和端口,最后把数据发送出去。由此可以看出,用户的请求和返回都要经过Diretor Server,如果数据过多,Diretor Server肯定会不堪重负。

[图片上传失败...(image-bc1db1-1574078352885)]

  1. VS/TUN(Virtual Server via IP Tunneling),即IP隧道技术实现虚拟服务器。
    IP隧道(IP tunneling)是将一个IP报文封装在另一个IP报文的技术,这可以使得目标为一个IP地址的数据报文能被封装和转发到另一个IP地址。IP隧道技术亦称为IP封装技术(IP encapsulation)。它跟VS/NAT基本一样,但是Real server是直接返回数据给客户端,不需要经过Diretor server,这大大降低了Diretor server的压力。

  2. VS/DR(Virtual Server via Direct Routing),即用直接路由技术实现虚拟服务器。
    跟前面两种方式,它的报文转发方法有所不同,VS/DR通过改写请求报文的MAC地址,将请求发送到Real Server,而Real Server将响应直接返回给客户,免去了VS/TUN中的IP隧道开销。这种方式是三种负载调度机制中性能最高最好的,但是必须要求Director Server与Real Server都有一块网卡连在同一物理网段上。

[图片上传失败...(image-a54474-1574078352885)]

五、LVS的配置

1、NAT模式的配置

lvs服务器添加两张网卡一张桥接一张NAT:

eth0是桥接 ip 192.168.3.139

eth1是NAT ip 192.168.57.104

另外两台真实服务器ip:

rs1 192.168.57.105

rs2 192.168.57.106

1、lvs服务器,执行以下命令:
echo "1" >/proc/sys/net/ipv4/ip_forward 
ipvsadm -At 192.168.3.139:80 -s rr
ipvsadm -at 192.168.3.139:80 -r 192.168.57.105:80 -m 
ipvsadm -at 192.168.3.139:80 -r 192.168.57.106:80 -m 
一定要执行这个,访问间隔要超过一秒,否则转发相同的真实服务器
ipvsadm -L --timeout
ipvsadm --set 1 120 300

2、两台rs(真实服务器)上可以执行:
route add default gw 192.168.57.104 dev eth0
3、注意请求的机器要在这三台机器之外才行
请求192.168.3.139:80
4、清空负载配置
ipvsadm -C
5、查看负载均衡配置
ipvsadm -Ln
6、如果不行,查看一下/etc/sysctl.conf中的
net.ipv4.ip_forward = 1 
7、sysctl -p可以刷新配置,实在不行,重启

2、TUN模式的配置

三台机器都配置成TUN模式:

lvs服务器:

ip 192.168.57.104

VIP(虚拟ip) 192.168.57.100

rs服务器(真实服务器):

rs1 ip 192.168.57.105

rs2 ip 192.168.57.106

1、lvs服务器
    echo 1 >/proc/sys/net/ipv4/ip_forward
2、两台真实服务器
    配置/etc/sysctl.conf
    net.ipv4.conf.default.rp_filter = 0
3、然后sysctl -p 保险起见可以重启一下
4、包括lvs在内的三台服务器
    ifconfig tunl0 192.168.57.100 broadcast 192.168.57.100 netmask 255.255.255.255 up
    route add -host 192.168.57.100 dev tunl0
5、两台真实服务器
    echo "1" >/proc/sys/net/ipv4/conf/tunl0/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/tunl0/arp_announce
    echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce 
6、lvs服务器
    ipvsadm -C
    ipvsadm -At 192.168.57.100:80 -s rr
    ipvsadm -at 192.168.57.100:80 -r 192.168.57.105:80 -i -w 1
    ipvsadm -at 192.168.57.100:80 -r 192.168.57.106:80 -i -w 1  
7、注意请求的机器要在这三台机器之外才行    
    请求192.168.57.100:80

3、DR模式的配置

三台机器都配置成DR模式
lvs:

ip 192.168.182.131

VIP 192.168.182.202

rs服务器(真实的服务器):

rs1 ip 192.168.182.129

rs2 ip 192.168.182.130

1、lvs服务器:
echo "1" >/proc/sys/net/ipv4/ip_forward(表示允许数据包的转发)

ifconfig eth0:1 192.168.182.202  broadcast 192.168.182.202  netmask 255.255.255.255 up 
route add -host 192.168.182.202 dev eth0:1  
ipvsadm -C
ipvsadm -At 192.168.182.202:80 -s rr
ipvsadm -at 192.168.182.202:80 -r 192.168.182.129:80 -g -w 1
ipvsadm -at 192.168.182.202:80 -r 192.168.182.130:80 -g -w 1

一定要执行这个,访问间隔要超过一秒,否则转发相同的真实服务器
ipvsadm -L --timeout
ipvsadm --set 1 120 300

2、两台真实服务器
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore 
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce 
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore 
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce 
-- 129 130 机器执行
ifconfig lo:0 192.168.182.202  broadcast 192.168.182.202 netmask 255.255.255.255 up
route add -host 192.168.182.202 dev lo:0 

3、注意请求的机器要在这三台机器之外才行
请求192.168.182.202:80

注意:

lvs配置nginx的高可用的时候,把proxy_pass http://test;给注释掉,在nginx.conf

server {
    listen       80;
    server_name  localhost;

    location / {
       #proxy_pass http://test;
        root   html;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

你可能感兴趣的:(LVS(Linux Virtual Serve)介绍)