LVS集群

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

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

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

垂直扩展:向上扩展,增加单个机器的性能,升级硬件。硬件升级是有瓶颈的

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

集群的类型:

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

高可用集群:(HA high availiabity) 避免SPOF(single point of failuer)单点故障。系统当中一部分组件出现故障,可以保证整个系统继续运行

主从——同步(某些特定的服务需要)——负载均衡

HPC:high-performance computing 快速转发,快速响应

集群的可靠性指标:

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小时

停机时间(故障时间):

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

计划外停机:运维人员关注的就是计划外

发版期

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

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

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

3.负载均衡:合理的分配负载,避免单个节点过载,影响整体性能。

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

5.安全性:防止恶意的攻击,以及数据泄密和数据丢失

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

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模式

是最常用的lvs负载方式之一

在NAT方式下,LVS会将来自客户端的请求报文的目标IP地址和端口修改为LVS的IP地址和端口,
并将报文转发至后端的服务器。
后端服务器返回的报文经过LVS后,LVS会将目标IP地址和端口修改为原始的客户端IP地址和端口,
并将报文返回给客户端。

这种方式的好处是,对客户端来说,请求的目标地址始终不变,因此无需修改客户端的配置。
而且,由于LVS会修改请求和响应的目标地址和端口,因此后端服务器无需修改任何配置。
同时,这种方式也存在一些缺点,比如性能损失和单点故障的问题。

地址转换

LVS集群_第1张图片

NAT模式:

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

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

3.配置转发策略,如果访问VIP,就会把请求的数据转发到后台的RS

请求的格式是报文,调度器会修改请求的目标ip地址和端口

4.RS处理完请求之后响应客户端,先到调度器,调度器进行地址装换,,把内网地址转换成公网地址,响应给用户

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

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

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

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

性能损失和单点故障

NAT模式的工作流程:

客户端发送请求:当客户端发送请求时,请求首先到达负载均衡器。

负载均衡器接收请求:负载均衡器接收到请求后,根据预先配置的负载均衡算法(如轮询、加权轮询、最小连接数等)
选择一个后端服务器来处理该请求。

源地址转换:负载均衡器通过NAT技术将请求的源地址更改为自己的地址,并将请求转发给被选中的后端服务器。

后端服务器处理请求:被选中的后端服务器接收到请求后进行处理,并生成响应。

目的地址转换:负载均衡器接收到后端服务器的响应后,将响应的目的地址更改为原始客户端的地址,并将响应发送回客户端。

在这个过程中,LVS服务器使用了iptables中的nat表的prerouting链来实现地址转换,
将请求报文和响应报文中的IP地址进行了改写,从而实现了负载均衡。
 

NAT实验:

Nat模式的部署方式:

负载调度器:

配置双网卡:192.168.233.10(内网) 12.0.0.1(ens36)

二台后端web真实服务器:192.168.233.20 192.168.233.30

一台NFS共享服务器:192.168.233.40

客户端:192.168.120.70

LVS集群_第2张图片

先安装ipvsadm*软件

创建虚拟服务器

查看策略

ipvsadm -ln

ipvsadm -A -t 12.0.0.1:80 -s rr

创建VIP地址 -s指定调度算法 rr

添加服务器节点

ipvsadm -a -t 12.0.0.1:80 -r 192.168.120.30:80 -m

删除服务器节点

ipvsadm -d -r 192.168.120.30:80 -t 12.0.0.1:80

删除整个虚拟服务器

ipvsadm -D -t 12.0.0.1:80

以上命令操作完必须先保存才能刷新否则会报错

保存策略

ipvsadm-save >/etc/sysconfig/ipvsadm

for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done

客户端:192.168.120.10

NFS服务器:192.168.120.70

两台后端web真实服务器:192.168.120.30 192.168.120.40

配置NFS服务器

关闭防火墙

systemctl stop firewalld.service

setenforce 0

安装nfs软件

 yum install nfs-utils rpcbind -y

在opt目录下创建两个目录

mkdir /opt/kgc /opt/benet  

赋权

chmod 777 /opt/kgc/ /opt/benet/

创建站点文件

echo 'this is kgc !' > /opt/kgc/index.html

echo 'this is benet !' > /opt/benet/index.html

设置共享策略

vim /etc/exports

/opt/kgc 192.168.120.0/24(rw,sync)

/opt/benet 192.168.120.0/24(rw,sync)

发布服务

exportfs -rv

Web服务器30:

关闭防火墙

systemctl stop firewalld.service

setenforce 0

