LVS集群

集群

集群:nginx四层和七层+动静分离

集群的概念

为解决某

集群的目的就是为了解决系统的性能瓶颈。

早期是垂直扩展:向上扩展,增强单个机器的性能。简单来说就是升级硬件。但是升级硬件是有瓶颈的。(业务方向,垂直扩展已经不提及了)

水平扩展:向外扩展,增加设备。并行的运行多个服务,通过网络和算法来调度服务分配的问题。

集群的类型

1、 负载均衡集群:LB (loab blance) 多个主机组成,每个主机只承担一部分请求。靠负载均衡的算法来实现。

2、 高可用集群:HA (high availiablity)避免 SPOF (single point of failuer 也就是单点故障) 系统当中有一部分组件出现故障,可以保证整个系统继续运行。 主从---同步(某些特定服务需要这个概念)---负载均衡

3、 HPC(high-performance conputing) 快速转发,快速响应。

集群的可靠性指标

MTBF(mean time between failure) :系统在正常运行期间无故障的平均时间,一般用小时或者天数来表示。MTBF的值越高系统的可靠性就越高,出现故障的概率也越小

MTTR:系统从发生故障到恢复正常运行的平均时间,一般也是用小时或者天数表示。MTTR值越小,说明系统恢复故障的能力越强。

A:系统的可靠性指标。A值约高约好

运算方式

A = MTBF /(MTBF+MTTR)

集群响应时间

99.9% 1年=365天=8760小时 99.9=8760*0.1%=8.76小时

停机时间

计划内停机:预定时间内的维护或者检修时间。时间是自定义的。

计划外停机:运维人员主要关注的就是计划外。7*24小时

发版期

设计集群时需要考虑的一些原则

1、 可扩展性:集群要有随时可以添加或者删除设备的能力。动态的扩缩容

2、 可靠性:集群中如果有节点发生故障。可以快速检测并自动切换。

3、 负载均衡:合理的分配每台服务器的负载。避免单个节点过载。影响整体的性能。

4、 可维护性:能够方便的进行配置,部署、维护、监控。降低成本

5、 安全性(可能用不上):防止恶意的攻击,以及数据泄密。数据丢失。

6、 易用性:相关的工作人员,可以方便进入集群,能够快速的开发,部署,测试等等。

LVS集群

LVS(LINUX virtual server):是一个部署在Linux系统通过内核层面实现负载均衡的软件。

开发者:章文嵩 发起的开源项目

主要作用:多个后端服务器组成的一个高可用,高性能,负载均衡的高性能集群。通过负载均衡的算法将客户端请求发送到后端服务器。

阿里的SLB(server load balance):基于LVS+keepalived实现的。

LVS集群当中的术语

vs(virtual server):LVS服务的逻辑名称,外部访问LVS集群时提供的一个虚拟ip和端口。

DS(Director server):LVS集群当中的主服务器,也叫调度器,是整个LVS集群的核心。接受客户端的请求转发到后端RS

RS(Real server):LVS集群后端真实服务器的ip,接收到了DS的请求之后,返回响应结果。

CIP(client ip):客户端的ip地址

VIP(virtual ip):对外提供访问的统一虚拟IP地址。

DIP(Director ip):调度器在LVS内部使用的IP地址。用于和真实服务器进行通信。

RIP:后端真实服务器的IP地址。

LVS访问的大概流程

1、 客户端访问都是访问VIP

2、 DS调度器接收到请求,根据算法选择好后端服务器(RS)把请求发送给RS

3、 RS处理请求后并将响应发送到DS调度器

4、 DS把RS的响应包装成自己的响应,发送到客户端

个特定的问题将多个计算机组合起来形成一个单系统

客户端既不知道请求的真实服务器,也不知道响应的服务器是谁

LVS的负载均衡方式

NAT

DR

TUN

其中NAT和DR是最常用的方式

NAT模式

NAT模式是最常用的LVS负载方式之一

NAT的作用是地址转换

1、 在调度器上配置双网卡,一个指内,一个指外

2、 配置一个可以和公网进行通信的VIP

