LVS(Linux Virtual Server)

开篇介绍:三大主流软件负载均衡器的对比(LVS--Nginx--HAproxy)

一、LVS:由中国的章文嵩博士开发(向章博士致敬),就职于阿里巴巴集团。

   1、抗负载能力强。抗负载能力强、性能高,能达到F5硬件的60%;对内存和cpu资源消耗比较低
   2、工作在网络4层(传输层),通过vrrp协议转发(仅作分发之用),具体的流量由linux内核处理,因此没有流量的产生。
   3、稳定性、可靠性好,自身有完美的热备方案;(如:LVS+Keepalived)
   4、应用范围比较广,可以对所有应用做负载均衡;因为他是通过修改网络数据包中的端口号、IP地址来实现负载均衡的,跟上层应用无直接关系。
   5、不支持正则处理,不能做动静分离。(只有应用层(即七层)的负载均衡才支持正则处理)
   6、支持负载均衡算法:rr(轮循、轮询)、wrr(带权轮循)、lc(最小连接)、wlc(权重最小连接)
   7、配置复杂,对网络依赖比较大,稳定性很高。[这里说的配置复杂是跟nginx的负载均衡来做对比]

LVS是通过修改数据包中的端口号、IP地址、MAC地址来实现负载均衡的。

高可用(HA:High  Availabity):高度可用,通常是指服务器集群中有主(master)、备(backup)关系,当主出现故障,自动会由备(backup)来接管任务。


二、Nginx:

   1、工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名(server_name)、目录结构(用location、rewrite功能来实现);
   2、Nginx对网络的依赖比较小,理论上nginx负载均衡器能ping通后端的真实web服务器就能进行负载功能;
   3、Nginx安装和配置比较简单,测试起来比较方便;
   4、也可以承担高的负载压力且稳定,一般能支撑超过1万次(C10K)的并发;
   5、对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测。
   6、Nginx对请求的异步处理可以帮助节点服务器减轻负载;
   7、Nginx仅能支持http、https和Email协议,这样就在适用范围较小。
   8、不支持Session的直接保持,但能通过ip_hash来解决。
   9、支持负载均衡算法:Round-robin(轮循),Weight-round-robin(带权轮循),Ip-hash(Ip哈希)
   10、Nginx还能做Web服务器即Cache功能。


三、HAproxy:

   1、支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机;
   2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作
   3、支持url检测后端的服务器出问题的检测会有很好的帮助。
   4、更多的负载均衡策略比如:动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source Hash),加权URL哈希和加权参数哈希(Weighted Parameter Hash)已经实现
   5、单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度。
   6、HAProxy可以对Mysql进行负载均衡,对后端的DB节点进行检测和负载均衡。
   7、支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、source(原地址保持)、RI(请求URL)、rdp-cookie(根据cookie)
   8、不能做Web服务器和Cache。

Cookie功能:是由web浏览器提供的功能,主要用来记录用户在网页界面表单输入的用户名、密码等信息,可以让用户在下次访问网站时不用输入用户名和密码。


三大主流软件负载均衡器适用业务场景:
   1、网站建设初期,可以选用Nginx/HAproxy作为反向代理负载均衡(或者流量不大都可以不选用负载均衡),因为其配置简单,性能也能满足一般的业务场景。如果考虑到负载均衡器是有单点问题,可以采用Nginx+Keepalived/HAproxy+Keepalived避免负载均衡器自身的单点问题。
   2、网站并发达到一定程度之后,为了提高稳定性和转发效率,可以使用LVS、毕竟LVS比Nginx/HAproxy要更稳定,转发效率也更高。不过维护LVS对维护人员的要求也会更高,投入成本也更大。

注:Nginx与HAproxy比较:Nginx支持七层,用户量最大,稳定性比较可靠。HAproxy支持四层和七层,支持更多的负载均衡算法,支持session保存等。具体选型看使用场景,目前来说HAproxy由于弥补了一些Nginx的缺点用户量也不断在提升。

