lvs负载均衡的搭建

                         lvs负载均衡的搭建 

                                            作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。
 
 
 
 
在部署环境前,我们需要了解一下一些协议
一.什么是arp
地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。相关协议有RARP代理ARPNDP用于在IPv6中代替地址解析协议。
arp的工作原理:
主机A的IP地址为192.168.1.1,MAC地址为0A-11-22-33-44-01;
主机B的IP地址为192.168.1.2,MAC地址为0A-11-22-33-44-02;
当主机A要与主机B通信时,地址解析协议可以将主机B的IP地址(192.168.1.2)解析成主机B的MAC地址,以下为工作流程:
第1步:根据主机A上的路由表内容,IP确定用于访问主机B的转发IP地址是192.168.1.2。然后A主机在自己的本地ARP缓存中检查主机B的匹配MAC地址。
第2步:如果主机A在ARP缓存中没有找到映射,它将询问192.168.1.2的硬件地址,从而将ARP请求帧广播到本地网络上的所有主机。源主机A的IP地址和MAC地址都包括在ARP请求中。本地网络上的每台主机都接收到ARP请求并且检查是否与自己的IP地址匹配。如果主机发现请求的IP地址与自己的IP地址不匹配,它将丢弃ARP请求。
第3步:主机B确定ARP请求中的IP地址与自己的IP地址匹配,则将主机A的IP地址和MAC地址映射添加到本地ARP缓存中。
第4步:主机B将包含其MAC地址的ARP回复消息直接发送回主机A。
第5步:当主机A收到从主机B发来的ARP回复消息时,会用主机B的IP和MAC地址映射更新ARP缓存。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。主机B的MAC地址一旦确定,主机A就能向主机B发送IP通信了。
那么问题来了,ARP到底属于哪一层?
可以这样做,在OSI模型中ARP协议属于链路层;而在TCP/IP模型中,ARP协议属于网络层。
考试我们要按教材做,接网络层。谈论ARP协议究竟属于第几层一点意义也没有,那完全是对IETF哲学的误解,是强行使用ISO的哲学研究IETF体系的生搬硬套。IETF哲学是很实际和洒脱的,不似ISO那样刻板。
arp广播而进行新的地址解析,具体命令:
[root@yinzhengjie ~]# arping -I eth0 -c 3 -s 172.30.1.137 172.30.1.1
[root@yinzhengjie ~]# arping -U -I eth0 172.30.1.137
[root@yinzhengjie ~]# arp -a
二.集群技术
1.集群的定义
集群,是指一组互相独立的计算机,利用高速网络通信网络组成的一个计算机系统,每个集群节点(即集群中的每台计算机)都是运行其自己进程的一个独立服务器。这些进程可以彼此通信,对网络客户机来说就像形成了一个单一系统,协同起来向用户提供应用程序。系统资源和数据,并以单一系统的模式加以管理。用户客户机请求集群系统时,集群像是一个单一独立的服务器,而实际上集群是一组服务器。
2.集群的特点
1>.提高性能
些计算密集型应用,如:天气预报、核试验模拟等,需要计算机要有很强的运算处理能力,现有的技术,即使普通的大型机器计算也很难胜任。这时,一般都使用计算机集群技术,集中几十台甚至上百台计算机的运算能力来满足要求。提高处理性能一直是集群技术研究的一个重要目标之一。如果请求比较少的话并发仅仅不到1W就没有必要用集群,这样反而响应会变慢。
 

 