3、 配置转发策略,如果访问公网的VIP就会把请求的数据转发到后台的RS。请求的格式是报文。调度器会修改请求的目标IP地址和端口(12.0.0.1:80 20.0.0.20:80)

4、 RS处理完请求之后响应客户端,先到调度器,调度器进行地址转换,把内网地址转换成公网地址。最后响应调度器给用户。 20.0.0.20:80 ---- 调度器 ---- nat地址转换 ----- 12.0.0.1:80 ---- 客户端

数据请求进入调度器做的请求报文中ip地址的修改

数据响应进入调度器,根据NAT配置进行地址转换

进入是改请求报文。出去是地址转换

调度器的内网IP地址和真实服务器的IP地址要在同一网段。

nat对于客户端来说请求地址始终不变,客户端不需要修改任何配置。转发由调度器通过算法来完成,后端服务器只管接受响应。也不需要修改任何配置。

缺点:可能会出现性能损失和单点故障

DR模式

DR:也是最常用的lvs负载方式,DR DIRECT ROUTING 直接路由模式。负载均衡器lvs调度器,只负责请求和转发到后端的真实服务器,但是响应结果,由后端服务器直接转发给客户端,不需要进行调度器处理。

可以减轻lvs调度器的负担,提高了系统的性能和稳定性。

好处是:性能高。而且可以配置VIP地址的高可用。不存在单点故障。

DR模式的数据流向

LVS集群_第1张图片

LVS-DR模式的工作原理

1、 客户端发送请求到vip

2、 LVS的调度器接受请求后,根据算法选择一台后端的真实服务器,请求转发到后端RS,请求报文的目的MAC地址。修改成后端真实服务器的MAC地址。然后转发。

3、 后端真实服务器接受请求,处理完成之后,由于后端服务器直接把响应结果转发给客户端,响应报文中的目的MAC地址修改。直接把响应报文转发到客户端。

4、 调度器,后端真实服务器都有vip地址,调度的地址和后端真实服务器在同一网段。

工作流程图:

LVS集群_第2张图片

总结:MAC地址转发

DR模式的特点

1、 调度器的IP和真实服务器的ip必须在同一个物理网络中

2、 真实服务器的ip地址可以是私有地址,也可以是公网地址。

如果配置的是公网,那就可以通过互联网可以直接访问RIP。(一般不配置为公网)

3、 调度器只作为入口,但是不做网关。(不涉及转发数据包)要把服务器的转发功能关闭

4、 后端真实服务器的网关也不能指向调度器。真实服务器的数据包不允许经过调度器。

5、 后端真实服务器上,基于LO接口配置vip的ip地址

ARP协议:网络层协议,将IP地址解析为物理MAC地址。 ARP请求:主机A 主机B

LVS集群_第3张图片

ARP请求的核心:解决局域网内部的通信。ip地址和MAC地址映射。

DR模式的调度器和后端服务器都在一个网段中,通过ARP请求实现局域网内部通信

LVS集群_第4张图片

VIP:表示后端的真实服务器保证调度器和后端服务器之间的通信,保证请求可以正确的转发到后端服务器实现高可用和故障转移。

问题1:由于调度器和后端真实服务器都有相同的VIP地址,导致响应冲突,ARP通信紊乱。

答:对真实服务器进行处理,真实服务器不响应针对VIP的ARP请求。

VIP地址使用LO的虚拟地址:arp_ignore=1 (在节点服务器上配置)

后端的真实服务器只响应目的ip为本地ip,也就是RIP。后端服务器的真正IP地址。ens33网卡提供的地址

问题2:返回报文使用的源地址还是VIP地址,调度器也是VIP怎么把响应返回到客户端不经过调度器呢

答:对后端真实服务器做一个内核参数的优化:arp_announce=2 系统不使用ip数据包的源地址,来设置ARP的请求。真实的物理网卡地址。

LVS集群_第5张图片

如何实现DR模式的负载均衡

20为调度器

25web集群1

26web集群2

30 nfs

VIP地址20.0.0.100

客户端随机

实验流程:

关闭四台机器的防火墙和安全机制

配置20调度器主机

modprobe ip_vs

yum -y install ipvsadm