衡量一个负载均衡服务器主要考量三个指标:
  1) session rate(会话率)
   此项指标非常重要,它决定了一个Load Balancer (负载均衡器)能不能分发所有接受的请求。这项指标通常是由CPU性能决定。测量指标的大小跟传输的每个对象的大小有关,通常用空对象来测试,Session rates 在 100,000 sessions/s 左右,使用 Xeon E5 在 2014测试。
  2) session concurrency(会话并发)
   该指标与前一指标相关联。这一指标与服务器内存和系统可以处理的文件描述符(FD:file  description)数量有关。 通常每个session占用34KB,即大概3W个session占用1GB内存空间,实际上,socket buffer(套接字缓冲器)也会占用内存空间,2W个session socket占用1GB内存。
  3) data forwarding rate(数据转发率)
   这一指标与 session rate 相对立,它的衡量单位通常是 Megabytes/s (MB/s), 或者 Gigabits/s (Gbps)。传输较大的对象有利于该指标的提升,因为较大的对象传输可以减少session建立和关闭浪费的时间。而测量session rate 则在传输小对象时有利于指标提升。haproxy 在2014年使用 Xeon E5 测试成绩为40 Gbps。


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

进入正题:

一、LVS概述:Linux虚拟服务器;是Linux内核的一部分,因此性能高。

   Linux虚拟服务器(分发器或调度器DS):它不真正提供服务,但它接受客户的访问,为整个集群提供一个唯一的入口。虚拟服务器再和真实服务器通信。

   真实服务器(RS):它真正提供服务,集群中每个Real Server可以是一台物理主机,也可以是虚拟机。

LVS相关术语:

   DS(或DR) :Director Server调度服务器。指的是前端负载均衡器节点。(相当于餐厅服务员)
   RS :Real Server。后端真实的工作服务器。(相当于餐厅的厨师)
   VIP:Virtual  IP虚拟IP,是指向外部直接面向用户请求,作为用户请求的目标的IP地址。(外网IP地址)(相当于餐厅服务员的左手)
   DIP:Director Server IP调度服务器IP,主要用于和内部主机通讯的IP地址。(内网IP地址)(相当于餐厅服务员的右手)
   RIP:Real Server IP,后端服务器的IP地址。
   CIP:Client IP,客户端的IP地址。


注意:LVS调度器需要有两块网卡,一块是对外(WAN口)的网卡,一块是对内(LAN口)的网卡。


形象记忆:客人到餐厅吃饭的点餐流程
食客(Client)--->[网卡1:VIP]服务员(DS/DR)[网卡2:DIP]--->后厨的厨师(RS)


二、LVS三种模式:

   VS/NAT:网络地址转换模式, 进站/出站的数据流量经过分发器。NAT模式是通过修改客户请求数据包中的端口号、IP地址来实现负载均衡。
   VS/DR:直接路由模式,只有进站的数据流量经过分发器(数据链路层负载均衡,因为他修改的是目的mac地址)
   VS/TUN:隧道模式,只有进站的数据流量经过分发器


LVS三种工作模式原理以及优缺点比较:
1、NAT模式(VS-NAT)
  原理:就是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址,并发至此RS来处理,RS处理完成后把数据交给经过负载均衡器,负载均衡器再把数据包的原IP地址改为自己的IP,将目的地址改为客户端IP地址即可。期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器。
  优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址。
  缺点:扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器那,速度就会变慢!

2、直接路由模式(VS-DR)
  原理:负载均衡器和RS都使用同一个IP对外服务。但只有DR对ARP请求进行响应,所有RS对本身这个IP的ARP请求保持静默。也就是说,网关会把对这个服务IP的请求全部定向给DR,而DR收到数据包后根据调度算法,找出对应的RS,把目的MAC地址改为RS的MAC(因为IP一致)并将请求分发给这台RS。这时RS收到这个数据包,处理完成之后,由于IP一致,可以直接将数据返给客户,则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端。由于负载均衡器要对二层包头进行改换,所以负载均衡器和RS之间必须在一个广播域,也可以简单的理解为在同一台交换机上。
  优点:和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。
  缺点:(不能说缺点,只能说是不足)要求负载均衡器的网卡必须与物理网卡在一个物理段上。