2>.降低成本
通常一套较好的集群配置,其软硬件开销要超过100000美元。但与价值上百万美元的专用超级计算机相比已属相当便宜。在达到同样性能的条件下,采用计算机集群比采用同等运算能力的大型计算机具有更高的性价比。
3>.提高可扩展性
用户若想扩展系统能力,不得不购买更高性能的服务器,才能获得额外所需的CPU 和存储器。如果采用集群技术,则只需要将新的服务器加入集群中即可,对于客户来看,服务无论从连续性还是性能上都几乎没有变化,好像系统在不知不觉中完成了升级。
4>.增强可靠性
集群技术使系统在故障发生时仍可以继续工作,将系统停运时间减到最小。集群系统在提高系统的可靠性的同时,也大大减小了故障损失。
3.集群的分类
1>.负载均衡集群(LBC)
负载均衡集群的特点:可用一个简单的例子来类比,咱们的桌子有4条腿。每个腿承担四分之一的力量;该类型集群常应用在web服务器或者数据库的从服务器上
负载均衡集群的作用:(1).分担用户访问请求或者数据流量(负载均衡);
(2).保持业务连续性7*24服务(高可用性);
负载均衡集群典型的开源软件:lvs,nginx,haproxy,lighttpd
负载均衡集群架构图:

 

2>高可用性集群(HAC)
高可用性集群的作用:当一台机器宕机后另外一台机器接管(ip资源和服务资源)。
高可用性集群典型常用开源软件:keepalived,heartbeat
高可用集群架构图:
 

 

3>.科学集群
科学集群是并行计算的基础。通常,科学集群涉及为集群开发的并行应用程序,以解决复杂的科学问题。科学集群对外就好像一个超级计算机,这种超级计算机内部由十至上万个独立处理器组成,并且在公共消息传递层上进行通信以运行并行应用程序。
 
4.常用的集群软硬件
1>.互联网企业常用的开源集群软件有:lvs,haproxy,keepalived,heartbeat
2>.互联网企业常用的商业集群硬件有:F5,Netscaler,Radware,A10等,工作模式都相当于haproxy,nginx的工作模式。
硬件集群产品Netscaler图如下:
 

 

硬件集群产品F5
 

 

一般企业购买就得买2个,高可用嘛,2个中等设备价格大概在50w左右,一般非互联网公司都是购买硬件的,传统互联网公司用的软件比较多,因为节省成本,想淘宝这样的是软件硬件都会用,最后用软件的技术逐渐替换掉硬件~中小型公司也会雇专门的运维人员去维护,用软件搭建服务。LVS项目创始人章文嵩博士,现在已经被淘宝请求了,淘宝也撤掉了Netscaler硬件设备,因为扩展起来特别昂贵~尽管马总那么有钱~
 
5.LVS负载均衡集群介绍
1>搭建负载均衡的需求
A:把单台计算机无法承受的大规模的并发访问或者数据流量分担到多台节点设备上分别处理,减少用户等待响应的时间,提升用户体验;
B:单个重负载的运算分担到多台节点设备上并行处理,每个节点设备处理结束后,将结果汇总,返回给用户,系统处理能力得到大幅度提高;
C:7*24的服务保证,任意一个或者多个有限后面节点设备宕机,要求不能影响业务。
2>LVS(linux virtual server)原理
 

 

从上图我们可以看出,LVS负载均衡技术实际上就是在LINUX内核中实现的(实现调度的工具ipvs),因此,被称之为Linux虚拟服务器(Linux Virtal Server)。我们使用该软件配置LVS的时候,不能直接配置内核中的ipvs,而需要使用Ipvs的管理工具ipvsadm来进行管理,当然,老司机们应该都知道通过keepalived软件可以直接管理ipvs,并不是通过ipvsadm来管理Ipvs的哟。
 
3>LVS工作流程
LVS基本工作过程图1.带颜色的小方块代表不同 的客户端请求:

 

LVS2基本工程图2:不同的客户端请求小方块经过负责均衡器,通过指定的分配策略被分发到后面的机器上
 

 

4>LVS常用术语
A:虚拟IP地址(Virtual Ip Address),简称VIP,VIP为Director用于向客户端计算机提供服务的IP地址。比如:www.yinzhengjie.com郁闷就要解析到VIP上提供服务。
B:真实IP地址(Real Server Ip Address),简称RIP,在集群下面节点上使用的IP地址,也就是真是存在的物理机器哟
C:Director的IP地址(Director Ip Address),简称DIP,Director用于链接内外网络的IP地址,物理网卡上的IP地址,是负载均衡器上的IP
D:客户端主机IP地址(Client Ip Address),简称CIP,客户端用户计算机请求集群服务器的IP地址,该地址用作发送给集群的请求源IP地址。
 