ifconfig ens33:0 20.0.0.100/24
#配置调度器vip地址

vim /etc/sysctl.conf
#调度器的内核优化

net.ipv4.ip_forward = 0
#关闭服务器作为网关的转发功能
net.ipv4.conf.all.send_redirects = 0 
#控制是否发送ICMP的重定向消息,禁止重定向
net.ipv4.conf.default.send_redirects = 0 
#静止默认网络接口,就是调度器的网卡,发送ICMP的重定向消息
net.ipv4.conf.ens33.send_redirects = 0
#指明网卡设备,ens33不发送重定向消息

LVS集群_第6张图片

sysctl -p 
#立即生效

ipvsadm -A -t 20.0.0.100:80 -s rr 
ipvsadm -a -t 20.0.0.100:80 -r 20.0.0.25:80 -g
ipvsadm -a -t 20.0.0.100:80 -r 20.0.0.26:80 -g
#设置配置策略

ipvsadm-save > /etc/sysconfig/ipvsadm
#保存

systemctl restart ipvsadm

配置30nfs主机

mkdir /opt/kgc
mkdir /opt/benet

vim /etc/exports

/opt/kgc 20.0.0.0/24(rw,sync)
/opt/benet 20.0.0.0/24(rw,sync)

chmod 777 kgc benet

LVS集群_第7张图片

LVS集群_第8张图片

echo "this is kgc" > kgc/index.html

echo "this is benet" > benet/index.html

#页面创建完毕

到25和26设置访问页面

配置25 web1主机

#启动nginx和rpcbind和nfs

showmont -e 20.0.0.30

mount 20.0.0.30:/opt/kgc /usr/local/nginx/html/

#挂载

curl 20.0.0.25 查看一下

LVS集群_第9张图片

cd /etc/sysconfig/network-scripts/

cp ifcfg-lo ifcfg-lo:0 

vim ifcfg-lo

LVS集群_第10张图片

route add -host 20.0.0.100 dev lo:0
#把vip的地址绑定到lo:0 作为lvs的vip地址。标识。告诉调度器,进行转发请求的ip地址寻址。

vim ets/sysctl.conf
#内核优化

net.ipv4.conf.lo.arp_ignore = 1 
#设置lo接口忽略来自任何接口的ARP请求
net.ipv4.conf.lo.arp_announce = 2
#设置lo接口仅会响应本地的IP地址,其他的接口ARP请求,全部忽略
net.ipv4.conf.all.arp_ignore = 1
#所有接口忽略来自任务接口的ARP请求
net.ipv4.conf.all.arp_announce = 2
#所有接口仅会响应本地的IP地址的ARP请求,其他的接口的ARP请求全部忽略

LVS集群_第11张图片

sysctl -p

配置26

配置相同

重启nginx服务

mount 20.0.0.40:/opt/benet /usr/local/nginx/html 挂载

LVS集群_第12张图片

LVS集群_第13张图片

内核优化

net.ipv4.conf.lo.arp_ignore = 1 
#设置lo接口忽略来自任何接口的ARP请求
net.ipv4.conf.lo.arp_announce = 2
#设置lo接口仅会响应本地的IP地址,其他的接口ARP请求,全部忽略
net.ipv4.conf.all.arp_ignore = 1
#所有接口忽略来自任务接口的ARP请求
net.ipv4.conf.all.arp_announce = 2
#所有接口仅会响应本地的IP地址的ARP请求,其他的接口的ARP请求全部忽略

sysctl -p  
#立即生效

使用客户机40访问

curl 20.0.0.100

LVS集群_第14张图片

DR模式总结

DR模式的核心:响应客户端由后端的真实服务器完成。不需要经过调度器完成。

vip地址:调度器和后端服务器都要有vip地址

vip地址的作用: 1、 暴露访问地址 2、 调度器转发请求的标识 3、 调度器和后端服务器之间进行vip地址进行通信 4、 高可用(DR模式)

其他所有的请求和响应都被禁用。

TUN模式

TUN:隧道模式。使用隧道协议把请求转发到后端服务器。需要在后端服务器配置隧道协议。

