LVS(Linux virual server) Linux 虚拟服务器
HoweWWW 2024-08-23 08:37:01 阅读 82
目录
LVS简介
作用
LVS 的优势与不足
LVS专业术语
集群简介
分布式简介
集群和分布式
lvs集群体系结构
lvs集群的类型
LVS负载均衡四种工作模式
NAT模式
DR模式
TUN模式
fullnet模式
LVS工作模式总结
lvs的调度算法
lvs静态调度算法
lvs动态调度算法
LVS常见调度算法
ipvsadm
命令语法、子命令和选项
实验部分
一、NAT模式
实验准备:
网络配置
实验步骤:
LVS中
1.启用内核路由功能
2.安装ipvsadm
3.添加调度策略
4.查看调度策略
5.保存策略
RS1和RS2中
设置web服务
client客户端测试
二、DR模式
实验准备:
网络配置
实验步骤:
LVS中
1.添加回环IP/VIP
2.安装ipvasdm软件
3.添加调度策略
4.保存策略
ROUTER中
设置内核参数
RS1和RS2中
1.添加lo回环ip/VIP
2.解决响应问题
3.web配置
client客户端测试
三、防火墙标签解决轮询错误
在RS1和RS2中安装mod_ssl并重启apache
在vs调度器中设定端口标签,人为80和443是一个整体
设定调度规则
client客户端测试
LVS简介
LVS 是Linux Virtual Server的简称,也就是 Linux 虚拟服务器,是一个由章文嵩博士发起的自由软件项目,官方站点是www.linuxvirtualserver.org。现在LVS已经是 Linux标准内核的一部分,因此性能较高。
VS: Virtual Server,负责调度 RS:RealServer,负责真正提供服务
作用
通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。
LVS 的优势与不足
优势
高并发连接:LVS基于内核网络层面工作,有超强的承载能力和并发处理能力。单台LVS负载均衡器,可支持上万并发连接。
稳定性强:是工作在网络4层之上仅作分发之用,这个特点也决定了它在负载均衡软件里的性能最强,稳定性最好,对内存和cpu资源消耗极低。
成本低廉:硬件负载均衡器少则十几万,多则几十万上百万,LVS只需一台服务器和就能免费部署使用,性价比极高。
配置简单:LVS配置非常简单,仅需几行命令即可完成配置,也可写成脚本进行管理。
支持多种算法:支持多种论调算法,可根据业务场景灵活调配进行使用
支持多种工作模型:可根据业务场景,使用不同的工作模式来解决生产环境请求处理问题。
应用范围广:因为LVS工作在4层,所以它几乎可以对所有应用做负载均衡,包括http、数据库、DNS、ftp服务等等。
不足
软件本身不支持正则表达式处理,不能做动静分离;而现在许多网站在这方面都有较强的需求,这个是Nginx/HAProxy+Keepalived的优势所在。
如果是网站应用比较庞大的话,LVS/DR+Keepalived实施起来就比较复杂。
LVS专业术语
VS:Virtual Server #虚拟服务
Director, Balancer #负载均衡器、分发器
RS:Real Server #后端请求处理服
CIP: Client IP #用户端IP
VIP:Director Virtual IP #负载均衡器虚拟IP
DIP:Director IP #负载均衡器IP
RIP:Real Server IP #后端请求处理服务器IP
集群简介
系统性能扩展方式
Scale UP:向上扩展,增强向外扩展,增加设备,调度分配问题,Cluster
集群Cluster
Cluster:
集群是为了解决某个特定问题将堕胎计算机组合起来形成的单个系统
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(高性能计算,国家战略资源)
分布式简介
分布式存储
:Ceph
,
GlusterFs
,
FastDFS
,
MogileFs
分布式计算
:hadoop
,
Spark
分布式常见应用:
分布式应用-服务按照功能拆分,使用微服务 分布式静态资源--静态资源放在不同的存储集群上分布式数据和存储--使用key-value缓存系统 分布式计算--对特殊业务使用分布式计算,比如Hadoop集群
集群和分布式
集群:同一个业务系统,部署在多台服务器上,集群中,每一台服务器实现的功能没有差别,数据和代码都是一样的
分布式:一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式
中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起
来,才是完整的业务
分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率
对于大型网站,访问用户很多,实现一个群集,在前面部署一个负载均衡服务器,后面几台服务器完成同一业务。如果有用户进行相应业务访问时,负载均衡器根据后端哪台服务器的负载情况,决定由给哪一台去完成响应,并且台服务器垮了,其它的服务器可以顶上来。分布式的每一个节点,都完成不同的业务,如果一个节点垮了,那这个业务可能就会失败。
lvs集群体系结构
工作原理: VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS
第一层:负载调度器:Load Balancer,它是访问整个群集系统的唯一入口,对外使用所有服务器共有的<code>虚拟 IP 地址,也成为群集 IP 地址。
负载均衡器:是服务器群集系统的单个入口点,可运行 IPVS,该 IPVS 在 Linux 内核或 KTCPVS 内部实现 IP 负载均衡技术,在 Linux 内核中实现应用程序级负载平衡。使用 IPVS 时,要求所有服务器提供相同的服务和内容,负载均衡器根据指定的调度算法和每个服务器的负载将新的客户端请求转发到服务器。无论选择哪个服务器,客户端都应获得相同的结果。使用 KTCPVS 时,服务器可以具有不同的内容,负载均衡器可以根据请求的内容将请求转发到其他服务器。由于 KTCPVS 是在 Linux 内核内部实现的,因此中继数据的开销很小,因此仍可以具有较高的吞吐量。
第二层:服务器池:Server Pool,群集所提供的应用服务,比如:HTTP、FTP服务器池来承担,每个节点具有独立的真实 IP 地址
,只处理调度器分发过来的客户机请求。
服务器群集的节点可根据系统所承受的负载进行分担。当所有服务器过载时,可添加多台服务器来处理不断增加的工作负载。对于大多数 Internet 服务(例如Web),请求通常没有高度关联,并且可以在不同服务器上并行运行。因此,随着服务器群集的节点数增加,整体性能几乎可以线性扩展。
第三层:共享存储:Shared Storage,为服务器池中的所有节点提供稳定、一致的文件存储服务,确保整个群集的统一性,可使用 NAS 设备或提供 NFS (Network File System)网络文件系统共享服务的专用服务器。
共享存储:可以是数据库系统,网络文件系统或分布式文件系统。服务器节点需要动态更新的数据应存储在基于数据的系统中,当服务器节点并行在数据库系统中读写数据时,数据库系统可以保证并发数据访问的一致性。静态数据通常保存在网络文件系统(例如 NFS 和 CIFS)中,以便可以由所有服务器节点共享数据。但是,单个网络文件系统的可伸缩性受到限制,例如,单个 NFS / CIFS 只能支持 4 到 8 个服务器的数据访问。对于大型集群系统,分布式/集群文件系统可以用于共享存储,例如 GPFS,Coda 和 GFS,然后共享存储也可以根据系统需求进行扩展。
lvs集群的类型
lvs-nat: 修改请求报文的目标IP,多目标IP的DNAT
lvs-dr: 操纵封装新的MAC地址
lvs-tun: 在原请求IP报文之外新加一个IP首部
lvs-fullnat: 修改请求报文的源和目标IP
LVS负载均衡四种工作模式
NAT:网络地址转换模式,进站/出站的数据流量经过分发器(IP负载均衡,他修改的是IP地址) --利用三层功能DR:直接路由(Direct routing)模式,只有进站的数据流量经过分发器(数据链路层负载均衡, 因为它修改的是目的mac地址)--利用二层功能mac地址TUN:隧道模式,只有进站的数据流量经过分发器full-nat:双向转换:通过请求报文的源地址为DIP,目标为RIP来实现转发:对于响应报文而言,修改源地址为VIP,目标地址为CIP来实现转发
NAT模式
原理:把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址,并发至此RS来处理,RS处理完成后把数据交给经过负载均衡器,负载均衡器再把数据包的源IP地址改为自己的IP,将目的地址改为客户端IP地址即可。
期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器
nat
模式数据逻辑
1.
客户端发送访问请求,请求数据包中含有请求来源(
cip
),访问目标地址(
VIP)访问目标端口(9000port)
2.VS
服务器接收到访问请求做
DNAT
把请求数据包中的目的地由
VIP
换成
RS
的
RIP
和相应端口
3.RS1
相应请求,发送响应数据包,包中的相应保温为数据来源(
RIP1
)响应目标(
CIP
)相应端口(9000port
)
4.VS
服务器接收到响应数据包,改变包中的数据来源(
RIP1-->VIP
)
,
响应目标端口(
9000-->80
)
5.VS
服务器把修改过报文的响应数据包回传给客户端
6.lvs
的
NAT
模式接收和返回客户端数据包时都要经过
lvs
的调度机,所以
lvs
的调度机容易阻塞
NAT 模式的优缺点:
优点:
支持 Windows 操作系统;支持端口映射,如 RS 服务器 PORT 与 VPORT 不一致的话,LVS 会修改目的 IP 地址和 DPORT 以支持端口映射;
缺点:
RS 服务器需配置网关;双向流量对 LVS 会产生较大的负载压力;
DR模式
原理:负载均衡器和RS都使用同一个IP对外服务。但只有DR对ARP请求进行响应,所有RS对本身这个IP的ARP请求保持静默。也就是说,网关会把对这个服务IP的请求全部定向给DR,而DR收到数据包后根据调度算法,找出对应的RS,把目的MAC地址改为RS的MAC(因为IP一致)并将请求分发给这台RS。这时RS收到这个数据包,处理完成之后,由于IP一致,可以直接将数据返给客户,则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端。
DR模式数据传输过程
1.
客户端发送数据帧给
vs
调度主机帧中内容为客户端
IP+
客户端的
MAC+VIP+VIP
的
MAC
2. VS
调度主机接收到数据帧后把帧中的
VIP
的
MAC
该为
RS1
的
MAC
,此时帧中的数据为客 户端
IP+
客户端的MAC+VIP+RS1
的
MAC
3. RS1
得到
2
中的数据包做出响应回传数据包,数据包中的内容为
VIP+RS1
的
MAC+
客户端
IP+
客户端
IP
的MAC
DR 模式的优缺点:
优点:
响应数据不经过 LVS,性能高;对数据包修改小,信息完整性好;
缺点:
LVS 与 RS 必须在同一个物理网络;RS 上必须配置 lo 和其他内核参数;不支持端口映射;
TUN模式
原理:互联网上的大多Internet服务的请求包很短小,而应答包通常很大。那么隧道模式就是,把客户端发来的数据包,封装一个新的IP头标记(仅目的IP)发给RS,RS收到后,先把数据包的头解开,还原数据包,处理后,直接返回给客户端,不需要再经过负载均衡器。注意,由于RS需要对负载均衡器发过来的数据包进行还原,所以说必须支持IPTUNNEL协议。所以,在RS的内核中,必须编译支持IPTUNNEL这个选项
转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而在原IP报文之外再封装一个IP首部 (源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目标IP 是CIP)
fullnet模式
原理:客户端对VIP发起请求,Director接过请求发现是请求后端服务。Direcrot对请求报文做full-nat,把源ip改为Dip,把目标ip转换为任意后端RS的rip,然后发往后端,rs接到请求后,进行响应,相应源ip为Rip目标ip还是DIP,又内部路由路由到Director,Director接到响应报文,进行full-nat。将源地址为VIP,目标地址改为CIP
LVS工作模式总结
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头实现转发,支持远距离通信
lvs的调度算法
ipvs scheduler
:根据其调度时是否考虑各
RS
当前的负载状态被分为两种:静态方法和动态方法
静态方法:仅根据算法本身进行调度,不考虑
RS
的负载情况
动态方法:主要根据每
RS
当前的负载状态及调度算法进行调度
Overhead=value
较小的
RS
将被调度
lvs静态调度算法
RR:roundrobin 轮询 RS分别被调度,当RS配置有差别时不推荐WRR:Weighted RR,加权轮询根据RS的配置进行加权调度,性能差的RS被调度的次数少 SH:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定 DH:Destination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商
lvs动态调度算法
主要根据
RS
当前的负载状态及调度算法进行调度
Overhead=value
较小的
RS
会被调度
LC:least connections(最少链接发) 适用于长连接应用Overhead(负载值)=activeconns(活动链接数) x 256+inactiveconns(非活动链接数)WLC:Weighted LC(权重最少链接) 默认调度方法Overhead=(activeconns x 256+inactiveconns)/weightSED:Shortest Expection Delay,初始连接高权重优先Overhea(activeconns+1+inactiveconns)x 256/weight 但是,当node1的权重为1,node2的权重为10,经过运算前几次的调度都会被node2承接NQ:Never Queue,第一轮均匀分配,后续SEDLBLC:Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS
LVS常见调度算法
RR(轮询) | 按照顺序依次将请求分配给各服务器,不考虑服务器的实际负载和性能差异 |
WRR(加权轮询) | 为各服务器设置不同的权重,按照权重比例分配请求 |
LC(最少连接) | 将请求分配给当前连接数最少的服务器 |
WLC(加权最少连接) | 结合服务器的权重和当前连接数来分配请求 |
LBLC(基于局部性的最少连接) | 优先选择与请求目标地址在同一网段的服务器,若没有则选择连接数最少的服务器 |
LBLCR(带复制的基于局部性最少连接) | 在 LBLC 的基础上,对目标 IP 地址的请求进行复制,分配到多个服务器上,以提高系统的容错性 |
DH(目标地址散列) | 根据请求的目标 IP 地址进行散列运算,将请求分配到特定的服务器 |
SH(源地址散列) | 基于请求的源 IP 地址进行散列运算,将来自相同源 IP 的请求分配到同一服务器 |
SED(最短预期延迟) | 综合考虑服务器的权重和当前连接数,计算预期延迟,将请求分配到预期延迟最小的服务器 |
NQ(最少队列) | 随机选择当前有空闲的服务器来分配请求 |
ipvsadm
ipvsadm的使用
ipvsadm命令是LVS在应用层的管理命令,我们可以通过这个命令去管理LVS的配置。
ipvsadm是一个工具,同时它也是一条命令,用于管理LVS的策略规则。
命令语法、子命令和选项
语法
<code> ipvsadm -A|E -t|u|f <集群服务地址> [-s <调度算法>] [-p <超时时间>] [-M <掩码>] [-b <标志>]
ipvsadm -D -t|u|f <集群服务地址>
ipvsadm -C
ipvsadm -R
ipvsadm -S [-n]
ipvsadm -a|e -t|u|f <集群服务地址> -r <真实服务器地址> [选项]
ipvsadm -d -t|u|f <集群服务地址> -r <真实服务器地址>
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f <集群服务地址>]
ipvsadm --set <超时时间>
ipvsadm --start-daemon <主或备> [--mcast-interface <组播接口>] [--syncid <SID>]
ipvsadm --stop-daemon <主或备>
ipvsadm -h
子命令
--add-service -A 添加一个集群服务,需要使用选项
--edit-service -E 编辑一个集群服务,需要使用选项
--delete-service -D 删除指定集群服务,需要使用选项
--clear -C 删除所有集群服务,包括真实服务器转发策略规则
--restore -R 从标准输入中恢复策略规则
--save -S 保存策略规则到标准输出
--add-server -a 添加一个真实服务器,需要使用选项
--edit-server -e 编辑一个真实服务器,需要使用选项
--delete-server -d 删除一个真实服务器,需要使用选项
--list -L|-l 查看集群服务列表,包括真实服务器转发策略规则
--zero -Z 计数器清零。清除连接数、包转发等数量统计信息
--set <超时时间> 设置TCP、TCPFIN(TCP关闭连接状态)、UDP连接超时时间,用于
会话保持。一般情况下TCP和UDP超时时间保持默认就好,TCPFIN
可以根据情况设定,指定它则用户请求连接关闭,该连接则会变
为非活跃(InActive)空闲等待状态,在空闲等待时间内,如果
来自同一源IP的请求,则还会转发给后端的同一台真实服务器上
--start-daemon 开启连接同步守护进程。在选项后面指定自己是Master(主)还
是backup(备),主负载调度器会同步所有策略及连接状态到备
负载调度器,当主故障,备可以接替其工作
--stop-daemon 停止连接同步守护进程
--help -h 显示帮助信息
选项
--tcp-service -t <集群服务地址> 允许集群服务使用的传输协议为TCP。<IP:Port>
--udp-service -u <集群服务地址> 允许集群服务使用的传输协议为UDP。<IP:Port>
--fwmark-service -f <防火墙标识> 使用一个整数值来防火墙标识集群服务,而不是地址、
端口和协议使用它,我们可以通过结合IPtables将多
个以调度器为目标的端口定义成一个防火墙标识,由
ipvsdam通过此项关联标识,则可以实现对一个IP多
端口调度,即实现后端服务器可以开放多个服务
--scheduler -s scheduler 指定集群服务使用的调度算法:rr|wrr|lc|wlc|lblc
|lblcr|dh|sh|sed|nq,默认为wlc
--persistent -p <超时时间> 开启持久化服务,开启它则表示在指定时间内,来自同
一IP的请求都会转发到后端同一台真实服务器上
--netmask -M <网络掩码> 使用网络掩码来屏蔽持久化来源IP的地址范围,默认值
为255.255.255.255,即所有来源IP请求都会享受持久
化服务
--real-server -r <真实服务器地址> 指定真实服务器的主机IP与端口
--gatewaying -g 指定真实服务器转发工作模式,使用DR模式,默认
--ipip -i 指定真实服务器转发工作模式,使用TUN模式
--masquerading -m 指定真实服务器转发工作模式,使用NAT模式
--weight -w <权重值> 指定真实服务器的权重值
--u-threshold -x <上阀值> 设置转发请求的最大上连接阀值,范围为0~65535,当
当连接数超过指定上限时,LVS则不会转发请求
--l-threshold -y <下阀值> 设置转发请求的下连接阀值,范围为0~65535,当连接
数降低至指定值时,LVS则继续提供服务,默认值为0
--mcast-interface interface 设置用于连接同步守护进程的组播接口
--syncid sid 设置连接同步守护进程的SID号,用于标识,范围0~255
--connection -c 显示连接信息,一般与"-l"连用
--timeout 显示TCP、TCPFIN、UDP超时时间信息,一般与"-l"连用
--daemon 显示连接同步守护信息,一般与"-l"连用
--stats 显示统计信息,一般与"-l"连用
--rate 显示转发速率信息,一般与"-l"连用
--exact 显示数据包和字节计数器的确切值,扩大字符长度
--thresholds 显示阀值信息,一般与"-l"连用
--persistent-conn 显示持久化连接信息,一般与"-l"连用
--numeric -n 地址和端口以数字格式显示,一般与"-l"连用
--sched-flags -b <标识> 设置调度算法的范围标识,用于SH算法,有两个标识:
sh-fallback,如果真实服务器不可用,则将其转发到
其他真实服务器上。
sh-port,将源地址的端口号也添加到散列键=值中
查看
ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
添加一个集群服务
ipvsadm -A -t 192.168.1.100:80 -s rr
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.1.100:80 rr
修改一个集群服务
ipvsadm -E -t 192.168.1.100:80 -s wrr
删除一个集群服务
ipvsadm -D -t 192.168.1.100:80
ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
为空
删除所有集群服务
ipvsadm -C
往集群服务中添加一个真实服务器
ipvsadm -a -t 192.168.0.100:80 -r 172.25.250.10:80 -m -w 1
ipvsadm -a -t 192.168.0.100:80 -r 172.25.250.20:80 -m -w 1
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.1.100:80 wlc
-> 172.25.250.10:80 Masq 1 0 0
-> 172.25.250.20:80 Masq 1 0 0
清空转发请求计数器
ipvsadm -Z
实验部分
一、NAT模式
实验准备:
node IP VIP 角色 模式
LVS 192.168.0.100 172.25.250.100 调度器 NAT、仅主机
RS1 192.168.0.10 null 真实服务器1 仅主机
RS2 192.168.0.20 null 真实服务器2 仅主机
client 172.25.250.200 null 客户端 NAT
node | IP | VIP | 角色 | 模式 |
---|---|---|---|---|
LVS | 192.168.0.100 | 172.25.250.100 | 调度器 | NAT、仅主机 |
RS1 | 192.168.0.10 | null | 真实服务器1 | 仅主机 |
RS2 | 192.168.0.20 | null | 真实服务器2 | 仅主机 |
client | 172.25.250.200 | null | 客户端 | NAT |
网络配置
Note:服务端的网关设置为与 LVS 的 DIP 一致是为了保证网络通信的顺畅、高效和可管理性
实验步骤:
LVS中
1.启用内核路由功能
<code>[root@lvs ~]# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 0
net.ipv4.ip_forward_update_priority = 1
net.ipv4.ip_forward_use_pmtu = 0
[root@lvs ~]#
[root@lvs ~]# vim /etc/sysctl.conf
[root@lvs ~]#
[root@lvs ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@lvs ~]#
[root@lvs ~]# cat /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.ip_forward=1
2.安装ipvsadm
<code>[root@lvs ~]# yum install ipvsadm -y
3.添加调度策略
[root@lvs ~]# ipvsadm -A -t 172.25.250.100:80 -s rr
[root@lvs ~]# ipvsadm -a -t 172.25.250.100:80 -r 192.168.0.10:80 -m
[root@lvs ~]# ipvsadm -a -t 172.25.250.100:80 -r 192.168.0.20:80 -m
4.查看调度策略
[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.250.100:80 rr
-> 192.168.0.10:80 Masq 1 0 0
-> 192.168.0.20:80 Masq 1 0 0
5.保存策略
[root@lvs ~]# ipvsadm -Sn
-A -t 172.25.250.100:80 -s rr
-a -t 172.25.250.100:80 -r 192.168.0.10:80 -m -w 1
-a -t 172.25.250.100:80 -r 192.168.0.20:80 -m -w 1
[root@lvs ~]# cat /etc/sysconfig/ipvsadm
-A -t 172.25.250.100:80 -s rr
-a -t 172.25.250.100:80 -r 192.168.0.10:80 -m -w 1
-a -t 172.25.250.100:80 -r 192.168.0.20:80 -m -w 1
为临时的 需设置开机启动
[root@lvs ~]# systemctl enable --now ipvsadm.service
服务无法启动原因及解决方法
RS1和RS2中
设置web服务
<code>dnf install httpd -y
[root@rs1 ~]# echo welcome to RS1 > /var/www/html/index.html
[root@rs1 ~]# systemctl restart httpd
[root@rs2 ~]# echo welcome to RS2 > /var/www/html/index.html
[root@rs2 ~]# systemctl restart httpd
client客户端测试
测试LVS调度器的VIP
[root@client ~]# curl 172.25.250.100
welcome to RS1
[root@client ~]# curl 172.25.250.100
welcome to RS2
#循环测试
[root@client ~]# for i in {1..10}
> do
> curl 172.25.250.100
> done
welcome to RS1
welcome to RS2
welcome to RS1
welcome to RS2
welcome to RS1
welcome to RS2
welcome to RS1
welcome to RS2
welcome to RS1
welcome to RS2
二、DR模式
实验准备:
node IP vip 角色 模式
LVS 192.168.0.50 lo:192.168.0.200/32 调度器 仅主机
ROUTER NAT:172.25.250.100 路由器 NAT
仅主机:192.168.0.100 仅主机
RS1 192.168.0.10 lo:192.168.0.200/32 真实服务器1 仅主机
RS2 192.168.0.20 lo:192.168.0.200/32 真实服务器2 仅主机
client 172.25.250.200 null 客户端 NAT
node | IP | VIP | 角色 | 模式 |
---|---|---|---|---|
LVS | 192.168.0.50 | lo:192.168.0.200/32 | 调度器 | 仅主机 |
ROUTER | 172.25.250.100
192.168.0.100
| 路由器 | NAT、仅主机 | |
RS1 | 192.168.0.10 | lo:192.168.0.200/32 | 真实服务器1 | 仅主机 |
RS2 | 192.168.0.20 | lo:192.168.0.200/32 | 真实服务器2 | 仅主机 |
client | 172.25.250.200 | null | 客户端 | NAT |
LVS 的 <code>lo(回环接口)不一定必须为
/32
。
然而,将其配置为
/32
通常是一种常见的实践,这样做可以避免一些潜在的网络问题和冲突。但在某些特定的网络环境和配置需求下,也可能会采用其他的子网掩码配置
网络配置
Note:确保每台主机ping都可以互相通信
实验步骤:
LVS中
1.添加回环IP/VIP
<code>[root@lvs ~]# ip addr add dev lo 192.168.0.200/32
[root@lvs ~]# ip ad
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet 192.168.0.200/32 scope global lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:bb:bd:47 brd ff:ff:ff:ff:ff:ff
altname enp3s0
altname ens160
inet 192.168.0.50/24 brd 192.168.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::9a00:a113:9751:5d9e/64 scope link noprefixroute
valid_lft forever preferred_lft forever
2.安装ipvasdm软件
[root@lvs ~]# dnf install ipvsadm -y
3.添加调度策略
[root@lvs ~]# ipvsadm -A -t 192.168.0.200:80 -s wrr
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g -w 1
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g -w 2
4.保存策略
[root@lvs ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
[root@lvs ~]# cat /etc/sysconfig/ipvsadm
-A -t 192.168.0.200:80 -s wrr
-a -t 192.168.0.200:80 -r 192.168.0.10:80 -g -w 1
-a -t 192.168.0.200:80 -r 192.168.0.20:80 -g -w 2
[root@lvs ~]# systemctl restart ipvsadm
######################################################################################
-A -t 192.168.0.200:80 -s wrr
添加一个新的服务,服务的 IP 地址为 192.168.0.200 ,端口为 80 ,使用加权轮询(wrr)的调度算法
-a -t 192.168.0.200:80 -r 192.168.0.10:80 -g -w 1
为上述服务添加一个真实服务器,真实服务器的 IP 地址为 192.168.0.10 ,端口为 80 ,采用网关(-g)模式,权重为 1
-a -t 192.168.0.200:80 -r 192.168.0.20:80 -g -w 2
为上述服务再添加一个真实服务器,真实服务器的 IP 地址为 192.168.0.20 ,端口为 80 ,采用网关模式,权重为 2
######################################################################################
-g 模式指的是 DR(Direct Routing,直接路由)模式
在 DR 模式下:
客户端的请求到达 LVS 调度器后,调度器根据负载均衡算法选择后端的真实服务器。
调度器将请求数据包的目标 MAC 地址修改为所选真实服务器的 MAC 地址,然后直接将数据包发送到真实服务器所在的网络。
真实服务器处理完请求后,直接将响应数据包发送给客户端,而不再经过 LVS 调度器
ROUTER中
设置内核参数
<code>net.ipv4.ip_forward=1
sysctl -p
RS1和RS2中
1.添加lo回环ip/VIP
ip addr add dev lo 192.168.0.200/32
2.解决响应问题
作用:直接将响应数据包发送给客户端,不再经过 LVS 调度器
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
3.web配置
<code>dnf install httpd -y
[root@rs1 ~]# echo welcome to RS1 > /var/www/html/index.html
[root@rs2 ~]# echo welcome to RS2 > /var/www/html/index.html
systemctl restart httpd
client客户端测试
[root@client ~]# curl 192.168.0.200
welcome to RS2
[root@client ~]# curl 192.168.0.200
welcome to RS1
[root@client ~]# curl 192.168.0.200
welcome to RS2
[root@client ~]# curl 192.168.0.200
welcome to RS2
[root@client ~]# curl 192.168.0.200
welcome to RS1
[root@client ~]# curl 192.168.0.200
welcome to RS2
#循环测试
[root@client ~]# for i in {1..10}
> do
> curl 192.168.0.200
> done
welcome to RS2
welcome to RS1
welcome to RS2
welcome to RS2
welcome to RS1
welcome to RS2
welcome to RS2
welcome to RS1
welcome to RS2
welcome to RS2
三、防火墙标签解决轮询错误
在RS1和RS2中安装mod_ssl并重启apache
yum install mod_ssl -y
systemctl restart httpd
在vs调度器中设定端口标签,人为80和443是一个整体
<code>iptables -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport --dports
80,443 -j MARK --set-mark 666
设定调度规则
<code>[root@lvs ~]# ipvsadm -C #清空
[root@lvs ~]# ipvsadm -A -f 666 -s rr
[root@lvs ~]# ipvsadm -a -f 666 -r 192.168.0.10 -g
[root@lvs ~]# ipvsadm -a -f 666 -r 192.168.0.20 -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
FWM 666 rr
-> 192.168.0.10:0 Route 1 0 0
-> 192.168.0.20:0 Route 1 0 0
[root@lvs ~]# systemctl restart ipvsadm.service
[root@lvs ~]# cat /etc/sysconfig/ipvsadm
-A -f 666 -s rr
-a -f 666 -r 192.168.0.10:0 -g -w 1
-a -f 666 -r 192.168.0.20:0 -g -w 1
-f 防火墙标识 后面写数字(666)
client客户端测试
[root@client ~]# curl -k https://192.168.0.200
welcome to RS1
[root@client ~]# curl -k https://192.168.0.200
welcome to RS2
[root@client ~]# curl -k https://192.168.0.200;curl 192.168.0.200
welcome to RS1
welcome to RS2
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。