2024.8.12(LVS)

一、LVS

1、描述以及工作原理
1. 什么是LVS

linux virtural server的简称,也就是linxu虚拟机服务器,这是一个由章文嵩博士发起的开源项目,官网是http://www.linuxvirtualserver.org,现在lvs已经是linux内核标准的一部分,使用lvs可以达到的技术目标是:通过linux达到负载均衡技术和linux操作系统实现一个高性能高可用的linux服务器集群,他具有良好的可靠性,可延展性和可操作性,从而以低廉的成本实现最优的性能,Lvs是一个实现负载均衡集群开源软件项目,lvs从逻辑上可以分为调度层,server集群层,和共享存储

免费,开源,四层负载均衡

2、LVS调度算法
1. 静态调度算法Fixed Scheduling Method
1.1 轮询

RR 轮询 **

调度器通过"轮叫"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。

1.2 加权轮询

WRR 加权轮询 **

调度器通过"加权轮叫"调度算法根据真实服务器的不同处理能力来调度访问请求。 这样可以保证处理能力强的服务器处理更多的访问流量。调度器 可以自动问询真实服务器的负载情况,并动态地调整其权值。

1.3 目标地址hash

DH 目标地址hash **

算法也是针对目标IP地址的负载均衡,但它是一种静态映射算法,通过一个散列(Hash)函数将一个目标IP地址映射到一台服务器。

目标地址散列调度算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

1.4 源地址hash

SH 源地址hash **

算法正好与目标地址散列调度算法相反,它根据请求的源IP地址,作为散列键(HashKey)从静态分的散列表找出对应的服务器,若该服务器是 可用的且未超载,将请求发送到该服务器,否则返回空。

它采用的散列函数与目标地址散列调度算法的相同。除了将请求的目标IP地址换成请求的源IP地址外,它的算法流程与目标地址散列调度算法的基本相似。在实际应用中,源地址散列调度和目标地址散列调度可以结合使用在防火墙集群中,它们可以保证整个系统的唯一出入口。

2、 动态调度算法Dynamic Scheduling Method 动态调度方法
2.1 Lc最少链接

调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。I 如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载。

2.2 wlc加权最少链接

在集群系统中的服务器性能差异较大的情况下,调度器采用"加权最少链接"调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

2.3 sed最少期望延迟

基于wlc算法,举例说明:ABC三台机器分别权重123,连接数也分别是123,name如果使用WLC算法的话一个新请求 进入时他可能会分给ABC中任意一个,使用SED算法后会进行这样一个运算

A:(1+1)/2

B:(1+2)/2

C:(1+3)/3

根据运算结果,把连接交给C

2.4 nq从不排队调度算法

无需列队,如果有台realserver的连接数=0 就直接分配过去,不需要进行sed运算

2.5 lblc基于本地最少链接

"基于局部性的最少链接"调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。

该算法根据请求的目标IP地址找出该 目标IP地址最近使用的服务器,若该服务器 是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用"最少链接"的原则选出一个可用的服务器,将请求发送到该服务器。

2.6 lblcr带复制的基于本地的最少链接

"带复制的基于局部性最少链接"调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。

它与LBLC算法的不同 之处是它要维护从一个 目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。

该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按"最小连接"原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按"最小连接"原则从这个集群中选出一 台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。

3、LVS的工作原理
  1. 当用户向负载均衡调度器(director server)发起请求,调度器将请求发往内核空间

  2. prerouting链首先会接受到用户请求,判断目标ip确定是本机ip,将数据包发往input链

  3. IPVS是工作在input链上的,当用户请求到达input时,ipvs会将用户请求和自己定义好的集群服务器进行比对,如果用户请求就是定义的集群服务,那么此时ipvs会强行修改数据包里的目标ip地址以及端口,并将新的数据包发往POSTROUTING链,

  4. POSTROUTING链接收到数据包后,发现目标ip地址刚好是自己的后端服务器,那么通过选路,将数据包最终发送给后端服务器