5>常用的LVS模式
1>DR模式-直接路由模式

 

 
如上图所示:VS/DR模式是通过改写请求报文的目的MAC地址,将请求发送给真实的服务器端,而真实服务器响应后的处理结果直接返回给客户端用户。这中模式在企业中是最常用的,因为它的效率最高!相比是NAT的模式的话,RIP会将CIP请求的结果通过DIP原路返回,对DIP服务器造成了相当大的负担。
 
 
让我们来看看DR模式的工作流程吧:
第一步:首先客户端(CIP)会向服务端发送服务请求(通过ARP广播)这样会找到LVS;
第二部:DIP服务器(LVS服务器)接到广播包后,做了一个操作,就是把MAC地址做了修改,直接指向了后端的RIP(提供服务的真实服务器);
第三部:RIP接收到客户端发来的包,发现自己本机的回环地址上有VIP,同时MAC也是自己的,就会对这个数据包做回应的请求(这里要注意的是,本地回环地址绑定了VIP并不会让其他的机器知道,因为可以通过修改内核参数,让他禁止与外面通讯(这个过程我们叫做抑制ARP),所以我们没有必要担心会和真实的VIP出现冲突的哟~,换句话说就是提供服务的RIP拥有2个IP一个是在eth0上绑定的,一个是在lo上绑定的)
第四部:RIP修改自己的源IP然后将请求的数据结果返还给CIP.
 
好了,了解了DR模式的工作原理,我们来看看DR模式的注意事项吧:
A:通过在调度器LB上修改数据包的目的MAC地址实现转发。注意,源IP地址仍然是CIP,目的IP地址仍然是VIP;
B:请求的报文经过调度器,而RS响应处理后的报文无需经过调度器LB,因此,并发访问量大时使用效率很高(和NAT模式比);
C:因为DR模式是通过MAC地址的改写机制实现的转发,因此,所有RS(真实服务器【RIP】)节点和调度器KB只能在一个局域网LAN中(小缺点);
D:需要注意RS节点的VIP的绑定(lo:vip,lo1:vip)和ARP抑制问题;
E:强调下:RS节点的默认网关不需要的是调度器LB和DIP,而直接是IDC机房分配的上级路由器的IP(这里是RS带有外网IP地址的情况),理论上讲:只要RS可以 出网即可,不是必须的要配置外网IP。
F:由于DR模式的调度器仅进行了目的MAC地址的改写,因此,调度器LB无法改变请求的报文的目的端口(和NAT要区别)。
G:当前。调度器LB支持几乎所有的UNIX,LINUX系统,但目前不支持WINDOWS系统,真是服务器RS节点可以是WINDWOS系统哟。
H:总的来说DR模式效率很高,但是配置也比较麻烦,因此,访问量不是特别大的公司可以用haproxy/nginx取代之。这符合运维的原则:简单,易用,高效。日2000W PV或并发求情1W以下都可以考虑用 haproxy/nginx(LVS NAT模式)
I:直接对外的访问业务,例如:web服务做RS节点,RS最好用公网IP地址
 
2>NAT模式
让我们看看NAT模式的工作原理吧

 

