一、LVS 概述
1. 概念
LVS(Linux Virtual Server)是一种基于Linux内核实现的高可用性、高性能的负载均衡技术。它可以将来自客户端的请求分发到多台服务器上再将结果汇总给用户,实现多台服务器的负载均衡,减少用户等待时间,提高整个系统的性能和可用性。就算任意/多个设备宕机不会影响业务。
2. LVS技术主要组件
- IPVS(IP Virtual Server):工作于内核中,通过拦截并重定向传入的网络连接,将连接请求分发到后端的真实服务器。IPVS实现了负载均衡算法和网络连接管理,以确保请求在后端服务器之间均衡分发。
- IPVSADM:工作于用户空间,是一个命令行工具,用于管理和配置IPVS。它提供了一组命令,用于添加、修改和删除虚拟服务器、后端服务器和负载均衡规则。通过IPVSADM,管理员可以在用户空间灵活地配置和管理IPVS的各个组件,以定义集群服务和后端真实服务器。
- Keepalived:LVS的高可用组件,用于监控LVS调度器的状态并在发生故障时自动切换到备用调度器,以保证服务的高可用性。
- VS(Virtual Server):虚拟服务器,即负载均衡器或分发器,用于接收客户端的请求并根据一定的策略将请求分发给后端服务器。
- RS(Real Server):后端请求处理服务器,即真实服务器,负责处理来自负载均衡器的请求并返回响应。
- CIP(Client IP):客户端IP地址,即访问集群服务的用户的IP地址。
- VIP(Virtual IP):VS外网的IP,负载均衡器虚拟IP地址,作为用户请求的目标IP地址,对外提供服务。
- DIP(Director IP):VS内网的IP,负载均衡器本身的IP地址,主要用于和内部主机通讯。
- RIP(Real Server IP):后端服务器的IP地址,真实服务器的IP地址。
访问流程:CIP <--> VIP == DIP <--> RIP,具体的在后面的四种工作模式里讲。
二、集群和分布式简介
1.系统性能扩展方式
2.集群Cluster
- LB:LoadBalancing(负载均衡)由多个主机组成,每个主机只承担一部分访问
- HA:High Availiablity(高可用)SPOF(single Point Of failure) MTBF:Mean Time Between Failure 平均无故障时间,正常时间; MTTR:Mean Time To Restoration( repair)平均恢复前时间,故障时间 ; A=MTBF/(MTBF+MTTR) (0,1):99%, 99.5%, 99.9%, 99.99%, 99.999% ; SLA:Service level agreement(服务等级协议)是在一定开销下为保障服务的性能和可用性,服务提供商与用户间定义的一种双方认可的协定。通常这个开销是驱动提供服务质量的主要因素。在常规的领域中,总是设定所谓的三个9,四个9来进行表示,当没有达到这种水平的时候,就会有一系列的惩罚措施,而运维,最主要的目标就是达成这种服务水平;停机时间又分为两种,一种是计划内停机时间,一种是计划外停机时间,而运维则主要关注计划外停机时间。
- HPC:High-performance computing(高性能计算,国家战略资源,不在课程范围内)
3.分布式
- 分布式应用-服务按照功能拆分,使用微服务
- 分布式静态资源--静态资源放在不同的存储集群上
- 分布式数据和存储--使用key-value缓存系统
- 分布式计算--对特殊业务使用分布式计算,比如Hadoop集群
- 集群:同一个业务系统,部署在多台服务器上,集群中,每一台服务器实现的功能没有差别,数据和代码都是一样的;
- 分布式:一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式 中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起来,才是完整的业务;
- 分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率;
对于大型网站,访问用户很多,实现一个群集,在前面部署一个负载均衡服务器,后面几台服务器 完成同一业务。如果有用户进行相应业务访问时,负载均衡器根据后端哪台服务器的负载情况,决 定由给哪一台去完成响应,并且台服务器垮了,其它的服务器可以顶上来。分布式的每一个节点, 都完成不同的业务,如果一个节点垮了,那这个业务可能就会失败;
三、lvs(Linux virtual server)运行原理
1. lvs简介
- VS: Virtual Server,负责调度
- RS:RealServer,负责真正提供服务
2. lvs集群体系结构
3. lvs集群的四种类型
- lvs-nat:网络地址转换
- lvs-dr: 直连路由
- lvs-tun: IP隧道
- lvs-fullnat: 完整nat
3.1 lvs-nat模式
原理:通过修改请求的DIR,通过Director分发客户端请求给服务器,服务器返回也要通过Director返回客户。
①要点
- Ivs-nat: 本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和 PORT实现转发;
- RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP;
- 请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈;
- 支持端口映射,可修改请求报文的目标PORT;
- VS必须是Linux系统,RS可以是任意OS系统;
②nat模式数据逻辑
NAT 模式下,网络数据报的进出都要经过 LVS 的处理。
LVS 需要作为 RS(真实服务器)的网关。当包到达 LVS 时,LVS 做目标地址转换(DNAT),将目标 IP 改为 RS 的 IP。RS 接收到包以后,仿佛是客户端直接发给它的一样。RS 处理完,返回响应时,源 IP 是 RS IP,目标 IP 是客户端的 IP。
这时 RS 的包通过网关(LVS)中转,LVS 会做源地址转换(SNAT),将包的源地址改为 VIP,这样,这个包对客户端看起来就仿佛是 LVS 直接返回给它的。
数据流向:
优点:
1、服务器支持任何TCP/IP操作系统
2、只需一个IP放在调度器RealServer可以用私有IP
3、RealServer使用的是内网IP,安全性高
缺点:
1、扩展性不好。任何请求和应答都要通过调度器。调度器容易成为瓶颈。
2、LVS和RS必须在同一个VLAN下,否则LVS无法作为RS的网关。
3.2 DR模式
- Director和各RS都配置有VIP
- 确保前端路由器将目标IP为VIP的请求报文发往Director
- 在前端网关做静态绑定VIP和Director的MAC地址:在RS上使用arptables工具 ;在RS上修改内核参数以限制arp通告及应答级别
- RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;
- RIP的网关不能指向DIP,以确保响应报文不会经由Director
- RS和Director要在同一个物理网络
- 请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client
- 不支持端口映射(端口不能修败)
②DR模式数据逻辑
1、首先用户用CIP请求VIP。2、根据上图可以看到,不管是lvs还是RS上都需要配置相同的VIP,那么当用户请求到达我们的集群网络的前端路由器的时候,请求数据包的源地址为CIP目标地址为VIP,此时路由器会发广播问谁是VIP,那么我们集群中所有的节点都配置有VIP,此时谁先响应路由器那么路由器就会将用户请求发给谁,这样一来我们的集群系统是不是没有意义了,那我们可以在网关路由器上配置静态路由指定VIP就是lvs,或者使用一种机制不让RS 接收来自网络中的ARP地址解析请求,这样一来用户的请求数据包都会经过lvs。3、当用户请求到达lvs,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP。4、PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链。5、IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIP的MAC地址,将目标6、MAC地址修改RIP的MAC地址,然后将数据包发至POSTROUTING链。 此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址7、由于DS和RS在同一个网络中,所以是通过二层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至RS。8、RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文。处理完成之后,将响应报文通过lo接口传送给eth0网卡然后向外发出。 此时的源IP地址为VIP,目标IP为CIP9、响应报文最终送达至客户端。
数据流向:
优点:
1、同VS/TUN方法一样,提高了LVS集群系统的伸缩性。
缺点:
1、需要在同一个Vlan下,维护不方便
2、要求负载均衡器的网卡必须与物理网卡在一个物理段上
3、安全性低,节点使用共有IP
3.3 TUN模式(了解)
- DIP, VIP, RIP都应该是公网地址;
- RS的网关一般不能指向DIP;
- 请求报文要经由Director,但响应不能经由Director;
- 不支持端口映射;
- RS的OS须支持隧道功能;
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。
数据流向:
优点:
1、调度器只负责分发请求,物理服务器负责把应答直接发给客户。解决了瓶颈问题。提高了可伸缩性。
2、不需要再一个Vlan中,提高了维护的灵活性。
缺点:
1、需要服务器支持IPTinneling协议。
2、节点IP暴漏在公网,安全性不高
3.4 fullnet模式(了解)
改进:
1、Full-NAT相比NAT的主要改进是,在SNAT/DNAT的基础上,加上另一种转换,转换过程如下:在包从DIR转到 RS 的过程中,源地址从客户端IP被替换成了LVS 的内网IP。内网IP之间可以通过多个交换机跨VLAN通信。当RS处理完接受到的包,返回时,会将这个包返回给DIR的内网IP,这一步也不受限于 VLAN。
优点:
1、便于运维。不用局限于一个VLAN里。便于通信。
4. LVS工作模式总结
NAT模式 | TUN模式 | DR模式 | |
RS操作系统 | 不限 | 支持隧道 | 禁用arp |
调度器和服务器网络 | 可跨网络 | 可跨网络 | 不可跨网络 |
调度器数量服务器数量 | 少 | 多 | 多 |
RS服务器网关 | 指向到调度器DIP | 指向到路由 | 指向到路由 |
- lvs-nat与lvs-fullnat:请求和响应报文都经由Director
- lvs-nat:RIP的网关要指向DIP
- lvs-fullnat:RIP和DIP未必在同一IP网络,但要能通信
- lvs-dr与lvs-tun:请求报文要经由Director,但响应报文由RS直接发往Client
- lvs-dr:通过封装新的MAC首部实现,通过MAC网络转发
- lvs-tun:通过在原IP报文外封装新IP头实现转发,支持远距离通信
5. lvs的调度算法
5.1 lvs调度算法类型
- ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态被分为两种:静态方法和动态方法
- 静态方法:仅根据算法本身进行调度,不考虑RS的负载情况
- 动态方法:主要根据每RS当前的负载状态及调度算法进行调度Overhead=value较小的RS将被调度
5.2 lvs静态调度算法
- RR:roundrobin 轮询 RS分别被调度,当RS配置有差别时不推荐
- WRR:Weighted RR,加权轮询根据RS的配置进行加权调度,性能差的RS被调度的次数少
- SH:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定
- DH:Destination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请 求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商
5.3 lvs动态调度算法
- 未过载(未设置IP_VS_DEST_F OVERLOAD标志)
- 真实服务器当前的活动连接数量小于其权重值
- 其权重值不为零
四、lvs部署命令介绍
1.lvs软件相关信息
- 程序包:ipvsadm
- Unit File: ipvsadm.service
- 主程序:/usr/sbin/ipvsadm
- 规则保存工具:/usr/sbin/ipvsadm-save
- 规则重载工具:/usr/sbin/ipvsadm-restore
- 配置文件:/etc/sysconfig/ipvsadm-config
- ipvs调度规则文件:/etc/sysconfig/ipvsadm
2.ipvsadm命令
- 集群服务管理:增、删、改
- 集群服务的RS管理:增、删、改
- 查看
管理集群服务
ipvsadm -A|E -t(tcp)|u(udp)|f(防护墙标签) \
service-address(集群地址) \
[-s scheduler(调度算法)] \
[-p [timeout]] \
[-M netmask] \
[--pepersistence_engine] \
[-b sched-flags]
ipvsadm -D -t|u|f service-address #删除
ipvsadm –C #清空
ipvsadm –R #重载
ipvsadm -S [-n] #保存
管理集群中的real server
ipvsadm -a|e -t|u|f service-address -r server-address [-g | -i| -m](工作模式) [-w
weight](权重)
ipvsadm -d -t|u|f service-address -r server-address #删除RS
ipvsadm -L|l [options] #查看rs
ipvsadm -Z [-t|u|f service-address] #清楚计数器
3. lvs集群中的增删改
3.1 管理集群服务中的增删改
#增加
[root@DR-server ~]# ipvsadm -A -t 172.25.254.100:80 -s rr
[root@DR-server ~]# ipvsadm -A -f 66 -p 3000
#修改
[root@DR-server ~]# ipvsadm -E -t 172.25.254.100:80 -s wrr -p 3000
#删除
[root@DR-server ~]# ipvsadm -D -t 172.25.254.100:80
[root@DR-server ~]# ipvsadm -D -f 66
3.2 管理集群中RealServer的曾增删改
-a #添加realserver
-e #更改realserver
-t #tcp协议
-u #udp协议
-f #火墙 标签
-r #realserver地址
-g #直连路由模式
-i #ipip隧道模式
-m #nat模式
-w #设定权重
-Z #清空计数器
-C #清空lvs策略
-L #查看lvs策略
-n #不做解析
--rate :输出速率信息
#添加
[root@DR-server ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.30 -m
[root@DR-server ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.40 -m -w 2
#更改
[root@DR-server ~]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.30 -m -w 1
[root@DR-server ~]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.30 -i -w 1
#删除
[root@DR-server ~]# ipvsadm -d -t 172.25.254.100:80 -r 192.168.0.30
[root@DR-server ~]# ipvsadm -Ln
[root@DR-server ~]# ipvsadm -Ln --rate
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port CPS InPPS OutPPS InBPS OutBPS
-> RemoteAddress:Port
TCP 172.25.254.100:80 0 0 0 0 0
-> 192.168.0.30:80 0 0 0 0 0
-> 192.168.0.40:80 0 0 0 0 0
[root@DR-server ~]# ipvsadm -C
[root@DR-server ~]# ipvsadm -Z -t 172.25.254.20:80
[root@DR-server ~]# ipvsadm -Ln --rate
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port CPS InPPS OutPPS InBPS OutBPS
-> RemoteAddress:Port
TCP 172.25.254.20:80 0 0 0 0 0
-> 192.168.0.30:80 0 0 0 0 0
-> 192.168.0.40:80 0 0 0 0 0
五、LVS实战案例
1部署NAT模式集群案例
- Director 服务器采用双网卡,一个是nat网卡连接外网,一个是仅主机网卡与后端Web服务器相连
- Web服务器采用仅主机网卡与director相连
- Web服务器网关指向192.168.0.100
- 后端web服务器不需要连接外网
1.1 配置NAT实验环境
主机名
| IP | VIP | 角色 |
lvs |
192.168.0.100(eth0,仅主机)
|
172.25.254.100 (eth1,nat)
| 调度器(VS) |
webserver1 |
192.168.0.101
,
GW 192.168.0.100
| null |
真实服务器(
RS1
)
|
webserver2 |
192.168.0.102
,
GW 192.168.0.100
| null |
真实服务器(
RS2
)
|
client |
172.25.254.100
| 测试机 |
①client上设置nat网卡模式
[root@client ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0
[ipv4]
address1=172.25.254.10/24,172.25.254.100
method=manual
dns=114.114.114.114;
②lvs上设置双网卡仅主机和nat,并且开启内核路由功能
#eth0上nat
[root@lvs ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnetion
[connection]
id=eth0
type=ethernet
interface-name=eth0
[ipv4]
address1=172.254.0.100/24,172.25.254.2
method=manual
#eth1上仅主机
[root@lvs ~]# cat /etc/NetworkManager/system-connections/eth1.nmconnetion
[connection]
id=eth1
type=ethernet
interface-name=eth1
[ipv4]
address1=192.168.0.100/24,192.168.0.2
method=manual
#开启内核路由功能
[root@lvs ~]# sysctl -a | grep ip_forward
[root@lvs ~]# vim /etc/sysctl.conf
加
net.ipv4.ip_forward=1
[root@lvs ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@lvs ~]# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 1
net.ipv4.ip_forward_update_priority = 1
net.ipv4.ip_forward_use_pmtu = 0
③对于RS1(webserver1)的设定网卡为仅主机模式
[root@webserver1 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth1
type=ethernet
interface-name=eth1
[ipv4]
address1=192.168.0.101/24,192.168.0.100
method=manual
[root@webserver1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.100 0.0.0.0 UG 100 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
注意网关为lvs的仅主机IP;
④对于RS2(webserver2)的设定网卡为仅主机模式
[root@webserver2 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth1
type=ethernet
interface-name=eth1
[ipv4]
address1=192.168.0.102/24,192.168.0.100
method=manual
[root@webserver2 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.100 0.0.0.0 UG 100 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
1.2 给lvs安装ipvsadm
[root@lvs ~]# yum install -y ipvsadm
1.3在lvs中添加调度策略
[root@lvs ~]# ipvsadm -A -t 172.25.254.100:80 -s rr
[root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.101:80 -m
[root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.102:80 -m
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.25.254.100:80 rr
-> 192.168.0.101:80 Masq 1 0 0
-> 192.168.0.102:80 Masq 1 0 0
1.4测试
2. 部署DR模式集群案例
主机名 | IP | VIP | 角色 |
client | 172.25.254.10 vmware NAT | null | 测试主机 |
router |
NAT-eth0:172.25.254.100
,
仅主机
- eth1:192.168.0.10
| null | 路由器 |
lvs |
192.168.0.200
,
GW 192.168.0.10
仅主机
|
lo:192.168.0.100/32
| 调度器 |
RS1 | 192.168.0.101
GW 192.168.0.10
仅主机
|
lo:192.168.0.100/32
| web服务器1 |
RS2 | 192.168.0.102,
GW 192.168.0.10
仅主机
|
lo:192.168.0.100/32
| web服务器2 |
2.1配置DR实验环境
[root@client ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
[root@client ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0
[ipv4]
address1=172.25.254.10/24,172.25.254.100
method=manual
dns=114.114.114.114;
[root@client ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.25.254.100 0.0.0.0 UG 100 0 0 eth0
172.25.254.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
[root@client ~]#
②在路由主机中设定双网卡(不够的添加就可以),eth0为nat网卡,eth1为仅主机网卡;
#对于eth0的设定
[root@router ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
[root@router ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0
[ipv4]
address1=172.25.254.100/24,172.25.254.2
method=manual
dns=114.114.114.114;
#对于eth1的设定
[root@router ~]# vim /etc/NetworkManager/system-connections/eth1.nmconnection
[root@router ~]# cat /etc/NetworkManager/system-connections/eth1.nmconnection
[connection]
id=eth1
type=ethernet
interface-name=eth1
[ipv4]
address1=192.168.0.10/24,192.168.0.100
method=manual
③#对于lvs(dr调度器)设定网卡为仅主机模式
[root@lvs ~]# vim /etc/NetworkManager/system-connections/eth1.nmconnetion
[root@lvs ~]# cat /etc/NetworkManager/system-connections/eth1.nmconnetion
[connection]
id=eth1
type=ethernet
interface-name=eth1
[ipv4]
address1=192.168.0.200/24,192.168.0.10
method=manual
[root@lvs ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.10 0.0.0.0 UG 100 0 0 eth1
192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth1
[root@lvs ~]#
④对于RS1(webserver1)的设定网卡为仅主机模式
[root@webserver1 ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
[root@webserver1 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0
[ipv4]
address1=192.168.0.101/24,192.168.0.10
method=manual
dns=114.114.114.114;
[root@webserver1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.10 0.0.0.0 UG 100 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
[root@webserver1 ~]#
⑤对于RS2(webserver2)中的网络设定
同RS1的只需要将IP改为192.168.0.102
2.2 解决vip响应问题配置
[root@lvs ~]# ip a a dev lo 192.168.0.100/32
[root@webserver1 ~]# ip a a dev lo 192.168.0.100/32
[root@webserver2 ~]# ip a a dev lo 192.168.0.100/32
②在RS1和RS2中解决响应问题
#RS1上
[root@webserver1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
#对所有网络接口忽略非本机的ARP请求
[root@webserver1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
#对回环接口(lo)忽略ARP请求。
[root@webserver1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
#对回环接口使用最佳本地地址进行ARP通告
[root@webserver1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
#对所有网络接口使用最佳本地地址进行ARP通告
[root@webserver1 ~]# echo "I am webServer1 192.168.0.101" > /var/www/html/index.html
#将字符串 "I am webServer1 192.168.0.101" 写入(覆盖)到http默认静态发布文件中,方便我们测试观察结果
#RS2上
[root@webserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@webserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@webserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@webserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@webserver1 ~]# echo "I am webServer2 192.168.0.102" > /var/www/html/index.html
#将字符串 "I am webServer2 192.168.0.102" 写入(覆盖)到http默认静态发布文件中,方便我们测试观察结果
3.在lvs中配置策略
[root@lvs ~]# yum install -y ipvsadm #安装ipvsadm工具
[root@lvs ~]# ipvsadm -A -t 192.168.0.100:80 -s wrr
# 创建一个新的虚拟服务,监听在IP地址192.168.0.100的80端口上,
使用WRR(加权轮询)算法进行负载均衡
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.101:80 -g
#向虚拟服务添加一个真实服务器,使用直接路由(DR)模式
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.102:80 -g
[root@lvs ~]# ipvsadm -Ln #列出当前IPVS表中的所有条目,虚拟服务和真实服务器的配置
测试:
六、防火墙标签解决轮询错误
1.轮询规则中可能会遇到的错误
在RS1和RS2中安装mod_ssl并重启apache
]# yum install mod_ssl -y
]# systemctl restart httpd
在lvs中设置调度,因为我们要调度80和443两个端口所以我们需要设定两组策略
]# ipvsadm -C
[root@lvs ~]# ipvsadm -A -t 192.168.0.100:80 -s rr
[root@lvs ~]# ipvsadm -A -t 192.168.0.100:443 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.101:80 -g
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.102:80 -g
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:443 -r 192.168.0.102:80 -g
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:443 -r 192.168.0.101:80 -g
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.100:80 rr
-> 192.168.0.101:80 Route 1 0 0
-> 192.168.0.102:80 Route 1 0 0
TCP 192.168.0.100:443 rr
-> 192.168.0.101:443 Route 1 0 0
-> 192.168.0.102:443 Route 1 0 0
测试问题
[root@node10 ~]# curl http://192.168.0.100;curl -k https://192.168.0.100
RS1 server - 192.168.0.101
RS1 server - 192.168.0.101
当访问vip时两次调度都到了
2.防火墙标记解决轮询调度问题
iptables -t mangle -A PREROUTING -d $vip -p $proto -m multiport --dports
$portl,$port2,..-i MARK --set-mark NUMBER
ipvsadm -A -f NUMBER [options]
在vs调度器中设定端口标签,人为80和443是一个整体
]# iptables -t mangle -A PREROUTING -d 192.168.0.100 -p tcp -m multiport --dports
80,443 -j MARK --set-mark 6666
设定调度规则
[root@lvs ~]# ipvsadm -A -f 6666 -s rr
[root@lvs ~]# ipvsadm -a -f 6666 -r 192.168.0.101 -g
[root@lvs ~]# ipvsadm -a -f 6666 -r 192.168.0.102 -g
[root@node10 ~]# curl -k https://192.168.0.100
RS2 server - 192.168.0.102
[root@node10 ~]# curl -k https://192.168.0.100;curl 192.168.0.100
RS1 server - 192.168.0.101
RS2 server - 192.168.0.102
3.lvs持久链接
ipvsadm -AlE -tlulf service-address [-s scheduler] [-p [timeout]]默认360秒
在lvs调度器中设定
[root@lvs ~]# ipvsadm -E -f 6666 -s rr -p [3000]
[root@lvs ~]# ipvsadm -LnC