目录
一、集群:
1、集群的目的:
2、集群的类型:
3、集群的可靠性指标:
4、设计集群时需要考虑的原则:
二、lvs集群:
1、lvs集群中的术语:
2、lvs访问的大致流程:
三、lvs的负载均衡方式:NAT、DR、TUN
1、NAT模式
2、DR模式:直接路由模式
3、TUN模式:隧道协议
4、如何设置lvs:
1、lvs中的调度算法(负载均衡算法)
三、LVS-NAT模式配置:
四、LSV-DR模式配置:
是未解决某个特定的问题将多个计算机组合起来之后形成一个单系统
如:nginx四层和七层+动静分离
为了解决系统的性能瓶颈
垂直扩展:向上扩展,增加单个机器的性能。也就是升级硬件。硬件升级是有瓶颈的,水平扩展应运而生
水平扩展:向外扩展,增加设备,并行的运行多个服务,通过网络和算法
负载均衡集群:LB:Load Blance多个主机组成,每个主机只承担一部分访问请求。靠负载均衡算法来实现
高可用集群:HA:High Availablity 避免SPOF(Single point of failuer)单点故障。系统中有一部分组件出现故障,可以保障整个系统继续运行。
高可用涉及主和从
现在都是复杂均衡+高可用,也就是既能满足主从也能满足同步还能实现负载均衡
HPC:High-Proformance computing 高性能集群,快速转发,快速响应
MTBF:系统在正常运行时间无故障的平均时间,一般用小时或者天数来表示。MTBF值越高,系统的可靠性越高,出现故障的概率也越小。
MTTR:系统从发生故障到恢复正常运行的平均时间,一般用小时或者天数表示。MTTR值越小,系统恢复故障的能力越强
A:系统的可靠性指标,A值越高越好
如何计算:A=MTBF/(MTBF+MTTR)
停机时间:
计划内停机:指的是预定时间内的维护或者检修时间。是自定义的
计划外停机:运维人员关注的就是计划外。
以上原则跟运维有关系
lvs:linux virtual server 是一个部署在linux系统上,通过内核层面实现负载均衡的软件。
主要作用:多个后端服务器组成一个高可用,高性能,复杂均衡的高性能集群。通过负载均衡的算法将客户端请求发送到后端服务器
阿里的SLB就是基于lvs+keepalived实现的
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):调度器在ivs内部使用的IP地址。用于和真实服务器进行通信
rip:后端真实服务器的IP地址
这种模式下,客户端既不知道请求的真实服务器,也不知道响应的服务器是谁
其中NAT和DR是最常用的方式
NAT模式是最常用的lvs负载均衡方式之一
NAT是地址转换的方式
实验图:
NAT模式:
请求的格式:报文。调度器会修改请求的目标IP地址和端口
192.168.233.30:80-------调度器---------nat转换----------------12.0.0.10:80-------------客户端
数据请求进入调度器做的是请求报文中IP地址的修改
数据响应进入调度器,根据NAT配置进行地址转换
进入请求报文,出去地址转换
调度器的内网IP地址和rs真实服务器的IP地址要在同一网段。否则要利用路由器转发
NAT:对于客户端来说请求地址始终不变,客户端不需要修改任何配置。换发由调度器通过算法完成,后端服务器只管接收响应,也不需要修改任何配置。
缺点:可能会造成性能损失和单点故障
请求由调度器完成,但是响应客户端由rs真是服务器直接响应,不需要通过调度器。
好处是性能高:而且可以配置代理地址vip的高可用。不存在单点故障。
使用隧道协议把请求转发到后端服务器,需要在后端服务器配置隧道协议
ipvsadm工具:管理ipvs内核模块的命令行工具,可用于配置和管理lvs集群。
ipvsadm
-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:指定rid(real server ip)的端口号
-m:表示使用的是nat模式
-g;表示使用DR模式
-i:表示使用隧道模式
-w:设置真实服务器的权重
-p 60:设定链接保持的时间,单位秒(默认不保持需要指定)
-ln:以数字以及列表的形式查看lvs的配置信息
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
nat模式的部署方式:
负载调度器:配置双网卡:20.0.0.21(内网) 12.0.0.1(ens36)
两台后端web真实服务器:20.0.0.22 20.0.0.23
一台NFS共享服务器:20.0.0.3010
客户端:20.0.0.40
先关防火墙:
配置共享服务:20.0.0.30
安装软件
yum install nfs-utils rpcbind -y #安装nfs服务
vim /etc/exports
#设置共享策略
exportfs -rv #发布服务
启动NFS网络共享时注意:要先启动网络再启动服务
配置两个后端服务器RS1、RS2:
先检查目录是否共享:
showmount -e NFS主机ip
安装nginx
之后挂载nginx访问目录
两个共享目录分别挂载后端服务器访问目录:
打开两边nginx服务
用curl访问一下看是否正常
配置RS1、RS2网卡
将DNS解析注释
内网网关要和调度器的内网网卡ens33的IP地址一样
(路由器离终端最近的点,IP地址配置网段的网关)
配置完网卡之后一定要重启网卡
systemctl restart network
调度器配置:
配置网卡:
网卡的IP地址要和距离最近的网段的网关一样
先ifconfig查看新建的网卡名(ens36),再去网卡配置
cd /etc/sysconfig/network-scripts
cp -a ifcfg-ens33 ifcfg-ens36
重启网卡
配置防火墙策略:
先安装iptables和ipvsadm:
yum -y install iptables-services.x86_64 iptables
yum -y install ipvsadm*
用iptables配置nat转换:
iptables -nL -t nat
#查看策略
iptables -t nat -F
#清空nat策略
iptables -t nat -A POSTROUTING -s 192.168.233.0/24 -o ens36 -j SNAT --to 12.0.0.1
#添加策略
iptables -nL -t nat
#查看策略
modprobe ip_vs
cat /proc/net/ip_vs
#加载内核模块
配置ipvsadm:
ipvsadm -A -t 12.0.0.1:80 -s rr
#指定IP地址 外网的入口 -s rr 轮询
ipvsadm -a -t 12.0.0.1:80 -r 192.168.233.61:80 -m
#先指定虚拟服务器再添加真实服务器地址,-r:真实服务器地址 -m指定nat模式,两个都配置
ipvsadm -a -t 12.0.0.1:80 -r 192.168.233.62:80 -m
ipvsadm -ln
#查看配置情况
ipvsadm-save >/etc/sysconfig/ipvsadm
#配置完 保存配置文件
systemctl restart ipvsadm.service
#重启服务
vim /etc/sysctl.conf打开转发功能
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
#开启服务器的转发功能
sysctl -p刷新
打开新的机器,做客户端
重启网卡
虚拟机浏览器访问
12.0.0.1
lvs-DR模式:是最常用的lvs负载方式,DR DIRECT ROUTING 直接路由模式
负载均衡器lvs调度器,只负责请求和转发到后端的真实服务器,但是响应结果由后端服务器直接转发给客户端,不需要经过调度器处理,减轻lvs调度器的负担,提高性能和稳定性
lvs-DR模式的工作原理:
是根据mac地址进行转发数据,是二层转发
vip的作用:代理
DR模式的特点:
ARP协议:(网络层协议)将ip地址解析为mac地址。
ARP请求:主机A和主机B
ARP核心:解决局域网内部的通信。IP地址和mac地址之间的映射
DR模式的调度器和后端服务器都在一个网段中,通过ARP请求实现局域网内部通信
问题一:
由于调度器和后端服务器都有相同的vip地址,导致响应冲突,ARP通信紊乱。
vip100和RIP 20会冲突,不知道响应哪个
解决方案:
要对后端真实服务器进行处理,真实服务器不响应针对vip的ARP请求
vip地址使用LO的虚拟地址:arp_ignore=1
后端真实服务器只响应目的ip为本地ip,也就是RIP,后端服务器的真实IP地址。ens33网卡提供的地址。
问题二:
返回报文使用的源地址还是vip地址100,调度器也是vip地址100。怎么把响应返回到客户端不经过调度器呢?
解决方案:
要对后端真实服务器做一个内核参数的优化:arp_announce=2 系统不使用ip数据包的源地址来设置ARP的请求,而是用真实的物理网卡地址。
发送:12.0.0.10(cip)----20.0.0.100(vip)---20.0.0.20(RIP)
返回:20.0.0.20(RIP)----12.0.0.10(cip)
实验过程:
如何实现DR模式的负载均衡:
四台:
vip虚拟地址:20.0.0.100
调度器:20.0.0.22
后端服务器web集群:
web集群1:20.0.0.21
web集群:20.0.0.23
nfs机器:20.0.0.30
客户端:随机选择
先关闭防火墙
调度器:
现在调度器上加载ipvs内核:
安装ipvsadm
创建虚拟网卡:
ifconfig ens33:0 20.0.0.100/24
vim /etc/sysctl.conf
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
sysctl -p
调度器的内核优化
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不发送重定向消息
ipvsadm:
nfs服务端共享服务:
systemctl start rpcbind
systemctl start nfs
exportfs -rv
去两个后端服务器:
安装nginx
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo ifcfg-lo:0
DEVICE=lo:0
IPADDR=20.0.0.100
NETMASK=255.255.255.255
ONBOOT=yes
重启网卡
ifup lo:0
route add -host 20.0.0.100 dev lo:0
把vip的地址绑定到lo:0,作为整个lvs的vip地址。标识,告诉调度器进行转发请求的IP地址寻址
vim /etc/sysctl.conf
只有请求到后端服务器真实ip的响应才会接收,其他的一律不接受
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
~
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
重启
两边后端服务器操作相同,nginx都要启动
用客户机访问vip20.0.0.100
DR模式:vip只做表示代理和转发请求到后端服务器还有高可用,其他一律没用
总结:
DR模式核心:响应客户端是后端真实服务器来完成,不需要经过调度器二次处理
vip地址:调度器和后端服务器都要有vip地址。
作用:
1、暴露访问地址
2、调度器转发请求的标识
3、调度器和后端服务器之间进行通信
4、基于DR模式的高可用
只有以上四个作用,其他所有的请求和响应都被禁用。
lvs的负载均衡算法设置:
ipvsadm -In
IP Virtual Server version 1.2.1(size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.233.100:80 wrr
-> 192.168.233.20:80 Route 1 1 0 0
-> 192.168.233.30:80 Route 1 1 0 0
TCP 192.168.233.100:80 wrr
表示VIP地址,wrr 负载均衡器的调度算法
-> 192.168.233.20:80 Route 1 0 0
-> 192.168.233.30:80 Route 1 0 0
指向后端的真实服务器
Forward: 负载均衡算法和负载均衡方式。route 就是DR模式
ACtiveConn:活跃连接,表示调度器正在处理的活动连接数,表示这些链接正在进行传输数据或者正在进行交互。
InActConn:表示当前处于非活动状态的连接数。已建立连接但是目前没有数据传输,第二个
可以修改VIP的调度算法:
ipvsadm -E -t 192.168.233.100:80 -s wrr
修改策略的轮询权重:
ipvsadm -e -t 192.168.233.100:80 -r 192.168.233,30:80 -w
换负载均衡算法:
修改完之后要先保存再重启
总结题:
1、lvs负载均衡的工作方式:
三种:NAT、DR、TUN最常用的就是DR模式
NAT模式:
优点:配置简单
缺点:性能瓶颈
真实服务器的要求:所有都可以作为真实服务器
后端服务器支持的网络模式:私网
能配置的真实服务器的数量:最多10-20台,超过性能下降
DR模式:
优点:性能最好(响应不走调度器直接到客户端)
缺点:调度服务器和后端真实服务器不能夸网段
真实服务器的要求:NO ARP(请求只能到真实服务器)
后端服务器支持网络:公网、私网
真实服务器数量:100台
TUN 公司不用(需要VPN隧道,要钱)
2、lvs调度器中常用的算法(负载均衡策略):
rr
wrr
dh
sh
wlc
lc
lblc