NAT模式就理解起来就更简单了,让我们一起来总结一下吧:
第一步:CIP发送请求给服务器VIP;
第二部:DIP获得请求之后做了一个操作,它将客户端的包做了一个DNAT,将目的地址改成了后台的服务器的一个真实IP;
第三部:后端服务器通过ARP广播,获取了DIP发来的包,对发来的请求做相应的处理,然后将处理的结果(修改包的源地址和目的地址)发送给DIP;
第四部:DIP获取到包之后,又做了一个操作,他将源地址错了修改,将真是的源地址重新改成VIP地址,然后在发送给CIP。
 
 
了解了NAT的工作原理,我们也一起看看NAT模式的特点吧:
A:NAT技术将请求的报文(DNAT)和响应的报文(SNAT),通过调度器地址重写然后在转发给内部的服务器,报文返回时在改写成原来的用户请求的地址;
B:只需要在调度器LB上配置WAN公网IP地址即可,调度器也要有私有LAN IP和内部RS节点通信;
C:每台内部RS节点的网关地址,必须要配成调度器LB的私有LAN内物理网卡地址(LDIP),这样才能确保数据报文返回时仍然经过调度器LB;
D:由于请求与相应的数据保温都经过调度器LB,因此,访问量大时调度器LB有较大瓶颈,一般要求最多10-20台节点;
E:NAT模式支持对IP及端口的转换,即用户请求172.30.1.2:80,可以通过调度器转换到RS节点的172.30.1.2.:8080(DR和TUN模式不具备的,这个很NGINX反向代理有点相似哟);
F:所有NAT内部RS节点只需要配置私有LAN IP即可;
G:由于数据包发来都需要经过调度器,因此,要开启内核转发net.ipv4.ip.forward = 1,当然也可以包括iptables防火墙的forward功能(DR和TUN模式不需要)。
 
 
3>FULLNAT模式
据说是章文嵩被淘宝挖去之后,就有了这个模式,专门为淘宝设计的,让我们一起看看这个模式是如何工作的吧:
 
从图中也可以看出,其实这个并不难理解:
(注意:实际生产环节中调度器可能不止一个哟,我这里为了图像看起来不是很乱就选择了这个图来介绍,因此我们这里可以把DIR看成一个群组哟,而且这些群组直接信息时可以互相通信的,比如地址转换的情况,都是实时共享的,他们会有一个转换的记录,方便当请求回来的时候再转换回去)
第一步:CIP将VIP请求发送给调度器DIR;
第二步:DIR将源IP和目的IP同时改变了,将源IP变成了DIR群组的任意一个IP(如aIP,),将目的IP改成后台的真是IP(RIP),并广播给了后台的RIP服务器,与此同时,将这个转换记录记录下来告诉这个DIP群组;
第三步:RIP接受到数据包请求后,将数据的结果返回给目的IP(aIP);
第四步:当这个包到达调度器DIR的时候,DIR将源IP和目的IP又变回了VIP和CIP(根据转换之前的对应的表来操作,也就是第二步的记录来操作的哟),这个模式相比NAT要强大的多,所以像淘宝这样的门户网站用的就是这个呢!
 
4>tunnel模式
开门见山,让我们了解一下tunnel模式 工作原理图吧:
从上图可知,这个道理就很好理解了:
第一步:CIP将VIP请求发送给调度器DIR;
第二步:调度器DIR将新来的数据包添加一个IP头信息,封装了一层RIP,随后这个包会继续往RIP去;
第三部:到达RIP后,RIP发现是自己包就接受了,开始拆分,发现拆开了RIP包头信息后又有VIP,于是又把VIP和本地回环地址的相对比,发现本地有这个地址,就继续相应这个请求,并将请求的记过返还给CIP,致此,这个过程就完成了。
 
 
下面让我们TUN模式的特色吧:
A.负载均衡器通过把请求的报文通过IP隧道的方式转发至真实的服务器,而真实服务器将响应报文处理后直接返回给客户端用户;(哎哟~厉害了,一局话总结了上面的3个步骤呀~)
B.由于真实服务器将响应处理后的报文直接返回给客户端用户,因此,最好RIP有一个公网地址,这样效率才会更高;(理论上:只要能出网即可,无需外网地址)
C.由于调度器LB只处理入站请求的报文,因此,集群系统的吞吐量可以提高10倍以上,但隧道模式也会带来一定的系统开销,tun模式审核LAN/WAN;
D.TUN模式的LAN环境转发不如DR模式效率高,而且还要考虑系统对IP隧道的支持问题;
E.所有的RIP服务器都要绑定VIP,抑制ARP,配置起来比较复杂;
F.LAN环境一般采用DR模式,WAN环境可以用TUN模式,但是在WAN环境下,请求转发更多的被haproxy/ngin/DNS调度等 代理取代。因此,TUN模式在国内公司实际应用的已经很少。跨机房应用要么拉光纤成局域网,要么DNS调度,底层数据还得同步;
G.直接对外的访问业务。例如:web服务做RS节点,最好用公网地址IP地址,不直接对外的业务,例如:Mysql存储系统RS节点,最好用内部IP地址
 
