负载均衡(Load Balance)集群提供了一种廉价、有效、透明的方法,来扩展网络设备和服务器的负载、带宽、增长吞吐量、增强网络数据处理能力、提升网络的灵活性和可用性。html
Ø 单台计算机没法承受大规模的并发访问或数据流量了,此时须要搭建负载均衡集群把流量分摊到多台节点设备上分别处理,即减小用户等待响应的时间又提高了用户体验;前端
Ø 7*24小时的服务保证,任意一个或多个有限后端节点设备宕机,不能影响整个业务的运行。linux
Nginx反向代理优势web
l 工做在网络模型的7层,能够针对http应用作一些分流的策略,好比针对域名、目录结构,Nginx单凭这点可利用的场合就远多于LVS了。算法
l 最新版本的Nginx也支持4层TCP负载,曾经这是LVS比Nginx好的地方。vim
l Nginx对网络稳定性的依赖很是小,理论上能ping通就就能进行负载功能,这个也是它的优点之一,相反LVS对网络稳定性依赖比较大。windows
l Nginx安装和配置比较简单,测试起来比较方便,它基本能把错误用日志打印出来。LVS的配置、测试就要花比较长的时间了,LVS对网络依赖比较大。后端
那为何要用lvs呢?浏览器
ü 简单一句话,当并发超过了Nginx上限,就可使用LVS了。缓存
ü 日1000-2000W PV或并发请求1万如下均可以考虑用Nginx。
ü 大型门户网站,电商网站须要用到LVS。
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统,能够在UNIX/LINUX平台下实现负载均衡集群功能。该项目在1998年5月由章文嵩博士组织成立,是中国国内最先出现的自由软件项目之一。
LVS官网:http://www.linuxvirtualserver.org/index.html
相关中文资料:
LVS项目介绍 http://www.linuxvirtualserver.org/zh/lvs1.html
LVS集群的体系结构 http://www.linuxvirtualserver.org/zh/lvs2.html
LVS集群中的IP负载均衡技术 http://www.linuxvirtualserver.org/zh/lvs3.html
LVS集群的负载调度 http://www.linuxvirtualserver.org/zh/lvs4.html
早在2.2内核时, IPVS就已经之内核补丁的形式出现。
从2.4.23版本开始,IPVS软件就合并到Linux内核的经常使用版本的内核补丁的集合。
从2.4.24之后IPVS已经成为Linux官方标准内核的一部分。
Ø LVS无需安装
Ø 安装的是管理工具,第一种叫ipvsadm,第二种叫keepalive
Ø ipvsadm是经过命令行管理,而keepalive读取配置文件管理
Ø 后面咱们会用Shell脚本实现keepalive的功能
主机名 |
IP地址 |
软件 |
系统版本 |
lb03 |
10.0.0.15 |
lvs keepalived |
CentOS Linux release 7.2.1511 |
lb04 |
10.0.0.16 |
lvs keepalived |
CentOS Linux release 7.2.1511 |
web03 |
10.0.0.18 |
tomcat |
CentOS Linux release 7.2.1511 |
web04 |
10.0.0.17 |
tomcat |
CentOS Linux release 7.2.1511 |
主机说明 [root@lb03 ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) [root@lb03 ~]# uname -r 3.10.0-327.el7.x86_64 [root@lb03 ~]# getenforce Disabled [root@lb03 ~]# systemctl status firewalld.service ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) Active: inactive (dead) |
web环境说明
# 查看系统的LVS模块 lsmod|grep ip_vs
# 默认没有加载模块,须要安装管理工具才会激活 yum -y install ipvsadm
# 查看当前LVS状态,顺便激活LVS内核模块 ipvsadm
# 激活后查看系统的LVS模块 [root@lb03 ~]# ipvsadm IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn [root@lb03 ~]# lsmod|grep ip_vs ip_vs 140944 0 nf_conntrack 105745 1 ip_vs libcrc32c 12644 2 xfs,ip_vs |
步骤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
参数说明: -A 添加虚拟服务 -t 添加tcp 的IP地址 -s 指定轮询算法 rr 轮询 wrr 加权轮询 -p 指定超时时间 -a 关联真实服务器 -r 接真实服务器地址 -g 使用直接路由模式,这也是默认值 LVS有4种工做状态 -w 权重 -l 查看结果 -n 不反向解析ip为域名 ipvsadm参数说明:(更多参照 man ipvsadm)
检查结果: [root@lb03 ~]# ipvsadm -ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.0.0.13:80 wrr persistent 20 -> 10.0.0.17:80 Route 1 0 0 -> 10.0.0.18:80 Route 1 0 0 |
参数 (短格式) |
参数 (长格式) |
参数说明 |
-A |
--add-service |
在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增长一台新的虚拟服务器。 |
-E |
--edit-service |
编辑内核虚拟服务器表中的一条虚拟服务器记录。 |
-D |
--delete-service |
删除内核虚拟服务器表中的一条虚拟服务器记录。 |
-C |
--clear |
清除内核虚拟服务器表中的全部记录。 |
-R |
--restore |
恢复虚拟服务器规则 |
-S |
--save |
保存虚拟服务器规则,输出为-R 选项可读的格式 |
-a |
--add-server |
在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录。也就是在一个虚拟服务器中增长一台新的真实服务器 |
-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 |
显示帮助信息 |
-t |
--tcp-service service-address [vip:port] or [real-server-ip:port] |
说明虚拟服务器提供的是tcp 的服务 |
-u |
--udp-service service-address [vip:port] or [real-server-ip:port] |
说明虚拟服务器提供的是udp 的服务 |
-f |
--fwmark-servicefwmark |
说明是通过iptables 标记过的服务类型。 |
-s |
--scheduler scheduler |
使用的调度算法,有这样几个选项 rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq 默认的调度算法是: wlc |
-p |
--persistent [timeout] |
持久稳固的服务。这个选项的意思是来自同一个客户的屡次请求,将被同一台真实的服务器处理。timeout 的默认值为300秒。 |
-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 |
对虚拟服务器和真实服务器排序输出 |
- |
--numeric -n |
输出IP 地址和端口的数字形式 |
步骤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 |
至此LVS集群配置完毕——进行验证
疑问解答:
问题1:浏览器访问没有发现轮询效果
答:LVS的轮询不像Nginx明显,可使用多个客户端访问(Windows和Linux)
问题2:使用抓包工具,发现进行通讯的是Windows的IP和lb03的80端口,可是lb03明明没有80端口?
答:windows抓包查看,能够发现数据包的源MAC地址是web03或web04,说明真正响应客户端请求的是web03或web04。
Linux:tcpdump -nn port 80; tcpdump -nn -e port 80
arp解析查看: [root@lb04 ~]# arp -n Address HWtype HWaddress Flags Mask Iface 10.0.0.1 ether 00:50:56:c0:00:08 C eth0 10.0.0.17 ether 00:50:56:26:50:8a C eth0 10.0.0.18 ether 00:50:56:23:12:f3 C eth0 10.0.0.254 ether 00:50:56:e4:7f:10 C eth0
[f:\~]$ arp -a 接口: 10.0.0.1 --- 0x13 Internet 地址 物理地址 类型 10.0.0.13 00-50-56-32-cc-5b 动态 10.0.0.15 00-50-56-2b-cd-ba 动态 10.0.0.16 00-50-56-32-cc-5b 动态 10.0.0.17 00-50-56-26-50-8a 动态 10.0.0.18 00-50-56-23-12-f3 动态 |
术语说明:
DS:Director Server。指的是前端负载均衡器节点。
RS:Real Server。后端真实的工做服务器。
VIP:向外部直接面向用户请求,做为用户请求的目标的IP地址。
DIP:Director Server IP,主要用于和内部主机通信的IP地址。
RIP:Real Server IP,后端服务器的IP地址。
CIP:Client IP,访问客户端的IP地址。
DR模式是经过改写请求报文的目标MAC地址,将请求发给真实服务器的,而真实服务器将响应后的处理结果直接返回给客户端用户。
DR技术可极大地提升集群系统的伸缩性。但要求调度器LB与真实服务器RS都有一块物理网卡连在同一物理网段上,即必须在同一局域网环境。
DR直接路由模式说明:
Ø 经过在调度器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地址。
DR的实现原理和数据包的改变
DR原理:
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. 响应报文最终送达至客户端
答:既然要让RS可以处理目标地址为vip的IP包,首先必需要让RS能接收到这个包。
在lo上配置vip可以完成接收包并将结果返回client。
答:不能够,将VIP设置在eth0网卡上,会影响RS的arp请求,形成总体LVS集群arp缓存表紊乱,以致于整个负载均衡集群都不能正常工做。
先回顾ARP知识及了解arp_announce和arp_ignore做用。
arp协议说明
ARP协议,全称"Address Resolution Protocol",中文名是地址解析协议,使用ARP协议可实现经过IP地址得到对应主机的物理地址(MAC地址)。
ARP协议要求通讯的主机双方必须在同一个物理网段(即局域网环境)!
为了提升IP转换MAC的效率,系统会将解析结果保存下来,这个结果叫作ARP缓存。 Windows查看ARP缓存命令 arp -a Linux查看ARP缓存命令 arp -n(CentOS7须要安装net-tools) Linux解析IP对应的MAC地址 arping -c 1 -I eth0 10.0.0.17 |
ARP缓存表是把双刃剑
(1) 主机有了arp缓存表,能够加快ARP的解析速度,减小局域网内广播风暴。由于arp是发广播解析的,频繁的解析也是消耗带宽的,尤为是机器多的时候。
(2) 正是有了arp缓存表,给恶意***带来了***服务器主机的风险,这个就是arp欺骗***。
(3) 切换路由器,负载均衡器等设备时,可能会致使短时网络中断。缘由是全部的客户端ARP缓存表没有更新
服务器切换ARP问题
当集群中一台提供服务的lb01机器宕机后,而后VIP会转移到备机lb02上,可是客户端的ARP缓存表的地址解析仍是宕机的lb01的MAC地址。从而致使,即便在lb02上添加VIP,也会发生客户端没法访问的状况。 解决办法是:当lb01宕机,VIP地址迁移到lb02时,须要经过arping命令通知全部网络内机器更新本地的ARP缓存表,从而使得客户机访问时从新广播获取MAC地址。 这个是本身开发服务器高可用脚本及全部高可用软件必须考虑到的问题。 |
ARP广播进行新的地址解析 arping -I eth0 -c 1 -U VIP arping -I eth0 -c 1 -U 10.0.0.13
测试命令 ip addr del 10.0.0.13/24 dev eth0 ip addr add 10.0.0.13/24 dev eth0 ip addr show eth0 arping -I eth0 -c 1 -U 10.0.0.13 |
arp_announce和arp_ignore详解
配置的内核参数 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 lvs在DR模式下须要关闭arp功能 |
arp_announce
对网络接口上,本地IP地址的发出的,ARP回应,做出相应级别的限制:
肯定不一样程度的限制,宣布对来自本地源IP地址发出Arp请求的接口
数值 |
含义 |
0(默认) |
在任意网络接口(eth0,eth1,lo)上的任何本地地址 |
1 |
尽可能避免不在该网络接口子网段的本地地址作出arp回应. 当发起ARP请求的源IP地址 是被设置应该经由路由达到此网络接口的时候颇有用.此时会检查来访IP是否为全部接口 上的子网段内ip之一.若是改来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理. |
2 |
对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试 选择与能与该地址通讯的本地地址.首要是选择全部的网络接口的子网中外出访问子网中 包含该目标IP地址的本地地址. 若是没有合适的地址被发现,将选择当前的发送网络接口或其余的有可能接受到该ARP回应的网络接口来进行发送. |
arp_ignore
对目标地定义对目标地址为本地IP的ARP询问不一样的应答模式0
数值 |
含义 |
0(默认值) |
回应任何网络接口上对任何本地IP地址的arp查询请求 |
1 |
只回答目标IP地址是来访网络接口本地地址的ARP查询请求 |
2 |
只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内 |
3 |
不回应该网络界面的arp请求,而只对设置的惟一和链接地址作出回应 |
4-7 |
保留未使用 |
8 |
不回应全部(本地地址)的arp查询 |
抑制RS端arp前的广播状况
抑制RS端arp后广播状况
Ø DR(Direct Routing)直接路由模式
Ø NAT(Network Address Translation)
Ø TUN(Tunneling)隧道模式
Ø FULLNAT(Full Network Address Translation)
经过网络地址转换,调度器LB重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器,真实服务器的响应报文处理以后,返回时必需要经过调度器,通过调度器时报文的源地址被重写,再返回给客户,完成整个负载调度过程。
收费站模式---来去都要通过LB负载均衡器。
NAT方式的实现原理和数据包的改变
NAT方式的实现原理和数据包的改变描述 1.当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP 2.PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链 3. IPVS比对数据包请求的服务是否为集群服务,如果,修改数据包的目标IP地址为后端服务器IP,而后将数据包发至POSTROUTING链。 此时报文的源IP为CIP,目标IP为RIP 4.POSTROUTING链经过选路,将数据包发送给Real Server 5. Real Server比对发现目标为本身的IP,开始构建响应报文发回给Director Server。 此时报文的源IP为RIP,目标IP为CIP 6. Director Server在响应客户端前,此时会将源IP地址修改成本身的VIP地址,而后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP
LVS-NAT模型的特性 l RS应该使用私有地址,RS的网关必须指向DIP l DIP和RIP必须在同一个网段内 l 请求和响应报文都须要通过Director Server,高负载场景中,Director Server易成为性能瓶颈 l 支持端口映射 l RS可使用任意操做系统 l 缺陷:对Director Server压力会比较大,请求和响应都需通过director server |
采用NAT技术时,因为请求和响应的报文都必须通过调度器地址重写,当客户请求愈来愈多时,调度器的处理能力将成为瓶颈,为了解决这个问题,调度器把请求的报文经过IP隧道(至关于ipip或ipsec )转发至真实服务器,而真实服务器将响应处理后直接返回给客户端用户,这样调度器就只处理请求的入站报文。因为通常网络服务应答数据比请求报文大不少,采用 VS/TUN技术后,集群系统的最大吞吐量能够提升10倍。
VS/TUN工做流程,它的链接调度和管理与VS/NAT中的同样,只是它的报文转发方法不一样。调度器根据各个服务器的负载状况,链接数多少,动态地选择一台服务器,将原请求的报文封装在另外一个IP报文中,再将封装后的IP报文转发给选出的真实服务器;真实服务器收到报文后,先将收到的报文解封得到原来目标地址为VIP地址的报文, 服务器发现VIP地址被配置在本地的IP隧道设备上(此处要人为配置),因此就处理这个请求,而后根据路由表将响应报文直接返回给客户。
TUN原理和数据包的改变
TUN原理和数据包的改变描述 1.当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP 。 2.PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链 3.IPVS比对数据包请求的服务是否为集群服务,如果,在请求报文的首部再次封装一层IP报文,封装源IP为为DIP,目标IP为RIP。而后发至POSTROUTING链。 此时源IP为DIP,目标IP为RIP 4.POSTROUTING链根据最新封装的IP报文,将数据包发至RS(由于在外层封装多了一层IP首部,因此能够理解为此时经过隧道传输)。 此时源IP为DIP,目标IP为RIP 5. RS接收到报文后发现是本身的IP地址,就将报文接收下来,拆除掉最外层的IP后,会发现里面还有一层IP首部,并且目标是本身的lo接口VIP,那么此时RS开始处理此请求,处理完成以后,经过lo接口送给eth0网卡,而后向外传递。 此时的源IP地址为VIP,目标IP为CIP 6.响应报文最终送达至客户端 LVS-Tun模型特性 l RIP、VIP、DIP全是公网地址 l RS的网关不会也不可能指向DIP l 全部的请求报文经由Director Server,但响应报文必须不能进过Director Server l 不支持端口映射 l RS的系统必须支持隧道 |
LVS的DR和NAT模式要求RS和LVS在同一个vlan中,致使部署成本太高;TUNNEL模式虽然能够跨vlan,但RealServer上须要部署ipip隧道模块等,网络拓扑上须要连通外网,较复杂,不易运维。
为了解决上述问题,开发出FULLNAT,该模式和NAT模式的区别是:数据包进入时,除了作DNAT,还作SNAT(用户ip->内网ip),从而实现LVS-RealServer间能够跨vlan通信,RealServer只须要链接到内网。
类比地铁站多个闸机。
1. 添加VIP
2. 添加LVS配置
3. 高可用(VIP漂移)
4. web服务器健康检查
安装keepalived yum -y install keepalived
检查软件是否安装 [root@lb03 ~]# rpm -qa keepalived keepalived-1.3.5-1.el7.x86_64 |
lb03上keepalied配置文件 vim /etc/keepalived/keepalived.conf global_defs { router_id LVS_03 }
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 } }
virtual_server 10.0.0.13 80 { delay_loop 6 lb_algo wrr lb_kind DR nat_mask 255.255.255.0 persistence_timeout 50 protocol TCP
real_server 10.0.0.17 80 { weight 1 TCP_CHECK { connect_timeout 8 nb_get_retry 3 delay_before_retry 3 connect_port 80 } }
real_server 10.0.0.18 80 { weight 1 TCP_CHECK { connect_timeout 8 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } } |
lb04的Keepalied配置文件 global_defs { router_id LVS_02 }
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 } } virtual_server 10.0.0.13 80 { delay_loop 6 lb_algo wrr lb_kind DR nat_mask 255.255.255.0 persistence_timeout 50 protocol TCP
real_server 10.0.0.17 80 { weight 1 TCP_CHECK { connect_timeout 8 nb_get_retry 3 delay_before_retry 3 connect_port 80 } }
real_server 10.0.0.18 80 { weight 1 TCP_CHECK { connect_timeout 8 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } } |
[root@lb03 ~]# systemctl start keepalived.service
检查lvs状态 [root@lb03 ~]# ipvsadm -ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.0.0.13:80 wrr persistent 50 -> 10.0.0.17:80 Route 1 0 0 -> 10.0.0.18:80 Route 1 0 0
检查虚拟ip [root@lb03 ~]# ip a s eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:de:7c:97 brd ff:ff:ff:ff:ff:ff inet 10.0.0.15/24 brd 10.0.0.255 scope global eth0 valid_lft forever preferred_lft forever inet 10.0.0.13/24 scope global secondary eth0 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fede:7c97/64 scope link valid_lft forever preferred_lft forever |
(在web03/web04同时操做下面步骤) 步骤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
注意:web服务器上的配置为临时生效,能够将其写入rc.local文件,注意文件的执行权限 |
在浏览器测试
u 开发相似keepalived的脚本,早期的办法,如今不推荐使用。
u heartbeat+lvs+ldirectord脚本配置方案,复杂不易控制,不推荐使用
u RedHat工具piranha,一个web界面配置LVS。
u LVS-DR+keepalived方案,老师推荐最优方案,简单、易用、高效。