全网最详细讲解LVS

一、LVS-集群的概念

集群:同一个业务系统,部署在多台服务器上,集群中,每一台服务器实现的功能没有差别,数据 和代码都是一样的。

如图所示 :

二、系统性能扩展方式

有两种方式分别为Scale UP,Scale Out

Scale UP:向上扩展,增强

Scale Out :向外扩展 , 增加设备,调度分配问题, 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 来进行表示,当没有达到这种水平的时候,就会有一
些列的惩罚措施,而运维,最主要的目标就是达成这种服务水平。
停机时间又分为两种,一种是计划内停机时间,一种是计划外停机时间,而运维则主要关注计划外
停机时间。

三、LVS功能简介已经工作模式详解

LVS相关术语:

VS:VirtualServer  负责调度

RS:RealServer   负责真正提供服务

LVS工作原理:
VS 根据请求报文的目标 IP 和目标协议及端口将其调度转发至某 RS ,根据调度算法来挑选 RS
LVS的概念:
VS Virtual Server
RS Real Server
CIP Client IP
VIP: Virtual serve IP VS 外网的 IP
DIP: Director IP VS 内网的 IP
RIP: Real server IP
访问流程: CIP <--> VIP == DIP <--> RIP
LVS-集群类型
lvs-nat : 修改请求报文的目标IP, 多目标 IP DNAT
lvs-dr 操纵封装新的 MAC 地址
lvs-tun : 在原请求IP 报文之外新加一个 IP 首部
lvs-fullnat 修改请求报文的源和目标 IP
工作模式;
nat 模式:
Ivs-nat: 本质是多目标IP DNAT ,通过将请求报文中的目标地址和目标端口修改为某挑出的 RS RIP 和 PORT实现转发。
RIP DIP 应在同一个 IP 网络,且应使用私网地址 ;RS 的网关要指向 DIP。
请求报文和响应报文都必须经由 Director 转发, Director 易于成为系统瓶颈 支持端口映射,可修改请求报文的目标PORT VS必须是 Linux 系统, RS 可以是任意 OS 系统。
DR模式;
DR Direct Routing ,直接路由, LVS 默认模式 , 应用最广泛 , 通过为请求报文重新封装一个 MAC 首部进行 转发,源MAC DIP 所在的接口的 MAC ,目标 MAC 是某挑选出的 RS RIP 所在接口的 MAC 地址;源 IP/PORT,以及目标 IP/PORT 均保持不变。
DR 模式中, RS 接收到访问请求后不需要回传给 VS 调度器,直接把回传数据发送给 client ,所以 RS vs 上都要有vip。
TUN 模式
转发方式:不修改请求报文的 IP 首部(源 IP CIP ,目标 IP VIP ),而在原 IP 报文之外再封装一个 IP 首部 (源IP DIP ,目标 IP RIP ),将报文发往挑选出的目标 RS RS 直接响应给客户端(源 IP VIP ,目标 IP 是CIP
fullnet 模式
fullnat :通过同时修改请求报文的源 IP 地址和目标 IP 地址进行转发
CIP --> DIP
VIP --> RIP
1.VIP 是公网地址, RIP DIP 是私网地址,且通常不在同一 IP 网络;因此, RIP 的网关一般不会指向 DIP
2.RS 收到的请求报文源地址是 DIP ,因此,只需响应给 DIP ;但 Director 还要将其发往 Client
3. 请求和响应报文都经由 Director
4. 支持端口映射

四、lvs-nat模式原理以及部署方法

(1)配置环境

环境:需要三台主机 分别是 LVS  web1 web2

如图所示:

 

1.首先每台主机将本地仓库配置好(我这里是在母盘中配置好的,经过链接克隆的四台主机)

 mkdir /rhel9 
 mount /dev/sr0 /rhel9  挂载
 cd  /etc/yum.repos.d/   
vim rhel9.repo           编辑本地仓库

2.关闭防火墙 将selinux设置为宽容模式

 (1)关闭防火墙

systemctl stop firewalld
systemctl mask firewalld

(2)配置selinux
setenforce 0
 getenforce 查看一下selinux此时的状态

3配置LVS环境

ifconfig 看一下网卡设备名称

LVS需要两块网卡 

一块为NAT   设置IP为172.25.254.100

nmcli connection modify ens160 ipv4.addresses 172.25.254.100/24

nmcli connection modify ens160 ipv4.gateway 172.25.254.2
nmcli connection modify ens160  ipv4.dns 114.114.114.144

nmcli connection modify ens160 ipv4.method manual

nmcli connection modify ens160 connection.autoconnect yes

nmcli connection up ens160

一块为仅主机模式  ip设置为192.168.0.100

nmcli connection  modify ens224   ipv4.addresses 192.168.0.100/24

nmcli connection modify ens224 ipv4.method manual

nmcli connection modify ens224 connection.autoconnect yes

nmcli connection up ens224

此时两张网卡不在同一个网络中,此时需要打开内核路由功能 让这两张网卡进行通信。

打开内核路由功能

此时是关闭状态

vim /etc/sysctl.conf 

保存退出后

此时文件还不能生效

利用命令 sysctl -p 让文件生效

 

hostnamectl hostname更改一下主机名 方便区分

hostnamectl hostname LVS

此时LVS环境就已经配好了

4.web1

web1的 网卡需要设定为仅主机模式


nmcli connection modify ens160 ipv4.addresses 192.168.0.10/24

nmcli connection modify ens160 ipv4.gateway 192.168.0.100

nmcli connection modify ens160 ipv4.method manual

nmcli connection modify ens160 connection.autoconnect yes
nmcli connection up ens160

dnf install httpd -y 下载httpd服务

echo web1-192.168.0.10 >/var/www/html/index.html

systemctl enable --now httpd

5.web2

网卡需要设置为仅主机模式
nmcli connection modify ens160 ipv4.addresses 192.168.0.20/24

nmcli connection modify ens160 ipv4.gateway 192.168.0.100

nmcli connection modify ens160 ipv4.method manual

nmcli connection modify ens160 connection.autoconnect yes
nmcli connection up ens160

dnf install httpd -y

echo web1-192.168.0.20 >/var/www/html/index.html

systemctl enable --now httpd

在LVS中检测一下环境是否已经完成了

 此时总体的环境就已经配置好啦!!

(2)LVS的部署

1.在LVS主机上安装ipvsadm

dnf install ipvsadm

2.写策略
ipvsadm -A -t 172.25.254.100:80 -s rr       rr--轮询调度

 ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m 
 ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m 

(3)测试一下结果

此时实验就完成啦!

五、ipvsadm常用的参数详解

lvs 软件相关信息
程序包: ipvsadm
Unit File: ipvsadm.service
主程序: /usr/sbin/ipvsadm
规则保存工具: /usr/sbin/ipvsadm-save
规则重载工具: /usr/sbin/ipvsadm-restore
配置文件: /etc/sysconfig/ipvsadm-config
ipvs 调度规则文件: /etc/sysconfig/ipvsadm
ipvsadm命令
核心功能 :
集群服务管理 : 增、删、改
集群服务的 RS 管理 : 增、删、改
查看
命令参数
管理集群服务
ipvsadm -A|E -t tcp |u udp |f (防护墙标签) \
service-address( 集群地址 ) \
[-s   scheduler( 调度算法 )] \
[-p      [ timeout]] \
[-M                 netmask] \
[--pepersistence_engine] \
[-b sched-flags]
ipvsadm -D -t|u|f service-address 删除
ipvsadm –C 清空
ipvsadm –R 重载
ipvsadm -S [-n] 保存
管理集群中的 real server
ipvsadm -a|e -t|u|f service-address -r server-address [-g | -i| -m]( 工作模式 ) [-w
weight]( 权重 )
ipvsadm -d -t|u|f service-address -r server-address 删除 RS
ipvsadm -L|l [options] 查看 rs。
lvs 集群中的增删改
1. 管理集群服务中的增删改
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
-A # 添加
-E # 修改
-t   #tcp服务
-u   #udp 服务
-s   # 指定调度算法,默认为 WLC
-p        # 设置持久连接超时,持久连接可以理解为在同一个时间段同一个来源的请求调度到同一个 Realserver
-f                 #firewall mask 火墙标记,是一个数字

六、dr模式的实现

实验环境:如图所示

需要五台主机 一台为客户端 一台为路由器 一台为LVS 

(1)配置实验环境
1.客户端环境

客户机IP:

客户机网关:

2.路由器环境

路由器这台主机需要两张网卡 一个为Nat模式 一个为仅主机模式

点击编辑虚拟机设置 点击添加网络适配器 选择仅主机模式

ens160

ens224  此时这里是不需要网关的

router中开启内核路由功能

此时是在关闭状态

开启路由功能

sysctl -p 刷新修改过的信息 让文件生效

3.LVS环境

4.web1 环境

5.web2环境

此时环境就已经配置完成了!

5.在lvs和rs中设置VIP

注意这里掩码应该为32位!

LVS:

web1:

web2:

配置完成后可以利用命令 (nmcli connection up lo)让其生效。


6.webserver进行vip不对外响应  

web1:

web2:

7.在lvs中配置策略

ipvsadm -A -t 192.168.0.200:80 -s wrr
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g   -w 1
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g   -w 2

8.在客户端进行访问

此时实验就已经完成啦!

七、lvs-算法

lvs 调度算法类型
ipvs scheduler :根据其调度时是否考虑各 RS 当前的负载状态被分为两种:静态方法和动态方法
静态方法:仅根据算法本身进行调度,不考虑 RS 的负载情况
动态方法:主要根据每 RS 当前的负载状态及调度算法进行调度 Overhead=value 较小的 RS 将被调度
lvs 静态调度算法
1 RR roundrobin 轮询 RS 分别被调度,当 RS 配置有差别时不推荐
2 WRR Weighted RR ,加权轮询根据 RS 的配置进行加权调度,性能差的 RS 被调度的次数少
3 SH Source Hashing ,实现 session sticky ,源 IP 地址 hash ;将来自于同一个 IP 地址的请求始终发往 第一次挑中的RS ,从而实现会话绑定。
4 DH Destination Hashing ;目标地址哈希,第一次轮询调度至 RS ,后续将发往同一个目标地址的请 求始终转发至第一次挑中的RS ,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商
lvs 动态调度算法
主要根据 RS 当前的负载状态及调度算法进行调度 Overhead=value 较小的 RS 会被调度
1 LC least connections (最少链接发)
适用于长连接应用 Overhead (负载值) =activeconns (活动链接数) x 256+inactiveconns (非活
动链接数)
2 WLC Weighted LC (权重最少链接)
默认调度方法 Overhead=(activeconns x 256+inactiveconns)/weight
3 SED Shortest Expection Delay,
初始连接高权重优先 Overhead=(activeconns+1+inactiveconns) x 256/weight 但是,当node1 的权重为 1 node2 的权重为 10 ,经过运算前几次的调度都会被 node2 承接。
4 NQ Never Queue ,第一轮均匀分配,后续 SED
5 LBLC Locality-Based LC ,动态的 DH 算法,使用场景:根据负载状态实现正向代理
6 LBLCR LBLC with Replication ,带复制功能的 LBLC ,解决 LBLC 负载不均衡问题,从负载重的复制到负载轻的RS

八、防火墙解决调度问题

(1)配置环境

1.在web1与web2中安装mod_ssl模块 让RS支持https

 yum install mod_ssl -y

重启一下服务
 systemctl restart httpd

查看端口
netstat -antlupe |grep http

web2:

web1:

(2)在LVS中配置策略

  ipvsadm -A -t 192.168.0.200:80 -s rr
 ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g 
 ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g 
 ipvsadm -A -t 192.168.0.200:443 -s rr
ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.20:443 -g 
 ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.10:443 -g

(3)问题呈现
http https 为例,当我们在 RS 中同时开放 80 443 端口,那么默认控制是分开轮询的,这样我们就出 现了一个轮询错乱的问题
当我第一次访问 80 被轮询到 RS1 后下次访问 443 仍然可能会被轮询到 RS1 上。

其中 加上-k之后  可以忽略证书

(4)防火墙上打标记解决轮询调度问题

pvsadm -C  清除之前设置的策略
iptables -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 66
ipvsadm -A -f 66 -s rr
ipvsadm -a -f 66 -r 192.168.0.10 -g 
 ipvsadm -a -f 66 -r 192.168.0.20 -g

(5)在客户机上测试一下

此时就已经解决了轮询调度的问题!

实验在此结束啦!

九、lvs-session会话问题解决

在我们客户上网过程中有很多情况下需要和服务器进行交互,客户需要提交响应信息给服务器,如果单
纯的进行调度会导致客户填写的表单丢失,为了解决这个问题我们可以用 sh 算法,但是 sh 算法比较简单 粗暴,可能会导致调度失衡。
解决方法:
小结一下:
在做这些实验时遇到了一些问题在这里将遇到的问题总结一下
1.在做DR时在客户端进行访问时80端口拒绝
有两个原因 一个先检查自己是否把所有主机的防火墙都关闭掉了!
第二个原因就是 RS 上的httpd服务没有启动!
讲解到这里就结束啦!!!!!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值