6.LVS调度算法详解
1>轮询调度[固定调度算法]
Round Robin(简称rr):它将依据不同的RS节点,也就是在RS节点中均摊请求,这种算法简单。但是只适合RS节点处理性能相差不大的情况,因为他均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。
2>加权轮循调度[固定调度算法]
Weighted Round Robin(简称wrr):它根据RS(真实服务器)的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器能处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
3>目的地址哈希调度[固定调度算法]
Destination Hashing(简称DH):以目的地址为关键字查找一个静态hash表来获得需要的RS
4>源地址哈希调度[固定调度算法]
Source Hashing(简称SH):以源地址为关键字查找一个静态hash表来获得需要的RS
5>.加权最小连接数调度[动态调度算法]
Weighted Least Connections(简称WLC):在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询RS(真实服务器)的负载情况,并动态地调整其权值。
6>.最少连接数调度[动态调度算法]
Least Connections(简称LC):调度器通过“最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用“最小连接”调度算法可以较好地均衡负载.
7>.基于地址的最小连接数[动态调度算法]
Locality-Based Least Connections(简称LBLC):它是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它将来自同一个目的地址的请求分配给同一台RS节点,如果这台服务器尚未满负荷,分配给连接数最小的RS,并以它为下一次分配的首先考虑。
8>.基于地址重复最小连接数调度[动态调度算法]
Locality-Based Least Connections with Replication(简称LBLCR):目前主要用于Cache集群系统。对于某一个目的地址,对应有一个RS子集,对此地址请求,为它分配子集中连接数最小RS;如果子集中所有服务器都满负荷,则从集群中选择一个连接数最小服务器,将它加入到次自己分配连接;若一定时间内,未被做任何修改,则将子集中负载最大的从子集删除,以降低复制的程度。
9>.最短的期望的延迟[动态调度算法]
Shortest Expected Delay Scheduling SED(SED):
ABC三台机器分别权重123 ,连接数也分别是123。那么如果使用WLC算法的话一个新请求进入时它可能会分给ABC中的任意一个。使用sed算法后会进行这样一个运算
A(1+1)/1
B(1+2)/2
C(1+3)/3
根据运算结果,把连接交给C 。
10>.最少队列调度[动态调度算法]
Never Queue Scheduling NQ(NQ):无需队列。如果有台 realserver的连接数=0就直接分配过去,不需要在进行sed运算
 
企业上最常用的算法有3种:
[动态调度算法]:wlc
[固定调度算法]:rr,wrr
 
