===============================为什么使用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都有一块物理网卡连在同一物理网段上,即必须在同一局域网环境。
注意事项:
通过在调度器LB上修改数据包的目的MAC地址实现转发。注意,源IP地址仍然是CIP,目的IP地址仍然是VIP。
请求的报文经过调度器,而RS响应处理后的报文无需经过调度器LB,因此,并发访问量大时使用效率很高,比Nginx代理模式强于此处。
因DR模式是通过MAC地址的改写机制实现转发的,因此,所有RS节点和调度器LB只能在同一个局域网中。
需要注意RS节点的VIP的绑定(lo:vip/32)和ARP抑制问题。
强调下:RS节点的默认网关不需要是调度器LB的DIP,而应该直接是IDC机房分配的上级路由器的IP(这是RS带有外网IP地址的情况),理论上讲,只要RS可以出网即可,不需要必须配置外网IP,但走自己的网关,那网关就成为瓶颈了。
由于DR模式的调度器仅进行了目的MAC地址的改写,因此,调度器LB无法改变请求报文的目的端口。LVS DR模式工作在二层数据链路层(MAC),NAT模式则工作在三层网络层(IP)和四层传输层(端口)。
当前,调度器LB支持几乎所有UNIX、Linux系统,但不支持windows系统。真实服务器RS节点可以是windows系统。
总之,DR模式效率很高,但是配置也较麻烦。因此,访问量不是特别大的公司可以用haproxy/Nginx取代之。这符合运维的原则:简单、易用、高效。日1000-2000W PV或并发请求1万以下都可以考虑用haproxy/Nginx(LVS的NAT模式)
直接对外的访问业务,例如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 } }
转载于:https://blog.51cto.com/12083623/2336028