请求VPN的IP地址需要单独购买所以用的比较少

设置LVS

ipvsadm工具:管理ipvs内核模块的命令行工具,配置和管理LVS集群

-A:添加虚拟服务器

-D:删除整个虚拟服务器

-s:指定负载调度算法

算法

静态调度(固定调度)

rr 轮询

wrr加权轮询

dh目的地址hash

sh源地址hash

dh和sh都是根据ip地址查找静态hash表,获取需要真实的RS地址

动态调度: lc:最小连接数调度

wlc:加权最小连接数 权重高的转发的就多,为了避免性能的瓶颈,在跟上最小连接数分配,可以把请求往连接数量较小的服务器继续转发。

lblc:基于地址的最小连接数调度。将来自同一个目的地址的请求分配给RS,如果这台服务器尚未满负荷,就会把请求分配给连接数最小的RS,而且在下一次转发时会优先考虑这台RS

-a:添加真实服务器

-d:删除真实服务器

-t:指定VIP地址的端口号

-r:指定RIP的端口号

-m:表示使用net模式

-g:表示使用DR模式

-i:表示使用TUN隧道模式

-w:设置真实服务器的权重

-p 60:设置连接保持的时间是60秒(默认不带需要指定)

-ln:以数字和列表的形式查看LVS的配置信息

modprobe ip_vs

核心

集群的扩展方式:水平扩展

集群的类型:负载均衡和高可用

集群的可靠性指标:MTBF MTTR 最低也是99%

设计集群的原则:可靠性 可拓展性 负载均衡

非计划外停机时间:主要的工作职责排障和解决问题

LVS集群中的术语:vs -- VIP DS --- DIP RS --- RIP

访问流程

LVS负载均衡的方式:NAT模式 DR模式

1、 LVS的负载均衡的工作方式

三种:NAT DR TUN 最常用的就是DR模式

NAT模式优点:配置简单。 缺点:性能瓶颈。 真实服务器:ANY。 支持网络模式:私网。 后端真实服务器数量:low(最多10-20台)

DR模式的优点:性能最好。 缺点:调度服务器和后端真实服务器不能跨网段的得在一个网段之间。 真实服务器:NOARP(请求只能到真实服务器) 支持网络模式:后端服务器既可以是私网也可以是公网 后端真实服务器数量:100台

TUN 公司不用

2、 LVS调度器中常用的算法

负载均衡策略:rr wrr dh sh

动态调度:wlc lc lb lc

工作原理:NAT和DR的工作原理

NAT的工作原理总结:

1、 在调度器上配置双网卡,一个指内,一个指外

2、 配置一个可以和公网进行通信的VIP

3、 通过配置转发策略,访问公网的VIP会把请求转发到后台的RS。请求的格式是报文。调度器会修改请求的目标IP地址和端口(12.0.0.1:80 20.0.0.20:80)

4、 RS处理完请求后响应客户端,先到调度器,调度器进行地址转换,把内网地址转换成公网地址。最后响应调度器给用户。 20.0.0.20:80 ---- 调度器 ---- nat地址转换 ----- 12.0.0.1:80 ---- 客户端

客户端进入是改请求报文。出去是地址转换 转发由调度器通过算法来完成,后端服务器只管接受响应。也不需要修改任何配置。

DR的工作原理总结:

1、 客户端发送请求到vip

2、 LVS的调度器接受请求后,根据算法选择一台后端的真实服务器,请求转发到后端RS,请求报文的目的MAC地址。修改成后端真实服务器的MAC地址。然后转发。

3、 后端真实服务器接受请求,处理完成之后,由于后端服务器直接把响应结果转发给客户端,响应报文中的目的MAC地址修改。直接把响应报文转发到客户端。

4、 调度器,后端真实服务器都有vip地址,调度的地址和后端真实服务器在同一网段。

客户端进入时请求调度器的VIP地址,通过LVS交换器配置的算法把请求的目的MAC地址,修改为后台的真实服务器的MAC地址。实现转发。后端服务器处理完成后,会修改响应报文中的目的MAC地址,之间转发到客户端。

你可能感兴趣的:(lvs,服务器)