3、IP隧道模式(VS-TUN)
  原理:首先要知道,互联网上的大多Internet服务的请求包很短小,而应答包通常很大。那么隧道模式就是,把客户端发来的数据包,封装一个新的IP头标记(仅目的IP)发给RS,RS收到后,先把数据包的头解开,还原数据包,处理后,直接返回给客户端,不需要再经过负载均衡器。注意,由于RS需要对负载均衡器发过来的数据包进行还原,所以说必须支持IPTUNNEL协议。所以,在RS的内核中,必须编译支持IPTUNNEL这个选项
  优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量,这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。
  缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持”IP Tunneling”(IP Encapsulation)协议,服务器可能只局限在部分Linux系统上。

blob.png


三、LVS的软件 ipvsadm :

查ipvsadm由哪个rpm包提供:yum  provides  ipvsadm

查是否安装了ipvsadm :rpm  -q  ipvsadm

安装软件:yum  -y  install  ipvsadm

查看ipvsadm命令使用帮助:ipvsadm  --help 或 ipvsadm  -h

查看ipvsadm命令的使用方法:man  ipvsadm

ipvsadm命令的选项参数解释(红色为常用选项):

   -A --add-service 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器(VIP)。
   -E --edit-service 编辑内核虚拟服务器表中的一条虚拟服务器记录。
   -D --delete-service 删除内核虚拟服务器表中的一条虚拟服务器记录。
   -C --clear 清除内核虚拟服务器表中的所有记录。
   -R --restore 恢复虚拟服务器规则
   -S --save 保存虚拟服务器规则,备份输出为-R 选项可读的格式
   -a --add-server 在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录(RIP)。也就是在一个虚拟服务器中增加一台新的真实服务器
   -e --edit-server 编辑一条虚拟服务器记录中的某条真实服务器记录
   -d --delete-server 删除一条虚拟服务器记录中的某条真实服务器记录
   -L|-l --list 显示内核虚拟服务器表
   -Z --zero 虚拟服务表计数器清零(清空当前的连接数量等)
   --set tcp tcpfin udp 设置连接超时值
   --start-daemon 启动同步守护进程。他后面可以是master 或backup,用来说明LVS Router 是master 或是backup。在这个功能上也可以采用keepalived 的VRRP 功能。
   --stop-daemon 停止同步守护进程
   -h --help 显示帮助信息
   -p --persistent [timeout] 持久稳固的服务(持久性连接)。这个选项的意思是来自同一个客户的多次请求,将被同一台真实的服务器处理。timeout 的默认值为360 秒。
   -t --tcp-service service-address 说明虚拟服务器提供的是tcp 的服务[vip:port] or [real-server-ip:port]
   -f --fwmark-service fwmark 说明是经过iptables 标记过的服务类型。
   -u --udp-service service-address 说明虚拟服务器提供的是udp 的服务[vip:port] or [real-server-ip:port]
   -s --scheduler scheduler 使用的调度算法,有这样几个选项 rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,默认的调度算法是: wlc.
   -M --netmask netmask     persistent granularity mask
   -r --real-server server-address 真实的服务器[Real-Server:port]
   -g --gatewaying 指定LVS 的工作模式为直接路由模式(也是LVS 默认的模式)
   -i --ipip 指定LVS 的工作模式为隧道模式
   -m --masquerading 指定LVS 的工作模式为NAT 模式
   -w --weight weight 真实服务器的权值
   --mcast-interface interface 指定组播的同步接口
   -c --connection 显示LVS 目前的连接 如:ipvsadm -L -c
   --timeout 显示tcp tcpfin udp 的timeout 值 如:ipvsadm -L --timeout
   --daemon 显示同步守护进程状态
   --stats 显示统计信息
   --rate 显示速率信息
   --sort 对虚拟服务器和真实服务器排序输出
   -n --numeric  输出IP地址和端口的数字形式

blob.png

yum -y install ipvsadm &>/dev/null 含义:将安装ipvsadm的过程放到后台去进行即屏幕不显示安装过程,后期在编写shell脚本中会经常使用


小试牛刀:用man ipvsadm查看ipvsadm使用例子,体验ipvsadm的用法。

blob.png

粘贴几行,并使用ipvsadm  -Ln查看定义的集群:

blob.png

ipvsadm  -Sn > /etc/sysconfig/ipvsadm    将ipvsadm  -ln 查出的记录备份到/etc/sysconfig/ipvsadm中

ipvsadm   -C      清空ipvs的记录
ipvsadm   -R < /etc/sysconfig/ipvsadm    恢复ipvsadm  -ln 的记录