三.部署LVS
1.准备LVS环境.需要三台服务器
LVS服务器[DIP]:200.200.200.102
LAMP服务器[RIP]:200.200.200.103
LAMP服务器[RIP]:200.200.200.104
RIP:200.200.200.103
RIP:200.200.200.104
1.安装准备命令
[root@yinzhengjie ~]# lsmod |grep ip_vs
记住,如果没有kernel-devel的包的需要yum安装一下才能执行下面的
[root@yinzhengjie ~]# yum -y install kernel-devel
[root@yinzhengjie ~]# rpm -qa | grep kernel
[root@yinzhengjie ~]# ln -s /usr/src/kernels/2.6.32-431.el6.x86_64/ /usr/src/linux
检查连接是否成功
[root@yinzhengjie ~]# ll /usr/src/
2.安装LVS
[root@yinzhengjie ~]# wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
[root@yinzhengjie ~]# yum -y install libnl* popt* //安装依赖包
[root@yinzhengjie ~]# tar -xzf ipvsadm-1.26.tar.gz
[root@yinzhengjie ~]# cd ipvsadm-1.26
[root@yinzhengjie ipvsadm-1.26]# make && make install
[root@yinzhengjie ipvsadm-1.26]# ipvsadm
安装后,需要将ipvs加载到内核,执行下面的命令也可以,或者是上面的ipvsadm也好使哟~
3.手动配置LVS[这个模式是在DIR服务器配置的]
[root@yinzhengjie ~]# ifconfig eth0:0 200.200.200.100/24 up // 创建VIP
[root@yinzhengjie ~]# route add -host 200.200.200.100 dev eth0 //添加主机路由
创建之后可以用客户端去ping一下这个地址,检查一下连通性:
[root@yinzhengjie ~]# ipvsadm -C //情况之前的配置
[root@yinzhengjie ~]# ipvsadm --set 30 5 60 //分别设置tcp,tcpfin,udp的超时时间
[root@yinzhengjie ~]# ipvsadm -A -t 200.200.200.100:80 -s rr -p 20 //添加一个虚拟主机,指定算法为rr(轮循算法),指定会话保持时间是20s。
[root@yinzhengjie ~]# ipvsadm -a -t 200.200.200.100:80 -r 200.200.200.103 -g -w 1
//给这个vip添加一个RIP节点(200.200.200.103),"-g"表示为DR模式,"-w"表示加的权重
[root@yinzhengjie ~]# ipvsadm -a -t 200.200.200.100:80 -r 200.200.200.104 -g -w 1
//同上,新增了一个200.200.200.104的节点
查看添加的列表:
删除节点:
删除虚拟IP配置:
重新配置一遍:【我们通过这个启动过程,可以编写一个启动脚本,因为这些配置都是临时生效的,需要写个脚本去让他永久生效】
[root@yinzhengjie ~]# ipvsadm -C
[root@yinzhengjie ~]# ipvsadm --set 30 5 60
[root@yinzhengjie ~]# ipvsadm -A -t 200.200.200.100:80 -s rr -p 20
[root@yinzhengjie ~]# ipvsadm -a -t 200.200.200.100:80 -r 200.200.200.103 -g -w 1
[root@yinzhengjie ~]# ipvsadm -a -t 200.200.200.100:80 -r 200.200.200.104 -g -w 1
[root@yinzhengjie ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 200.200.200.100:80 rr persistent 20
-> 200.200.200.103:80 Route 1 0 0
-> 200.200.200.104:80 Route 1 0 0
[root@yinzhengjie ~]#
 
 
参数说明:
[root@yinzhengjie ~]# ipvsadm --help
ipvsadm v1.26 2008/5/15 (compiled with popt and IPVS v1.2.1)
Usage:
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine]
ipvsadm -D -t|u|f service-address
ipvsadm -C
ipvsadm -R
ipvsadm -S [-n]
ipvsadm -a|e -t|u|f service-address -r server-address [options]
ipvsadm -d -t|u|f service-address -r server-address
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f service-address]
ipvsadm --set tcp tcpfin udp
ipvsadm --start-daemon state [--mcast-interface interface] [--syncid sid]
ipvsadm --stop-daemon state
ipvsadm -h
 
Commands:
Either long or short options are allowed.
--add-service -A add virtual service with options
--edit-service -E edit virtual service with options
--delete-service -D delete virtual service
--clear -C clear the whole table
--restore -R restore rules from stdin
--save -S save rules to stdout
--add-server -a add real server with options
--edit-server -e edit real server with options
--delete-server -d delete real server
--list -L|-l list the table
--zero -Z zero counters in a service or all services
--set tcp tcpfin udp set connection timeout values
--start-daemon start connection sync daemon
--stop-daemon stop connection sync daemon
--help -h display this help message
 
