集群
集群(cluster)也称为群集,表示一群的意思,在服务器领域表示大量的服务器的集合体。
将各个主机组成集群,形成一个系统协调工作,其可扩展性、可用性、容量、性能都会有大规模的提升。
1.)企业级集群分类:LB HA HP 负载均衡实现方式和集群工作层次划分
1)负载均衡集群(LB,Load Balance)并发访问量
2)高可用集群(HA,High Availability)什么地方都可用,在任何时候都可以
3)高性能集群(HP,High Performance)把很多机器集合在一起, 性能增强
1、负载均衡集群(LB)
以提高应用系统的响应能力、尽可能处理更多的访问请求、减少延迟为目标,获得高并发、高负载(LB)的整体能力。LB负载分配依赖于主节点的算法,将来自客户机的访问请求分担给多个服务器节点。
2、高可用集群(HA)
以提高应用系统的可靠性、尽可能减少终端宕机时间为目标,确保服务的连续性,达到高可用(HA)的容错效果,例“故障切换”“双击热备”“多机热备”等都属于高可用群集技术。HA工作方式包括双工和主从两种模式。双工即所有节点同时在线;主从则只有主节点在线,但当出现故障时从才切换为主节点。
3、高性能集群(HP)
以提高应用系统的CPU运算速度、扩展硬件资源和分析能力为目标,获得相当于大型、超级计算机的高性能运算(HPC,High performance computing)能力。如“云计算”“网格计算”。高性能群集依赖于“分布式运算”、并行计算:通过专用硬件和软件将多个服务器的CPU、内存等资源整合在一起,实现大型、大型、超级计算机才具备的计算能力。
负载均衡集群实现方式
1)硬件方式:F5、A10、Citrix、NetScaler、array、梭子鱼、绿盟
2)软件方式:LVS、haproxy、nginx
负载均衡集群工作的层次划分
传输层:LVS,haproxy
应用层:haproxy、nginx、ats
2.)LVS集群
LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,已经被集成到Linux内核模块中。该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案,其体系结构如下图1所示,互联网用户从外部访问公司的外部负载均衡服务器,用户的Web请求会发送给LVS调度器,调度器根据预设的算法决定将该请求发送给后端的某台Web服务器。根据LVS工作模式的不同,真实服务器会选择不同的方式将用户需要的数据发送到用户。LVS工作模式分为NAT模式、TUN模式、以及DR模式。
1)LVS(Linux Virtual Server)工作在传输层,基于TCP和UDP进行调度工作。
2)工作方式:根据目标IP和端口转发到后端主机集群(服务器池)中某一台主机(如何转发请求,基于某种特定的算法)
3)LVS基于netfilter进行设计的。但是由于LVS有自己的会话表,可能会与iptables中会话表产生冲突,导致了二者无法完美并行。这样的后果就是会丧失部分安全功能。LVS运行时关闭iptabs
4)LVS由ipvsadm和ipvs 两个部分组成
ipvsadm是用户命令工具,用于管理LVS集群服务 ipvs是LVS的内核功能模块。
查看系统内核是否编译了LVS,以及支持的功能
grep -i 'IPVS' /boot/config-3.10.0-XXX.el7.x86_64
通常ipvs模块在Linux内核中被自动装载,若没有被装载,执行modprobe ip_vs进行装载,然后cat /proc/net/ip_vs 查看是否装载成功。
安装ipvsadm
yum install ipvsadm –y
LVS架构各个组成部分名词:
调度器:director ,DIP 负载均衡器 的ip
RS:real server,RIP 真实提供服务的服务器 ip
CIP:client IP客户端的ip
VIP:Director Virutal IP调度器的 连接外网 虚拟ip
DIP:Director IP调度器的 真实ip
LVS结构类型
1)lvs-nat
2)lvs-dr(direct routing)
3)lvs-tun
1.NAT模式: (LVS调度器即网关)
用户通过DNS解析到负载均衡设备上外网地址,LVS外网IP又称VIP(Virtual IP Address),用户将请求发送至VIP,LVS根据预设的算法选择后端的一台真实服务器,通过NAT的方式 (修改 目标IP与port)将数据请求包转发给真实服务器, --修改目标ip DNAT
真实的服务器将响应数据包 返回给LVS调度器,调度器在得到响应的数据包后通过NAT的方式(修改源ip 与port)将响应数据包发送回用户。--修改源地址ip SNAT
注意事项:①:RS应该和DIP都使用私网地址,并且RS网关须指向内网的ip地址DIP
②:请求和响应报文都要基于director转发
③:director支持端口映射
2.DR模式也叫直接路由模式,
LVS接收入站请求 (VIP端口等待连接)以及根据算法选出真实服务器,由后端真实服务器负责响应请求。DR模式要求调度器(DIP)与后端服务器在同一个局域网内 ,VIP地址在调度器与后端所有的真实服务器间共享 回应 客户端时会返回 调度器VIP 真实服务器的ip对外不可见 所以 把真实服务器的的源地址改为 调度器对外可见的VIP 真实服务器发送数据给客户端
(因为真实服务器 给客户端回应数据包时 需要设置源IP为VIP地址,目标IP为客户端IP, 这样客户端访问的是调度器的VIP地址,回应的源地址也是VIP地址)。
由于多台计算机设置相同的VIP地址,所以要求调度器的VIP地址是对外可见的,真实服务器的VIP对外是不可见的)
因此要求真实服务器的VIP地址必须配置在Non-ARP回环地址的网络设备上,不会向外广播自己的MAC及对应的IP地址。
调度器根据算法在选出真实服务器后,在不修改数据报文的情况下,将数据帧的MAC地址修改为选出的真实服务器的MAC地址,将该数据帧发给真实服务器。
负载均衡器 通过 交换机 和后台机器来
注意事项:
①:保证前端路由器将目标IP为VIP的请求报文发送给director
②:RS跟director必须在同一物理网络中
③:请求报文经由director调度,但响应报文一定不能经过director
④:不支持端口映射
⑤:RS网关不能指向director
3.tun模式:
数据发给调度器, 把选出的真实服务器 IP地址和端口 封装添加到报头 把数据包转发给 后台真实服务器 (所以要求服务器公网ip 来沟通) 一般在局域网架设集群
IP隧道(IP tunning)是一种数据包封装技术,可将原数据包封装并添加新的报头(包括新的源地址及端口、目标地址及端口),
实现将一个发往 目标为调度器VIP地址的数据包封装(修改目标地址为选择出来的真实服务器的IP地址及对应端口),之后通过隧道转发给后端的真实服务器(Real Server),
LVS(TUN)模式要求真实服务器可以直接与外部网络连接,真实服务器在收到请求数据包后直接给客户端主机响应数据。
注意事项:①DIP、RIP、VIP全是公网地址
②RS的网关不能指向DIP
③请求报文必须由director调度,响应报文必须不能经过director
④不支持端口映射
⑤RS的OS必须支持隧道功能
3.调度算法(lvs scheduler)
负载均衡集群进行调度,如何挑选后端RS进行调度?--->基于调度算法
静态方法:根据算法 本身进行调度
RR(轮询)、WRR(加权轮询)、SH(源地址hash,实现session保持)、DH(目的地址hash)
动态方法:根据算法 以及各个RS的当前负载状态 进行调度
LC(最小连接数)、WLC(加权最小连接)、SED(最短期望延迟)、NQ(永不排队)、LBLC、LBLCR
1)rr:轮询 rr 算法就是将外部请求顺序轮流分配到集群中的node 上,但不考虑每台node 的负载情况。
2)wrr:加权轮询 wrr 算法在rr 算法的基础上会考察每台node的负载情况,并尝试让负较轻的node 承担更多请求。 权重 能者多劳 node真实服务器 也叫节点
3)lc:最少连接算法可以让LVS 尝试把新的请求交给当前连接数最少的node ,直到此node 连接数不再属于最少为止。
4)wlc:加权最少连接 wlc 算法也有权重的干预。LVS 会根据每台node的权重并综合连接数控制转发行为。 连接数 权重
5)lblc:局部最少连接算法会加上针对源请求IP地址的路由估算,并尝试把请求发送到与源请求IP路由最近的node 上。此种方法一般用于远程或者是大规模的集群组。
来数据请求 调度器 计算路由 发送给 距离最短的 服务器节点(一个节点)
6)lblcr:带有复制的局部最少连接算法 lblcr 算法是在lblc 算法的基础上增加了一个node 列表,先依据lblc 算法计算出与源请求IP地址最近的一组node ,然后再决定把请求发送到最近一组中的最近的一台node 。
来数据请求 调度器 计算路由 发送给 最短的 一组 服务器节点 然后发送给最近的 一个服务器节点
若此node没有超载则将请求转发给这台node, 如果超载则依据”最少连接”原则找到最少连接的node并将此node 加入集群组中。并将请求转给此node。
7)dh:目标地址 散列算法,相当于随机。
8)sh:原地址 散列算法,相当于随机。
4.LB负载均衡集群的操作方法(LVS)
在一个ipvs主机中可以定义多个集群服务,一个集群服务中一个director至少应该能调度一个RS
ipvsadm用法
管理LVS集群服务新增和修改集群
ipvsadm -A |E -t|u service-address -s scheduler调度算法 service-addressip地址加端口
(-A 添加 -E 修改 -t 指定tcp -u 指定udp -s:指定调度算法)
service-address的形式:
如果是tcp为 -t ip:port
如果是udp为 -u ip:port
scheduler:调度算法,默认是wlc
例如:
ipvsadm -A -t 192.168.10.10:80 -s rr
添加VIP为192.168.10.10的集群服务,基于TCP协议,端口为80,调度算法为轮询
10.10对外可见的ip地址 调度器的虚拟IP地址 VIP (集群对外提供服务ip端口)
ipvsadm -E -t 192.168.10.88:80 -s wrr
修改VIP为192.168.10.88集群的调度算法为加权轮询
删除集群
ipvsadm -D -t|u|f service-address (-D 删除)
例如:
ipvsadm -D -t 192.168.10.88:80
删除VIP为173.16.16.88,并且端口为80的集群
ipvsadm -C清空所有集群规则:
管理服务器池中的RS
添加和修改
ipvsadm -a|e -t|u| service-address -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower]
-a:添加可调度的服务器节点
-e:修改添加的服务器节点
-t : tcp
-u : udp
-r:指定节点服务器IP地址(RIP)
-g:使用DR模型 直连路由的方式
-i:TUN模型
-m:NAT模型 默认是DR模型
-w:权重
例如:
ipvsadm -a -t 192.168.10.88:80 -r 192.168.20.10 -m -w 1
添加服务器池中的RS服务器192.168.20.10,被192.168.10.88调度,-r使用NAT模型,-w权重为1
ipvsadm -a -t 192.168.10.88:80 -r 192.168.20.20 -m -w 2
添加服务器池中的 RS服务器192.168.20.20,被192.168.10.88调度, -r使用NAT模型,-w权重为2
删除RS节点
ipvsadm -d -t|u|f service-address -r server-address
例如:
ipvsadm -d -t 192.168.10.88 -r 192.168.20.10
查看LVS配置的相关节点和规则
ipvsadm -L [-n] [--stats] [--rate]
动态监控访问数量 watch [-n #] "ipvsadm -L -n"
-n:不反解
-c:显示当前的连接
--stats 显示统计数据
--rate:统计速率
5.实验配置LVS-NAT模型
1.四台机器 一台客户端,一台LVS调度服务端 两台内网 LVS配置两块网卡,做路由
准备LVS调度服务器,为设置NAT模型,需准备两块网卡,例如ens33、ens37
ip 地址为192.168.10.100 和 192.168.20.100
准备两台被调度节点web服务器,网关需指向LVS的director
ip地址为192.168.20.10 和192.168.20.20
2.开启LVS调度服务器的路由转发功能
确定LVS调度服务器director的转发功能开启,并清空所有防火墙规则(ipvs和iptables不能兼容)
echo “1” > /proc/sys/net/ipv4/ip_forward
或者开启永久路由转发
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
3.在两台内网服务端写入测试网页
在两台节点上部署web服务器,在网页根路径写入不同的网页内容,方便结果验证
4.在director上部署ipvs规则
ipvsadm -A -t 192.168.10.100:80 -s rr
ipvsadm -a -t 192.168.10.100:80 -r 192.168.20.100 -m
ipvsadm -a -t 192.168.10.100:80 -r 192.168.20.200 -m
5.浏览器访问验证调度效果 保存ipvs规则
使ipvs规则永久有效,进行保存
ipvsadm -S -n > /etc/sysconfig/ipvsadm-config
清空ipvs所有规则
ipvsadm -C
恢复之前保存好的ipvs规则
ipvsadm -R < /etc/sysconfig/ipvsadm-config
cat /etc/sysconfig/ipvsadm-config | ipvsadm
6.实验配置LVS-DR模型
保证前端路由器将目标IP为VIP的请求报文发送给director
使客户端只能看到 VIP 外网ip 看不到后台的服务器ip
解决方案:修改RS主机内核参数
1内核参数
arp_ignore:是否响应请求
0表示只要接收请求,一律响应
1表示请求报文从哪个接口进来,响应报文就要从哪个接口出去
2内核参数
arp_announce:是否接收通告,参数值 0 1 2 广播
0表示任何地址都通告
1表示尽量避免向非本网络中的接口通告
2总是用最佳本地地址向网络通告 ens33发起请求 那么就会回应 ens33的IP而不是VIP的ip
1.在director上配置客户端能访问的VIP,VIP配置在物理网卡的子接口上即可。然后配置VIP的路由
修改客户端的ip为 20网段 修改ip
vim /etc/sysconfig/network-scripts/ifcfg-ens33
systemctl restart network
LVS 负载均衡器设定
ifconfig ens38:0 192.168.20.88 broadcast 192.168.20.88 netmask 255.255.255.255 up
route add -host 192.168.20.88 dev ens38:0增加路由
Ifconfig
Ip a
2.两台WEB机器设置 RS节点内核参数调整,并配置VIP,VIP的地址配置在自身网卡的回环地址lo子接口上。
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
ifconfig lo:0 192.168.20.88 netmask 255.255.255.255 broadcast 192.168.20.88 up --回环地址
3.web服务端 RS上配置VIP的路由
route add -host 192.168.20.88 dev lo:0
20.11客户端
4.用别的主机ping VIP,检查连通性,并查看arp地址表验证RS是否未响应。
5.配置director的ipvs调度规则
ipvsadm -A -t 192.168.20.88:80 -s rr
ipvsadm -a -t 192.168.20.88:80 -r 192.168.20.100:80 -g
ipvsadm -a -t 192.168.20.88:80 -r 192.168.20.200:80 -g
6.浏览器验证LVS-DR集群结果