blob.png


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

LVS中的三种模式详解(NAT-DR-TUN):

一、LVS-NAT:(DNAT:目标网络地址的转换)

实验环境:以三台centos7.6机器(node11:192.168.11.11/node12:192.168.11.12/node13:192.168.11.13),其中node11充当负载均衡器(DS)、node12和node13充当后端服务器(RS)。vmware中虚拟网络编辑器中子网IP如下;其中的VMnet8是其物理机w7/10的虚拟网卡。

blob.png


实验过程:

blob.png

blob.png

LVS的工作过程原理(必须理解记忆):
   1. 当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至linux的内核(kernel)空间
   2. PREROUTING链(路由前)首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发往INPUT链
   3. IPVS(ip  virtual  service)是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已定义好的集群服务(即LVS上用ipvsadm命令定义的负载均衡列表)进行比对,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发往POSTROUTING链(路由后)
   4. POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路(即路由选择),将数据包最终发送给后端的服务器


以思科路由原理形象比喻LVS-NAT过程:

blob.png



1、准备 Real Server 的Apache服务:用于做LVS负载均衡测试

node12上面做:

安装apache服务:yum -y install httpd

启动apache服务:systemctl start httpd

设置apache开机自启动:systemctl enable httpd

blob.png

加入测试的网页内容:echo www.node12.com > /var/www/html/index.html

进行本机自测:curl 127.0.0.1

blob.png


查看路由表信息:route -n

临时删除默认网关:route del default gw 192.168.11.2

临时设置默认网关:route add default gw 192.168.11.11

再次查看路由表信息:route -n

blob.png


node13上面做:

安装apache服务:yum -y install httpd

启动apache服务:systemctl start httpd

设置apache开机自启动:systemctl enable httpd

加入测试的网页内容:echo www.node13.com > /var/www/html/index.html

进行本机自测:curl 127.0.0.1

blob.png

查看路由表信息:route -n

临时删除默认网关:route del default gw 192.168.11.2

临时设置默认网关:route add default gw 192.168.11.11

再次查看路由表信息:route -n

blob.png


2、LVS负载均衡器配置

node11上面做:

lsof -i:80  确保node11上面的80端口没有被nginx使用,因为要用apache做访问测试;如果nginx服务占用了80端口就用nginx -s quit关闭nginx服务。

给node11新加一块网卡充当VIP,其本身IP192.168.11.11充当DIP

在VMware中node11虚拟机设置中点击添加网络适配器-->确定-->node11开机

blob.png

ip a   发现多了一块名称为ens37的新网卡设备

blob.png

进入网卡配置文件中设置ens37网卡的IP地址等相关信息:

cd /etc/sysconfig/network-scripts    进入目录

ls    显示目录中的文件

cp -av ifcfg-ens33 ifcfg-ens37   复制网卡配置文件模板,便于修改

vim ifcfg-ens37   修成如下内容(标记为需要修改的内容)

blob.png

systemctl restart network   重启网络服务

ip  a    显示结果中的ens37网卡IP是192.168.10.11,说明新网卡设置OK了

blob.png

开启路由转发功能:

cat  /proc/sys/net/ipv4/ip_forward

echo  1 > /proc/sys/net/ipv4/ip_forward

blob.png


注意:设置路由转发开机自启动

vim  /etc/rc.d/rc.local  加入如下一行代码

net.ipv4.ip_forward = 1

设置生效:sysctl  -p


curl  192.168.11.12   必须确保能访问到此服务器的网站

curl  192.168.11.13   必须确保能访问到此服务器的网站

blob.png


删除两块网卡的gateway网关:

route -n

route del default gw 192.168.11.2

route del default gw 192.168.10.2

blob.png

配置LVS负载均衡集群服务器列表:

ipvsadm  -C   清空ipvs集群配置信息

ipvsadm  -A  -t  192.168.10.11:80  -s  rr

ipvsadm  -a  -t  192.168.10.11:80  -r  192.168.11.12:80  -m

ipvsadm  -a  -t  192.168.10.11:80  -r  192.168.11.13:80  -m

ipvsadm  -ln

blob.png


VMware虚拟网络编辑器操作:修改之后要查看node12和nide13上面的网关信息并做相应操作,如果做的是永久的则可忽略