Options:
--tcp-service -t service-address service-address is host[:port]
--udp-service -u service-address service-address is host[:port]
--fwmark-service -f fwmark fwmark is an integer greater than zero
--ipv6 -6 fwmark entry uses IPv6
--scheduler -s scheduler one of rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,
the default scheduler is wlc.
--pe engine alternate persistence engine may be sip,
not set by default.
--persistent -p [timeout] persistent service
--netmask -M netmask persistent granularity mask
--real-server -r server-address server-address is host (and port)
--gatewaying -g gatewaying (direct routing) (default)
--ipip -i ipip encapsulation (tunneling)
--masquerading -m masquerading (NAT)
--weight -w weight capacity of real server
--u-threshold -x uthreshold upper threshold of connections
--l-threshold -y lthreshold lower threshold of connections
--mcast-interface interface multicast interface for connection sync
--syncid sid syncid for connection sync (default=255)
--connection -c output of current IPVS connections
--timeout output of timeout (tcp tcpfin udp)
--daemon output of daemon information
--stats output of statistics information
--rate output of rate information
--exact expand numbers (display exact values)
--thresholds output of thresholds information
--persistent-conn output of persistent connection info
--nosort disable sorting output of service/server entries
--sort does nothing, for backwards compatibility
--ops -o one-packet scheduling
--numeric -n numeric output of addresses and ports
[root@yinzhengjie ~]#
 
你认为是否现在就可以访问了吗?
答案是否定的!~根据DR模式的原理,你需要在客户端的lo接口上配置相应的VIP的哟,并且抑制ARP
如果想验证的可以用专门的Linux抓包工具(tcpdump)分别在RIP抓包,这里我就不演示了
4.配置RIP
200.200.200.103上的配置:
绑定虚拟IP地址:
[root@web001 yinnzhengjie]# ifconfig lo:0 200.200.200.100/32 up
[root@web001 yinnzhengjie]# ifconfig lo:0
lo:0 Link encap:Local Loopback
inet addr:200.200.200.100 Mask:0.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
[root@web001 yinnzhengjie]# route add -host 200.200.200.100 dev lo //添加虚拟网卡路由
[root@web001 yinnzhengjie]#
抑制ARP
[root@web001 yinnzhengjie]#echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
[root@web001 yinnzhengjie]#echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
[root@web001 yinnzhengjie]#echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
[root@web001 yinnzhengjie]#echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
200.200.200.104上的配置:
绑定虚拟IP地址:
抑制ARP相应:
 
[root@web001 yinnzhengjie]#echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
[root@web001 yinnzhengjie]#echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
[root@web001 yinnzhengjie]#echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
[root@web001 yinnzhengjie]#echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
 
 
好了。让我们来做测试吧:
动态查询连接数请求:
[root@yinzhengjie ~]# watch -n 1 ipvsadm -L -n
在网页上输入200.200.200.100得到的结果应该是RIP的服务:
 

 

 
到此,LVS的配置过程就完事了,你成功了没啊~
 
 
好了,以上是关于如何手动配置LVS的整个过程,下面对抑制ARP参数上做一些说明:
有关arp_ignore的相关介绍:
arp_ignore:定义对目标地址为本地IP的ARP询问不同的应答模式0 
0 - (默认值): 回应任何网络接口上对任何本地IP地址的arp查询请求 
1 - 只回答目标IP地址是来访网络接口本地地址的ARP查询请求 
2 -只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内 
3 - 不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应 
4-7 - 保留未使用 
8 -不回应所有(本地地址)的arp查询
有关arp_announce的相关介绍:
arp_announce:对网络接口上,本地IP地址的发出的,ARP回应,作出相应级别的限制: 确定不同程度的限制,宣布对来自本地源IP地址发出Arp请求的接口 
0 - (默认) 在任意网络接口(eth0,eth1,lo)上的任何本地地址 
1 -尽量避免不在该网络接口子网段的本地地址做出arp回应. 当发起ARP请求的源IP地址是被设置应该经由路由达到此网络接口的时候很有用.此时会检查来访IP是否为所有接口上的子网段内ip之一.如果改来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理. 
2 - 对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址.首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址. 如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送.
 
 
看看,就配置这么一个LVS负载均衡的DR模式是不是很简单呢?就是几条命令的事情,但是比较繁琐,在生产环境中,光负载均衡是不够的,比如DIR挂掉了,出现了单点故障,后面RIP的服务即使是好使的,也无济于事啊,所以又得引入一个名称高可用,我们可以在负载均衡的机器上安装高可用的软件
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

 
 
 
 
 
 

 

 

 

 
 
 
 
 

 

 
 
 
 

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

转载于:https://www.cnblogs.com/yinzhengjie/p/6194313.html

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值