今天我们学习Linux架构keepalived实现LVS代理双击热备

特点:

1.高性能

一些国家重要的计算密集型应用(如天气预报,核试验模拟等),需要计算机有很强的运算处理能力

2.高性价比

通常一套系统集群架构,只需要几台或数十台服务器主机即可,与动则上百万的专用超级计算机相比具有更高的性价比

3.可扩展性

集群的性能不限于单一的服务实体,新的服务实体可以动态的加入到集群,从而增强集群的性能

4.高可用性

当一台节点服务器发生故障的时候,这台服务器上所运行的应用程序将在另一节点服务器上被自动接管。整个系统的服务可以是7*24小时可用的,消除单点故障对于增强数据可用性、可达性和可靠性是非常重要的

5.负载均衡

负载均衡能把任务比较均匀的分布到集群环境下的计算和网络资源,以便提高数据吞吐量

6.错误恢复

如果集群中的某一台服务器由于故障或者维护需要而无法使用,资源和应用程序将转移到可用的集群节点上

7.透明性

多个独立计算机组成的松耦合集群系统构成一个虚拟服务器。用户或客户端程序访问集群系统时,就像访问一台高性能,高可用的服务器一样,集群中一部分服务器的上线,下线不会中断整个系统服务,这对用户也是透明的

8.可管理性

整个系统可能在物理上很大,但是集群系统易管理,就像管理一个单一映像系统一样。在理想状况下,软硬件模块的插入能做到即插即用

9.可编程性

在集群系统上,容易开发及修改各类应用程序

LVS介绍

LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。在linux内核2.6中,它已经成为内核的一部分,在此之前的内核版本则需要重新编译内核。

为什么要用 LVS?

为了克服服务器的过载压力问题,有两种解决方案:

  • 单服务器解决方案,即将服务器升级到性能更高的服务器,但是当请求增加时,将很快过载,因此必须再次对其进行升级,升级过程复杂且成本高;

  • 多服务器解决方案,即在服务器集群上构建可扩展的网络服务系统。当负载增加时,可以简单地在群集中添加新服务器或更多服务器以满足不断增长的需求,而商用服务器具有最高的性能/成本比。因此,构建用于网络服务的服务器群集系统更具可伸缩性,并且更具成本效益。

LVS和nginx区别


  • LVS比nginx具有更强的抗负载能力,性能更高,对内存和cpu资源消耗低。

  • LVS工作在网络层,具体流量由操作系统内核进行处理,nginx工作在应用层,可针对http应用实施一些分流策略。

  • LVS安装配置比较复杂点,网络依赖性较大,稳定性高,lvs不支持正则表达式,不能实现动静分离操作。

  • LVS使用的协议范围广, Nginx 仅支持 HTTP、HTTPS、Email 协议,适用范围小。

LVS相关术语

  • DS:Director Server。指的是前端负载均衡器节点。

  • RS:Real Server。后端真实的工作服务器。

  • VIP:Virtual IP 向外部直接面向用户请求,作为用户请求的目标的IP地址。

  • DIP:Director Server IP,主要用于和内部主机通讯的IP地址。

  • RIP:Real Server IP,后端服务器的IP地址。

  • CIP:Client IP,访问客户端的IP地址。

LVS负载均衡算法


静态负载均衡

  • rr(round robin,轮询 )

轮询是最简单的负载均衡方法,按照预定的顺序,轮流将请求分配给后端服务器。

  • wrr(weight round robin,加权轮询)

类似于轮询,但是每个后端服务器可以设置一个权重,表示其处理能力。权重高的服务器将接收更多的请求。

  • sh(source hashing,源地址散列算法(HASH))

根据请求的源IP地址,通过散列函数计算出一个槽位,将请求分发到对应的服务器。

  • dh(destination hashing,目标地址 HASH)

与源地址散列算法相反,是根据请求的目标IP地址来进行散列分发的。

动态负载均衡

  • lc(leash-connection,最少连接 )

简单算法:active * 256 + inactive (谁的小选谁)

哪个服务器当前的活跃连接数最少,就将新的请求分配给它。

  • wlc(加权最少连接)