安装nfs服务

 yum install nfs-utils rpcbind -y

接收服务

showmount -e 192.168.120.70

挂载

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

刷新

systemctl restart nginx.service

修改网卡

vim /etc/sysconfig/network-scripts/ifcfg-ens33

LVS集群_第3张图片

Web服务器40:

关闭防火墙

systemctl stop firewalld.service

setenforce 0

安装nfs服务

 yum install nfs-utils rpcbind -y

接收服务

showmount -e 192.168.120.70

挂载

mount 192.168.120.70:/opt/benet /usr/local/nginx/html/

刷新

systemctl restart nginx.service

修改网卡

vim /etc/sysconfig/network-scripts/ifcfg-ens33

LVS集群_第4张图片

调度器配置:

关闭防火墙

systemctl stop firewalld.service

setenforce 0

加载内核模块

modprobe ip_vs

cat /proc/net/ip_vs

清空策略

iptables -F

添加策略

iptables -t nat -A POSTROUTING -s 192.168.120.0/24 -o ens36 -j SNAT --to 12.0.0.1

查看策略

iptables -nL -t nat

LVS集群_第5张图片

安装软件:

yum install ipvsadm* -y

指定IP地址 外网的入口  -s rr  轮询

ipvsadm -A -t 12.0.0.1:80 -s rr

先指定虚拟服务器再添加真实服务器地址,-r:真实服务器地址 -m指定nat模式

ipvsadm -a -t 12.0.0.1:80 -r 192.168.120.30:80 -m

ipvsadm -a -t 12.0.0.1:80 -r 192.168.120.40:80 -m

保存配置文件

ipvsadm-save >/etc/sysconfig/ipvsadm

刷新

systemctl restart ipvsadm.service

先添加一个新网卡

LVS集群_第6张图片

配置网卡

vim /etc/sysconfig/network-scripts/ifcfg-ens33

LVS集群_第7张图片

vim /etc/sysconfig/network-scripts/ifcfg-ens36

LVS集群_第8张图片

刷新

systemctl restart network

开启服务器的转发功能

vim /etc/sysctl.conf

net.ipv4.ip_forward = 1

即刻生效

sysctl -p

结果显示:

DR:直接路由模式,请求由调度器完成,但是响应客户端由真实服务器直接响应,不需要通过调度器。

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

LVS-DR模式的工作原理:

1.客户端发送请求到vip

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

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

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

DR模式的特点:

  1. 调度器的ip和真实服务器的ip必须在同一个物理网络中
  2. 真实服务器的ip地址可以是私有地址,也可以是公网地址。如果配置的是公网,通过互联网可以直接访问RIP
  3. 调度器只做为入口,但是不做网关。要把服务器分转发功能关闭
  4. 后端真实服务器的网关也不能指向调度器,真实服务器的数据包不允许经过调度器
  5. 后端真实服务器上,基于LO接口配置VIP的IP地址

ARP协议:网络层协议,将IP地址解析为物理mac地址。

ARP请求:主机A和主机B

LVS集群_第9张图片

ARP解决局域网内部的通信,IP地址和MAC地址映射

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

LVS集群_第10张图片

问题1:

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

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

vip地址使用LO的虚拟地址:arp_ignore=1

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

问题2:

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

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

LVS集群_第11张图片

如何实现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集群_第12张图片

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集群_第13张图片

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/
#挂载

cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0 
vim ifcfg-lo

LVS集群_第14张图片

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请求全部忽略

sysctl -p

配置26

配置相同

重启nginx服务

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

LVS集群_第15张图片

LVS集群_第16张图片

cp ifcfg-lo ifcfg-lo:0

vim ifcfg-lo:0

ifup ifcfg-lo:0

内核优化
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访问

LVS集群_第17张图片

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

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

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

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

tun:隧道协议,把请求转发后端服务器,需要在后端服务器配置隧道协议

设置lvs:

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

-A:添加虚拟服务器

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

-s:指定负载调度的算法:rr轮询

                       wrr加权轮询

                       dh目的地址hash 根据IP地址查找静态hash表,获取需要真

                           实的RS的地址

                       sh原地址hash

动态调度:

lc:最小连接数调度

wlc:加权最小连接数调度  

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

Lblc:基于地址的最小连接数调度

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

-a:添加真实服务器

-d:删除真实服务器

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

-r:指定RIP的端口号

-m:表示使用nat模式

-g:表示使用DR模式

-i:表示使用TUN模式

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

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

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

上述总结:
集群的扩展方式:水平扩展

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

集群的可靠性指标: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)