lvs简介

一、lvs简介

"LVS"通常指的是 "Linux Virtual Server"(Linux虚拟服务器),这是一个开源的负载均衡解决方案,由章文嵩博士在1998年发起。LVS被设计用于创建高性能和高可用性的服务器集群,以处理大量的并发服务请求。

LVS的工作原理是将一组真实的服务器透明地连接起来,对外表现为一个虚拟的服务节点。当客户端向该虚拟节点发送请求时,LVS会根据配置好的调度算法将请求分发到后端的真实服务器上进行处理。这样可以有效提高系统的吞吐量、可靠性和可用性。

LVS支持多种调度算法,包括但不限于轮询(Round Robin)、最少连接(Least Connections)和目标地址散列(Destination Hashing)等。此外,LVS还可以与IPVS(IP Virtual Server)模块结合使用,后者提供了更高效的状态跟踪机制和更多的调度策略。

LVS广泛应用于各种场景,如Web服务器集群、数据库服务器集群以及其他需要高并发处理能力的应用程序中。

二、集群和分布式

2.1 集群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 (高性能计算,国家战略资源,不在课程范围内)

 

2.2 分布式

1、分布式存储 :Ceph GlusterFs FastDFS MogileFs
2、分布式计算 :hadoop Spark
3、分布式常见应用
     分布式应用 - 服务按照功能拆分,使用微服务
     分布式静态资源 -- 静态资源放在不同的存储集群上 分布式数据和存储 -- 使用 key-value 缓存系统
      分布式计算 -- 对特殊业务使用分布式计算,比如 Hadoop 集群

2.3 区别

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

三、lvs集群的类型

1、nat模式

1.1原理
1)本质是多目标 IP DNAT ,通过将请求报文中的目标地址和目标端口修改为某挑出的 RS RIP 和 PORT实现转发
2)RIP DIP 应在同一个 IP 网络,且应使用私网地址 ;RS 的网关要指向 DIP
3)请求报文和响应报文都必须经由 Director 转发, Director 易于成为系统瓶颈支持端口映射,可修改请求报文的目标PORT
4)VS 必须是 Linux 系统, RS 可以是任意 OS 系统
1.1.1运行逻辑

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 的调度机容易阻塞
 

1.1.2 NAT 模式的优缺点:

优点:

  • 支持 Windows 操作系统;
  • 支持端口映射,如 RS 服务器 PORT 与 VPORT 不一致的话,LVS 会修改目的 IP 地址和 DPORT 以支持端口映射;

缺点:

  • RS 服务器需配置网关;
  • 双向流量对 LVS 会产生较大的负载压力;
1.2 真机实验
1.2.1环境搭配
主机名ipvip角色

lvs

172.25.254.100192.168.178.100lvs
node1192.168.178.10测试机
server1172.168.178.1 GW 172.25.254.100null
server2192.168.178.1 GW 172.25.254.100null

1.2.1 配置命令

1、我们需要在lvs中启用内核路由功能

echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/ip_forward.conf
sysctl --system

2、在lvs中安装ipvsadm

yum install ipvsadm -y

3、在lvs中添加调度策略

ipvsadm -A -t 172.25.254.100:80 -s rr
ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.101:80
ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.101:80 -m
ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.102: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

 配置server1和server2

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

 最后使用node1测试即可

2、DR模式

2.1 简介

LVS-DR 模式,Director Server 作为群集的访问入口,不作为网关使用,节点 Director Server 与 Real Server 需要在同一个网络中,返回给客户端的数据不需要经过 Director Server。为了响应对整个群集的访问,Director Server 与 Real Server 都需要配置 VIP 地址。

工作原理如下图所示:

2.2数据包流向分析

1、客户端发送请求到 Director Server,请求的数据报文(源 IP 是 CIP,目标 IP 是 VIP) 到达内核空间。
2、Director Server 和 Real Server 在同一个网络中,数据通过二层数据链路层来传输。
3、内核空间判断数据包的目标 IP 是本机 VIP,此时 IPVS 比对数据包请求的服务是否是集群服务,是集群服务就重新封装数据包。修改源 MAC 地址为 Director Server 的 MAC 地址,修改目标 MAC 地址为 Real Server 的 MAC 地址,源 IP 地址与目标 IP 地址没有改 变,然后将数据包发送给 Real Server。
4、到达 Real Server 的请求报文的 MAC 地址是自身的 MAC 地址,就接收此报文。数 据包重新封装报文(源 IP 地址为 VIP,目标 IP 为 CIP),将响应报文通过 lo 接口传送给物理 网卡然后向外发出。
5、Real Server 直接将响应报文传送到客户端。

2.3 LVS-DR 模式的特点

1、Director Server 和 Real Server 必须在同一个物理网络中。
2、Real Server 可以使用私有地址,也可以使用公网地址。如果使用公网地址,可以通过 互联网对 RIP 进行直接访问。
3、所有的请求报文经由 Director Server,但回复响应报文不能经过 Director Server。
4、Real Server 的网关不允许指向 Director Server IP,即不允许数据包经过 Director S erver。
5、Real Server 上的 lo 接口配置 VIP 的 IP 地址。

2.4  构建LVS-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
调度器
RS1
192.168.0.101 GW 192.168.0.10 仅主机
lo:192.168.0.100
web 服务器1
RS2
192.168.0.102, GW 192.168.0.10 仅主机
lo:192.168.0.100
web 服务器2
2.4.1 步骤

1、添加回环ip/vip

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 调度器

 5、设置内核参数

realserver1和realserver2

1、添加lo回环ip/VIP

ip addr add dev lo 192.168.0.200/32

2、 解决响应问题

 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配置

4、客户机测试 

 [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

 2.3 TUN模式

转发方式:不修改请求报文的 IP 首部(源 IP CIP ,目标 IP VIP ),而在原 IP 报文之外再封装一个 IP 首部 (源IP DIP ,目标 IP RIP ),将报文发往挑选出的目标 RS RS 直接响应给客户端(源 IP VIP ,目标 IP 是CIP
2.3.1 原理

(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) 响应报文最终送达至客户端

2.3.2模式特点
  • 集群节点不必位于同一个物理网络但必须都拥有公网 IP(或都可以被路由)

  • 真实服务器不能将网关指向负载调度器

  • RIP 必须是公网地址

  • 负载调度器只负责入站请求

  • 不支持端口映射功能

  • 发送方和接收方必须支持隧道功能

三、其他问题

1、防火墙轮询问题

http https 为例,当我们在 RS 中同时开放 80 443 端口,那么默认控制是分开轮询的,这样我们就出
现了一个轮询错乱的问题
当我第一次访问 80 被轮询到 RS1 后下次访问 443 仍然可能会被轮询到 RS1
解决方法:
Director 主机打标记 :
iptables -t mangle -A PREROUTING -d $vip -p $proto -m multiport --dports $portl,$port2,..-i MARK --set-mark NUMBER
Director 主机基于标记定义集群服务
ipvsadm -A -f NUMBER [options]
  • 16
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值