二、组成以及相关术语

1、组成
1. ipvs

ip virtual server,一段代码工作在内核空间,ipvs,是真正生效实现调度的代码(类似nginx中的proxy_pass)

2. ipvsadm

另一段是工作在用户空间,ipvsadm,负责为ipvs内核框架编写规则,定义谁是集群服务,谁是后端真正的服务器(real server)类似nginx中的upstream

3. Ivs组成

Ivs组成=ipvsipv(内核,负载均衡调度代码)+sadm(ipvs管理器,负责均衡提供集群后端服务等信息)

2、术语
  1. DS Dlrector Server前端负责均衡节点(负载均衡服务器)

  2. RS read server 后端真实工作服务器(web服务器)

  3. vip向外部直接面向用户请求,作为用户请求的目标ip地址(负载均衡的ip地址,提供给用户)

  4. DIP Director Server lp和内部主机通讯的ip地址(负责与Real Server交互的内部lp)

  5. RIP Real Server lp 后端服务器ip地址

  6. CIP client IP 访问客户端ip地址

3、三种工作模式

1 .* LVS-NAT模式

2 .* LVS-DR模式

  1. Lvs-Tun模式(隧道模式)
4、NAT模式的工作原理
  1. 用户请求ds,此时请求的报文会先到内核空间prerouting链,此时报文ip为cip,目标ip为vip

  2. prerouting检测发现数据包目标ip是本机,将数据包送到input链

  3. ipvs对比数据包请求的服务是否为集群服务,如果是,修改数据包的目标ip地址为后端服务器的IP地址,然后将数据包发送给POSTROUTING链,此时报文ip为cip,目标ip为rip

  4. POSTROUTING通过选路,将数据发送给Real Server

  5. RealServer对比发现目标ip为自己的ip,开始构建响应报文发回给Director Server此时报文的源ip为RIP,目标ip为CIP

  6. Derector Server在响应客户端前,会将源ip地址修改为自己的VIP,然后响应给客户端,目标ip为cip;此时报文源IP为VIP,目标ip为cip

NAT模型的特性:

  1. Rs应该是私有地址,Rs网关必须指向DIP

  2. DIP和RIP必须在同一个网段内

  3. 请求和响应报文都应该经过Director Server,高负载场景中Director Server容易成为性能瓶颈

  4. 支持端口映射

  5. Rs可是使用任意操作系统

  6. 缺陷,对Ds压力会比较大,请求和响应都需要经过ds

三、NAT模式实战-环境准备

1、环境准备

|--------|----------------|------------------------------------|
| 角色 | 作用 | ip |
| NAT | 负载均衡调度器 | 内网(192.168.8.142)外网(192.168.8.141) |
| web01 | 真实web服务器RS | 192.168.8.128 |
| web02 | 真实web服务器RS | 192.168.8.140 |
| DNS | 用来解析主机的域名和ip地址 | |
| client | 测试 | |

2、web服务器

[root@web01 ~]# yum -y install epel-release

[root@web01 ~]# yum -y install nginx

[root@web01 ~]# nginx

[root@web02 ~]# yum -y install epel-release

[root@web02 ~]# yum -y install nginx

[root@web02 ~]# nginx

3、nat

给NAT主机增加一张网卡,命名为ens36,自动或者手工获取ip均可,理论上nat对应ds服务器应该有两张网卡(vip,dip)vip对外服务,需要使用公网ip,dip内网局域网,使用虚拟机使用仅主机模式,也可以用桥接模式和nat模式都可以

4、步骤
1. 配置两个网卡和两个ip地址

正常来说应该配置两个不同的网段ip,一个对外vip,一个对内dip,现在主要使用NAT的网络模式,可以配置一个对外的桥接模式,nat对内,两个都是net模式一定要分清那个ip是vip,那个ip是dip,在物理机上都能ping通

2. 克隆主机,生成net模式的机器
3. 设置主机名称
5、配置DNS服务器