简单算法:(active * 256 + inactive) / weight(谁的小选谁)

谁的结果最小,就分配给谁。

二、三种LVS工作模式详解

1、基于NAT的LVS模式负载均衡

NAT(network address translation) 网络地址转换,其主要原理是修改数据报头,使得位于企业内部的私有ip地址可以访问外网,以及外部用户可以访问位于公司内部的私有的ip主机。

LVS调度器中有一个连接Hash表,该表会记录连接请求及其转发信息,当同一个连接下一个数据包发送给调度器时,该Hash表可以直接找到之前连接的记录,并根据记录信息选出相同真实服务器及其端口信息。

工作原理

  • 当用户的请求到达调度器时,请求报文会先到内核空间的PREROUTING链上。此时报文的源IP为CIP,目标IP为VIP

  • PREROUTING检查发现数据包的目标IP是本机,就将数据包送至INPUT链。

  • IPVS工作在INPUT链上,当数据包抵达INPUT链后,IPVS会检查数据包所请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器RIP,然后将数据包送往 POSTROUTING链。此时报文的源IP为CIP,目标IP为RIP。

  • POSTROUTING链通过选路,将数据包转发给Real Server

  • Real Server对比发现目标IP是自己,就会接受这个请求报文,开始构建响应报文发回给调度器。源IP为RIP,目标IP为CIP

  • 调度器在响应客户端前,会将报文的源IP地址修改为自己的VIP,然后响应给客户端。此时报文的源IP为VIP,目标IP为CIP

NAT的优点

集群中的物理服务器可以使用任何支持TCP/IP操作系统它只需要一个 IP 地址配置在调度器上,服务器组可以用私有的 IP 地址。

NAT的缺点

伸缩能力有限,当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器那,速度就会变慢。

2、基于TUN的LVS负载均衡

IP 隧道:IP Tunnel,简称:TUN 模式,采用开放式的网络结构,负载调度器作为客户机的访问入口,各节点通过各自的 Internet 连接直接回应给客户机,而不经过负载调度器,服务器节点分散在互联网中的不同位置,有独立的公网 IP 地址,通过专用 IP 隧道与负载调度器相互通信。

TUN 模式的优点

  • 单臂模式,LVS 负载压力小。

  • 数据包修改小,信息完整性高。

  • 可跨机房。

TUN 模式的缺点

  • 不支持端口映射。

  • 需在 RS 后端服务器安装模块(ipip)及配置 VIP。

  • 隧道头部 IP 地址固定,RS 后端服务器网卡可能会不均匀。

  • 隧道头部的加入可能会导致分片,最终会影响服务器性能。

TUN 模式的使用场景

如对转发性要求较高且具有跨机房需求的,可选择 TUN 模式。

3、LVS(DR)负载均衡

直接路由:Direct Routing,简称 DR 模式,采用半开放式的网络结构,与 TUN 模式的结构类似,但各节点并不是分散在各个地方,而是与调度器位于同一个物理网络,负载调度器与各节点服务器通过本地网络连接 ,不需要建立专用的 IP 隧道。它是最常用的工作模式,因为它的功能性强大。

