===============================为什么使用LVS负载均衡=============================

**nginx反向代理** 用作负载均衡优点:

工作在网络模型的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/zh/  中文官方网站


=====================================准备知识================================

LVS内核模块ip_vs介绍

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


LVS无需安装,安装的是管理工具,第一种叫ipvsadm,第二种叫keepalive。

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

---------------------------------------------


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

10.0.0.1    --》 ARP --》   00:50:56:c0:00:08

ARP协议要求通信的主机双方必须在同一个物理网段(即局域网环境),为了提高IP转换MAC的效率,系统会将解析结果保存下来,这个结果叫做ARP缓存。


Windows查看ARP缓存命令   arp -a

Linux查看ARP缓存命令     arp -n

Linux解析IP对应的MAC地址 arping -c 1 -I eth0 10.0.0.6


ARP缓存表是把双刃剑

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

②正是有了arp缓存表,给恶意***带来了***服务器主机的风险,这个就是arp欺骗***。有同学恶作剧,伪装班主任告诉快递员错误的教室编号。

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

===========================================================================

环境准备

1.准备4台安装好CentOS7.4系统的虚拟机,内存512M。

2.所有虚拟机的防火墙和Selinux关闭

3.主机名及IP地址关系如下:

lb03    10.0.0.15

lb04    10.0.0.16

web03   10.0.0.17  

web04   10.0.0.18

4.web03和web04安装Tomcat或者nginx软件,并满足下面条件用于测试负载均衡器的调度结果:

curl http://10.0.0.17/页面底部得到结果为web03

curl http://10.0.0.18/页面底部得到结果为web04


LVS负载均衡器上的操作

安装ipvsadm管理工具(lb03上操作)

lsmod|grep ip_vs               # 查看系统的LVS模块。

yum -y install ipvsadm      # 默认没有加载模块,需要安装管理工具才会激活。

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


[root@lb01 ~]# lsmod|grep ip_vs

ip_vs                 141092  0 

nf_conntrack          111302  1 ip_vs

libcrc32c              12644  2 xfs,ip_vs

以上属于安装检查该软件是否存在

---------------------------------------------------

配置LVS负载均衡服务 -------》DR模式  -g(只在lb03操作)


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

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

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

步骤4:添加虚拟服务(-A),调度算法见man ipvsadm

步骤5:将虚拟服务关联到真实服务上(-a)

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


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

web服务器(LVS节点)配置

步骤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

=========================DR-直接路由模式 介绍================================

LVS总的有四种模式 :

        DR(Direct Routing)直接路由模式
        NAT(Network Address Translation)
        TUN(Tunneling)隧道模式
        FULLNAT(Full Network Address Translation)

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

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


注意事项:

  1. 通过在调度器LB上修改数据包的目的MAC地址实现转发。注意,源IP地址仍然是CIP,目的IP地址仍然是VIP。

  2. 请求的报文经过调度器,而RS响应处理后的报文无需经过调度器LB,因此,并发访问量大时使用效率很高,比Nginx代理模式强于此处。

  3. 因DR模式是通过MAC地址的改写机制实现转发的,因此,所有RS节点和调度器LB只能在同一个局域网中。

  4. 需要注意RS节点的VIP的绑定(lo:vip/32)和ARP抑制问题。

  5. 强调下:RS节点的默认网关不需要是调度器LB的DIP,而应该直接是IDC机房分配的上级路由器的IP(这是RS带有外网IP地址的情况),理论上讲,只要RS可以出网即可,不需要必须配置外网IP,但走自己的网关,那网关就成为瓶颈了。

  6. 由于DR模式的调度器仅进行了目的MAC地址的改写,因此,调度器LB无法改变请求报文的目的端口。LVS DR模式工作在二层数据链路层(MAC),NAT模式则工作在三层网络层(IP)和四层传输层(端口)。

  7. 当前,调度器LB支持几乎所有UNIX、Linux系统,但不支持windows系统。真实服务器RS节点可以是windows系统。

  8. 总之,DR模式效率很高,但是配置也较麻烦。因此,访问量不是特别大的公司可以用haproxy/Nginx取代之。这符合运维的原则:简单、易用、高效。日1000-2000W PV或并发请求1万以下都可以考虑用haproxy/Nginx(LVS的NAT模式)

  9. 直接对外的访问业务,例如web服务做RS节点,RS最好用公网IP地址。如果不直接对外的业务,例如:MySQL,存储系统RS节点,最好只用内部IP地址。


===========================略去高可用的详细配置和测试过程=====================


步骤1:在lb03和lb04安装Keepalive

yum -y install keepalived


步骤2:配置Keepalive, lb03和lb04的配置文件分成三部分配置

            1.global_defs                全局定义 

            2.vrrp 实例配置              VIP

            3.virtual_server配置      lvs的配置


###########lb03###########

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
     10.0.0.13/24
    }
}

###########lb04###########

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
     10.0.0.13/24
    }
}