blob.png

blob.png

最后访问测试:在w7/10用cmd查看

curl  192.168.10.11

curl  192.168.10.11

blob.png


附录:LVS-NAT全自动部署脚本

lvs_nat.sh脚本功能解说:以下脚本是将lvs-nat调度器和后端真实服务器的部署写在同一个脚本中,采用case语句进行功能区分,运行脚本时必须根据需要带上start、stop、rs_web、status参数。

vim  lvs_nat.sh   加入如下红色字体内容

#!/bin/bash
VIP=192.168.10.11
DIP=192.168.11.11
RIP1=192.168.11.12
RIP2=192.168.11.13
PORT=80
lvs_nat(){
 rpm -q  ipvsadm && echo  "ipvsadm exsits" ||yum  install  -y  ipvsadm &> /dev/null
 echo  1 > /proc/sys/net/ipv4/ip_forward
 ipvsadm  -C
 ipvsadm -A -t ${VIP}:${PORT} -s wrr
 ipvsadm -a -t ${VIP}:${PORT} -r ${RIP1}:${PORT} -m -w 1
 ipvsadm -a -t ${VIP}:${PORT} -r ${RIP2}:${PORT} -m -w 1
 ipvsadm  -Ln  --stats
}
rs_web(){
 rpm -q httpd && echo "httpd already installd" || yum install -y httpd curl &> /dev/null
 route add default gw $DIP
 systemctl restart httpd
 systemctl enable httpd
 web_ip=$(ifconfig ens33 | awk '/netmask/{print $2}')
 echo $web_ip > /var/www/html/index.html
 curl  $web_ip
}

case $1 in
 start)
   lvs_nat
   ipvsadm --save
 ;;
 stop)
   ipvsadm  -C
   ipvsadm  -Ln
 ;;
 rs_web)
   rs_web
 ;;
 status)
   ipvsadm -ln
 ;;
 *)
   echo "usage : $0 [start|stop|status|rs_web]"
 ;;
esac

测试脚本的运行
chmod -v  +x  lvs_nat.sh
.  lvs_nat.sh

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


二、LVS-DR

1、LVS-DR模式的原理图:

blob.png

   1). 当用户请求到达Director Server时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP
   2). PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
   3). IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改RIP的MAC地址,然后将数据包发至POSTROUTING链。 此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址 
   4). 由于DS和RS在同一个网络中,所以是通过二层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至Real Server。
   5). RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文。处理完成之后,将响应报文通过lo接口传送给eth0网卡然后向外发出。 此时的源IP地址为VIP,目标IP为CIP 
   6). 响应报文最终送达至客户端

2. LVS-DR模型的特性
1). 保证前端路由将目标地址为VIP报文统统发给Director Server,而不是RS
2). RS可以使用私有地址;也可以是公网地址,如果使用公网地址,此时可以通过互联网对RIP进行直接访问
3). RS跟Director Server必须在同一个物理网络中
4). 所有的请求报文经由Director Server,但响应报文必须不能进过Director Server
5). 不支持地址转换,也不支持端口映射,因为DR模型是工作在二层的,二层只处理数据包中的MAC地址
6). RS可以是大多数常见的操作系统
7). RS的网关绝不允许指向DIP(因为我们不允许他经过director)
8). RS上的lo接口配置VIP的IP地址
   
3. 过程及解决方案:
1). 客户端要找vip访问80端口,因为是在同一个网段,所以发arp广播找vip的mac地址通信
2). 因为有RS上也有vip,我们不能直接让RS上的vip回应客户端的广播,所以设置内核参数arp_ignore的内容为1
    将arp_ignore 设置为1,意味着当别人的arp请求过来的时候,如果接收的设备上面没有这个ip,就不做出响应.
    默认是0,只要这台机器上面任何一个设备上面有这个ip,就响应arp请求,并发送mac地址
3). 当DR的vip收到这个广播之后,回应mac地址,然后得到客户端发来的80端口请求,再通过lvs分发到一个RS
4). 那么DR如何分发到一个RS?
    dip发出arp广播询问RS的ip地址所对应的mac地址,然后发出一个目标ip为RS_vip,目标mac为RS_eth0_mac的包到RS