aaa.com

web01 192.168.8.128

web02 192.168.8.140

nat 192.168.8.142

ds 192.168.8.141

修改主机名称

固定ip

关闭防火墙

关闭SELinux

关闭NetManager

1. 安装bind yum -y install bind

[root@dns ~]# yum -y install bind

2. 配置主配置文件 vim /etc/named. conf

[root@dns ~]# vim /etc/named.conf

3. 配置zones文件 vim /etc/named.rfc ... zones

[root@dns ~]# vim /etc/named.rfc1912.zones

4. 配置zone文件 vim /var/named/ ... zone

[root@dns ~]# cd /var/named/

[root@dns named]# ls

data named.ca named.localhost slaves

dynamic named.empty named.loopback

[root@dns named]# cp -p named.localhost aaa.com.zone

[root@dns named]# vim aaa.com.zone

5. 检查配置文件

[root@dns named]# named-checkconf /etc/named.conf

[root@dns named]# named-checkconf /etc/named.rfc1912.zones

[root@dns named]# named-checkzone aaa.com.zone aaa.com.zone

同步时间

6. 启动服务

[root@dns named]# systemctl start named

[root@dns named]# systemctl enable named

7. 客户端测试

[root@client ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33

[root@client ~]# systemctl start network

[root@client ~]# vim /etc/resolv.conf

[root@client ~]# ping nat.aaa.com

[root@client ~]# echo "nameserver 192.168.8.143" > /etc/resolv.conf

8. nat测试

[root@nat ~]# echo "nameserver 192.168.8.143" > /etc/resolv.conf

[root@nat ~]# ping nat.aaa.com

9. 时间同步

[root@nat ~]# yum -y install ntpdate.x86_64

[root@nat ~]# crontab -e

[root@nat ~]# crontab -l

* 2 * * * /usr/sbin/ntpdate cn.ntp.org.cn

[root@nat ~]# yum -y install ntp

[root@nat ~]# systemctl start ntpd

[root@nat ~]# systemctl enable ntpd

6、NAT配置规则

[root@nat ~]# yum -y install ipvsadm.x86_64

1. 清除以往的规则

[root@nat ~]# ipvsadm -C

2. 查看规则

[root@nat ~]# ipvsadm -L

[root@nat ~]# ipvsadm -L -n

3. 添加规则

[root@nat ~]# ipvsadm -A -t 192.168.8.141:80 -s rr (对外)

[root@nat ~]# ipvsadm -L

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP nat:http rr

[root@nat ~]# ipvsadm -L -n

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 192.168.8.141:80 rr

[root@nat ~]# ipvsadm -a -t 192.168.8.142:80 -r 192.168.8.128:80 -m

[root@nat ~]# ipvsadm -a -t 192.168.8.142:80 -r 192.168.8.140:80 -m

相关推荐
乙己4073 小时前
计算机网络——网络层
运维·服务器·计算机网络
飞行的俊哥3 小时前
Linux 内核学习 3b - 和copilot 讨论pci设备的物理地址在内核空间和用户空间映射到虚拟地址的区别
linux·驱动开发·copilot
幽兰的天空5 小时前
介绍 HTTP 请求如何实现跨域
网络·网络协议·http
lisenustc5 小时前
HTTP post请求工具类
网络·网络协议·http
心平气和️5 小时前
HTTP 配置与应用(不同网段)
网络·网络协议·计算机网络·http
心平气和️5 小时前
HTTP 配置与应用(局域网)
网络·计算机网络·http·智能路由器
hunter2062065 小时前
ubuntu向一个pc主机通过web发送数据,pc端通过工具直接查看收到的数据
linux·前端·ubuntu
qzhqbb5 小时前
web服务器 网站部署的架构
服务器·前端·架构
不会飞的小龙人5 小时前
Docker Compose创建镜像服务
linux·运维·docker·容器·镜像
不会飞的小龙人5 小时前
Docker基础安装与使用
linux·运维·docker·容器