0


LVS(Linux virual server) Linux 虚拟服务器

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常见的三种类型:

  1. LB:LoadBalancing(负载均衡)由多个主机组成,每个主机只承担一部分访问
  2. 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来进行表示,当没有达到这种水平的时候,就会有一些列的惩罚措施,而运维,最主要的目标就是达成这种服务水平。 停机时间又分为两种,一种是计划内停机时间,一种是计划外停机时间,而运维则主要关注计划外停机时间
  3. HPC:High-performance computing(高性能计算,国家战略资源)

分布式简介

分布式存储:Ceph,GlusterFs,FastDFS,MogileFs

分布式计算:hadoop,Spark

分布式常见应用:

  • 分布式应用-服务按照功能拆分,使用微服务
  • 分布式静态资源--静态资源放在不同的存储集群上
  • 分布式数据和存储--使用key-value缓存系统
  • 分布式计算--对特殊业务使用分布式计算,比如Hadoop集群

集群和分布式

  • 集群:同一个业务系统,部署在多台服务器上,集群中,每一台服务器实现的功能没有差别,数据和代码都是一样的
  • 分布式:一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起来,才是完整的业务
  • 分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率
  • 对于大型网站,访问用户很多,实现一个群集,在前面部署一个负载均衡服务器,后面几台服务器完成同一业务。如果有用户进行相应业务访问时,负载均衡器根据后端哪台服务器的负载情况,决定由给哪一台去完成响应,并且台服务器垮了,其它的服务器可以顶上来。分布式的每一个节点,都完成不同的业务,如果一个节点垮了,那这个业务可能就会失败。

lvs集群体系结构

工作原理: VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS

第一层:负载调度器:Load Balancer,它是访问整个群集系统的唯一入口,对外使用所有服务器共有的

虚拟 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)/weight
  • SED:Shortest Expection Delay,初始连接高权重优先Overhea(activeconns+1+inactiveconns)x 256/weight 但是,当node1的权重为1,node2的权重为10,经过运算前几次的调度都会被node2承接
  • NQ:Never Queue,第一轮均匀分配,后续SED
  • LBLC: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的策略规则。

命令语法、子命令和选项

语法

 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.启用内核路由功能
[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
[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服务
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.50lo:192.168.0.200/32      调度器     仅主机   ROUTER 
 172.25.250.100

 192.168.0.100
  路由器NAT、仅主机       RS1     192.168.0.10lo:192.168.0.200/32  真实服务器1     仅主机       RS2     192.168.0.20lo:192.168.0.200/32  真实服务器2     仅主机      client     172.25.250.200                null      客户端        NAT

LVS 的

lo

(回环接口)不一定必须为

/32

然而,将其配置为

/32

通常是一种常见的实践,这样做可以避免一些潜在的网络问题和冲突。但在某些特定的网络环境和配置需求下,也可能会采用其他的子网掩码配置


网络配置

Note:确保每台主机ping都可以互相通信


实验步骤:

LVS中
1.添加回环IP/VIP

[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中
设置内核参数

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配置
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是一个整体

iptables -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport --dports
80,443 -j MARK --set-mark 666

设定调度规则

[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

标签: linux lvs 服务器

本文转载自: https://blog.csdn.net/HoweWWW/article/details/140997648
版权归原作者 HoweWWW 所有, 如有侵权,请联系我们删除。

“LVS(Linux virual server) Linux 虚拟服务器”的评论:

还没有评论