5). RS必须要使用vip把回应包发出去(这样client收到之后一看源地址是vip,他就会相信这是正确的地址发来的包)
6). 那么怎样让RS使用lo的vip而不使用eth0?
    设置arp_announce文件的内容为2, 2的意思是使用本机最好的本地IP地址把回应包发出去
7). 最后怎么算是最好的本地IP地址?
    同一个网段下,使用可变长度子网掩码最长的IP地址被认为是好IP,因为他更精确


实验过程:接着上面的实验做,修改VMware虚拟网络编辑器重新为192.168.11.0

node12上面做:

vim  /etc/sysconfig/network-scripts/ifcfg-ens33  进入注释网关信息

systemctl  restart  network

route  -n    查看路由表是否清除了网关消息

vim  lo.sh    创建lo.sh脚本,并写入下面图片中内容

blob.png

chmod  -v  +x  lo.sh   给脚本加可执行权限

.  lo.sh   运行脚本

blob.png

scp   lo.sh   root@192.168.11.13:/root/   将lo.sh脚本传给node12
ssh   root@192.168.11.13  '.   /root/lo.sh'     远程给192.168.11.13运行lo.sh脚本

blob.png


node13上做:

vim  /etc/sysconfig/network-scripts/ifcfg-ens33  进入注释网关信息

systemctl  restart  network

route  -n    查看路由表是否清除了网关消息


node11上面做:

curl  192.168.11.12   确保在node11上面能访问到信息

curl  192.168.11.13   确保在node11上面能访问到信息

blob.png


ifconfig ens33:1 192.168.11.100/24 up

blob.png

ipvsadm  -C  清除上面所做的ipvs记录

ipvsadm -A -t 192.168.11.100:80 -s wrr

ipvsadm -a -t 192.168.11.100:80 -r 192.168.11.12:80 -g -w 1    -w是指定权重为1

ipvsadm -a -t 192.168.11.100:80 -r 192.168.11.13:80 -g -w 3    -w是指定权重为3

ipvsadm  -ln

blob.png

ipvsadm  -Sn > /etc/sysconfig/ipvsadm   备份ipvs记录


w7/10上面做访问测试:cmd中输入 curl  192.168.11.100

blob.png


注意:RIP为192.168.11.12权重值为1即负载均衡访问一次;RIP为192.168.11.13权重值为3即负载均衡访问三次


附录:LVS-DR部署脚本

###编写lvs_nat.sh脚本

mkdir  -pv  /sh

vi   /sh/lvs_dr.sh

#!/bin/bash

VIP=192.168.10.11

DIP=192.168.11.11

RIP1=192.168.11.12

RIP2=192.168.11.13

PORT=80

lvs_dr(){

  ifconfig ens33:0 $VIP  broadcast $VIP netmask 255.255.255.255 up

  route add -host $VIP dev ens33:0

  rpm -q  ipvsadm && echo  "ipvsadm exsits" ||yum  install  -y  ipvsadm &> /dev/null

  echo  1 > /proc/sys/net/ipv4/ip_forward

  ipvsadm  -C

  ipvsadm -A -t ${VIP}:${PORT} -s wrr

  ipvsadm -a -t ${VIP}:${PORT} -r ${RIP1}:${PORT} -g -w 1

  ipvsadm -a -t ${VIP}:${PORT} -r ${RIP2}:${PORT} -g -w 2

  ipvsadm  -Ln

}

rs_web(){

  ifconfig lo:0 $VIP  netmask 255.255.255.255 up

  route add -host $VIP dev lo:0

  rpm -q httpd && echo "httpd already installd" || yum install -y httpd curl &> /dev/null

  systemctl restart httpd

  systemctl enable httpd

  web_ip=$(ifconfig ens33 | awk '/netmask/{print $2}')

  echo $web_ip > /var/www/html/index.html

  curl  $web_ip

  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

  sysctl  -p

}


case $1 in

  start)

    lvs_dr

    ipvsadm --save

  ;;

  stop)

    ipvsadm  -C

    ipvsadm  -Ln

  ;;

  rs_web)

    rs_web

  ;;

  *)

    echo "usage : $0 [start|stop|rs_web]"

  ;;

esac


###测试脚本的运行

chmod +x /sh/lvs_nat.sh

sh  /sh/lvs_nat.sh