DR 实现原理

  • 当客户端用户发送请求给 <www.baidu.com> 网站时,首先经过 DNS 解析到 IP 后并向百度服务器发送请求,数据包经过网络到百度 LVS 负载均衡服务器。

  • 这时到达 LVS 网卡时的数据包包括:源 IP 地址(客户端地址)、目的 IP 地址(百度对外服务器 IP 地址,也就是 VIP)、源 MAC 地址(CMAC / LVS 连接路由器的 MAC 地址)、目标 MAC 地址(VMAC / VIP 对应的 MAC 地址)。

  • 数据包到达网卡后,经过链路层到达 PREROUTING 链,进行查找路由,发现目的 IP 是 LVS 的 VIP,这时就会发送至 INPUT 链中并且数据包的 IP 地址、MAC 地址、Port 都未经过修改。

  • 数据包到达 INPUT 链中,LVS 会根据目的 IP 和 Port(端口)确认是否为 LVS 定义的服务。

  • 如是定义过的 VIP 服务,会根据配置的服务信息,从 RealServer 中选择一个后端服务器 RS1,然后 RS1 作为目标出方向的路由,确定下一跳信息及数据包通过具体的哪个网卡发出,最好将数据包通过 INET_HOOK 到 OUTPUT 链中。

  • 数据包通过 POSTROUTING 链后,目的 MAC 地址将会修改为 RealServer 服务器 MAC 地址(RMAC)源 MAC 地址修改为 LVS 与 RS 同网段的 IP 地址的 MAC 地址(DMAC)此时,数据包将会发至 RealServer 服务器。

  • 数据包到达 RealServer 服务器后,发现请求报文的 MAC 地址是自己的网卡 MAC 地址,将会接受此报文,待处理完成之后,将响应报文通过 lo 接口传送给 eth0 网卡然后向外发出。

  • 此时的源 IP 地址为 VIP,目标 IP 为 CIP,源 MAC 地址为 RS1 的 RMAC,目的 MAC 地址为下一跳路由器的 MAC 地址(CMAC),最终数据包通过 RS 相连的路由器转发给客户端。

3.2、DR 模式的优点

  • 响应数据不经过 LVS,性能高。

  • 对数据包修改小,信息完整性好。

3.3、DR 模式的缺点

  • LVS 与 RS 必须在同一个物理网络。

  • RS 上必须配置 lo 和其他内核参数。

  • 不支持端口映射。

3.4、DR 模式的使用场景

对性能要求高的,可首选 DR 模式,还可透传客户端源 IP 地址。

NAT模式配置

需要4台虚拟机,两台充当web站点,两台proxy

先打开两台web的nginx代理

bash 复制代码
[root@web1 ~]# systemctl start nginx

加载ip_vs模块

bash 复制代码
[root@proxy1 ~]# modprobe ip_vs
[root@proxy1 ~]# lsmod | grep ip_vs
ip_vs                 229376  0
nf_conntrack          212992  1 ip_vs
nf_defrag_ipv6         24576  2 nf_conntrack,ip_vs
libcrc32c              12288  2 nf_conntrack,ip_vs

安装模块管理工具ipvsadm

bash 复制代码
[root@proxy1 ~]# yum install -y ipvsadm

ipvsadm命令

常见选项

选项 作用
-A 添加虚拟服务节点
-D 删除虚拟服务节点
-L 查看虚拟服务节点列表
-n 以数字形式显示查看内容
-a 添加真实服务节点
-d 删除真实服务节点
-l 查看真实服务节点列表
-t 指定虚拟服务器IP地址
-s 指定调度算法
-r 指定真实服务器节点IP地址
-w 指定权重值
-g 直接路由模式(默认)
-m NAT模式
-i 隧道模式

利用-s指定轮询算法(rr),添加虚拟服务节点(-A)并指定虚拟服务器(-t)ip地址为10.0.0.1

bash 复制代码
[root@proxy1 ~]# ipvsadm -A -t 10.0.0.1 -s rr
相关推荐
老司机张师傅7 小时前
【微服务实战之Docker容器】第十章-compose容器编排
docker·微服务·架构
0wioiw07 小时前
Ubuntu(⑤Redis)
linux·运维·ubuntu
晓py7 小时前
理解 MySQL 架构:从连接到存储的全景视图
数据库·mysql·架构
Hare_bai7 小时前
WPF的MVVM模式核心架构与实现细节
ui·架构·c#·wpf·交互·xaml·mvvm
milanyangbo7 小时前
谁生?谁死?从引用计数到可达性分析,洞悉GC的决策逻辑
java·服务器·开发语言·jvm·后端·算法·架构
我爱钱因此会努力8 小时前
ansible实战-不同的用户登录不同的主机
linux·运维·服务器·ansible
Wang's Blog8 小时前
Linux小课堂: 系统核心技能与应用总结与进阶指南
linux·运维·服务器
 梦晓天明8 小时前
12.集合介绍以及数组的使用选择
linux·开发语言·python
刘孬孬沉迷学习8 小时前
5G网络gNB与核心网(5GC)连接架构及传输协议
网络·网络协议·tcp/ip·5g·架构·udp·信息与通信