目录
1.高可用集群(HA :high availiablity)
3.高性能集群(HPC:high-performance computing)
开源集群软件:Nginx,LVS,Haproxy,Keepalived,heartbeat
商业集群硬件:F5,Netscaler,Radware,A10
一、(什么是集群?)集群的概念
举一个易于理解的例子:当我们打开浏览器(百度、谷歌、IE等),在网络良好的情况下我们即可以顺利的浏览页面,如果有前端开发的经验,甚至可以在短时间做出一个相同的页面,而实际上,这个页面的背后是由成千上万台服务器集群协同工作的结果。
多台主机提供相同服务的一组序列就叫集群(cluster)
一句话简述:即一堆服务器合作做同一件事,这些机器可能需要统一协调管理,可以分布在一个机房,也可以分布在全国全球各个地区的多个机房。
正经解释:集群就是指一组(若干个)相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点(集群系统中的单个计算机通常称为节点)都是运行各自服务的独立服务器。在某种意义上,他们可以被看作是一台计算机。这些服务器之间可以彼此通信,协同向用户提供应用程序,系统资源和数据,并以单一系统的模式加以管理。集群计算机通常用来改进单个计算机的计算速度或可靠性。
集群和分布式的区别
集群:同一个业务系统,部署在多台服务器上,集群中,每一台服务器实现的功能没有差别,数据和代码都是一样的
分布式:一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式 中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起来,才是完整的业务
分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数 来提升效率, 对于大型网站,访问用户很多,实现一个群集,在前面部署一个负载均衡服务器,后面几台服务器完成同一业务。如果有用户进行相应业务访问时,负载均衡器根据后端哪台服务器的负载情况,决定由给哪一台去完成响应,并且台服务器垮了,其它的服务器可以顶上来。分布式的每一个节点, 都完成不同的业务,如果一个节点垮了,那这个业务可能就会失败
二、(使用集群是要干嘛?)集群的分类
1.高可用集群(HA :high availiablity)
一般是指在集群中任意一个节点失效的情况下,该节点上的所有任务会自动转移到其他正常的节点上。此过程并不影响整个集群的运行。单一的计算机系统总会面临设备损毁的问题,如 CPU,内存,主板,电源,硬盘等,只要一个部件坏掉,这个计算机系统就可能会宕机,无法正常提供服务。在集群系统中,尽管部分硬件和软件还是会发生故障,但整个系统的服务可以是 7 × 24小时可用的。
集群架构技术可以使得系统在若干硬件设备故障发生时仍可以继续工作,这样就将系统的停机时间减少到了最小。集群系统在提高系统可靠性的同时,也大大减小了系统故障带来的业务损失,目前几乎 100% 的互联网网站都要求 7 × 24小时提供服务。
其架构如图所示:
2.负载均衡集群(LB:loadBalancing)
负载均衡集群为企业提供了更为实用,性价比更高的系统架构解决方案。负载均衡集群可以把很多客户集中的访问请求负载压力尽可能平均地分摊在计算机集群中处理。客户访问请求负载通常包括应用程序处理负载和网络流量负载。这样的系统非常适合使用同一组应用程序为大量用户提供服务的模式,每个节点都可以承担一定的访问请求负载压力,并且可以实现访问请求在各节点之间动态分配,以实现负载均衡。
其作用为:
1.分摊用户访问请求及数据流量(负载均衡)。
2.保持业务连续性,即 7 × 24 7×247×24 小时服务(高可用性)。
3.应用于 Web 及数据库等服务器的业务。
3.高性能集群(HPC:high-performance computing)
一些国家重要的计算密集型应用(如天气预报,核试验模拟等,需要计算机有很强的运算处理能力。以全世界现有的技术,即使是大型机器,其计算能力也是有限的,很难单独完成此任务。因为计算时间可能会相当长,也许几天,甚至几年或更久。因此,对于这类复杂的计算业务,便使用了计算机集群技术,集中几十上百台,甚至成千上万台计算机进行计算。例如,我国的天河二号就属于高性能集群。
三、(怎样实现集群?)集群的实现方式
互联网企业中常见的集群软硬件产品
-
开源集群软件:Nginx,LVS,Haproxy,Keepalived,heartbeat
-
商业集群硬件:F5,Netscaler,Radware,A10
淘宝,赶集网,新浪等公司曾使用过 Netscaler 负载均衡产品。集群硬件 Netscaler 的产品图如下图所示:
集群硬件F5:
------------------------------------------------------华丽的分割线---------------------------------------------------------
LVS的概念及其三种模式
相关术语:
缩写 | 名称 | 说明 |
VS(virtual ip) | 虚拟服务器 | 负责调度 |
RS(Real Server) | 真实服务器 | 负责真正提供服务 |
CIP(Client IP) | 客户端主机ip | 客户端用户计算机请求集群服务器的IP地址,该地址用作发送给集群的请求的源IP地址 |
VIP(virtual server IP) | 虚拟ip | Director用于向客户端计算机提供服务的IP地址 |
DIP(Director IP) | Director的ip | Director用于连接内外网网络的IP地址 |
RIP(Real server) | 真实ip | 在集群下面节点上使用的IP地址 |
访问的流程:CIP <-->VIP == DIP<--> RIP
体系结构
- 负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。
- 服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。
- 共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。
一、模式(仅介绍两种)
1.NAT模式
LVS NAT原理:用户请求LVS到达director,director将请求的报文的目的IP改为RIP,同时将报文的目标端口也改为realserver的相应端口,最后将报文发送到realserver上,realserver将数据返回给director,director再把数据发送给用户
LVS NAT特性:
- NAT模式修改的是目的ip,直接走的是switch不需要修改mac地址,所以VIP和RIP不需要在同一个网段内
- NAT的包的进出都需要经过LVS,所以LVS可能会成为一个系统的瓶颈问题
2.DR模式
LVS DR原理:用户请求LVS到达director,director将请求的报文的目的MAC地址改为后端的realserver的MAC地址,目的IP为VIP(不变),源IP为client IP地址(不变),然后director将报文发送到realserver,realserver检测到目的地址为自己本地的VIP,如果在同一网段,将请求直接返回给用户,如果用户跟realserver不在同一个网段,则需要通过网关返回给用户。
LVS DR特性:
- 前端路由将目标地址为VIP报文统统发给Director Server
- RS跟Director Server必须有一个网卡在同一个物理网络中
- 所有的请求报文经由Director Server,但响应报文必须不能进过Director Server
- 所有的real server机器上都有VIP地址
3.TUN模式(略)
LVS TUN特性:
- TUNNEL必须在所有的realserver上绑定VIP
- realserver直接把包发给client
- 隧道模式运维起来会比较难,所以一般不用
4.FULLNET模式(略)
- FULLNAT模式也不需要DIP和RIP在同一网段
- FULLNAT和NAT相比的话:会保证RS的回包一定可到达LVS
- FULLNAT需要更新源IP,所以性能正常比NAT模式下降10%
工作模式总结
模式的性能比较:DR>TUN>NAT>FULLNAT
二、LVS负载均衡10种算法
主要分为静态方法和动态方法,区别在于是否考虑RS的负载情况
1. 轮询叫调度 rr(静态)
均等地对待每一台服务器,不管服务器上的实际连接数和系统负载
2.加权轮叫 wrr(静态)
调度器可以自动问询真实服务器的负载情况,并动态调整权值
3.目标地址散列调度算法 dh(静态)
该算法是根据目标 IP 地址通过散列函数将目标 IP 与服务器建立映射关系,出现服务器不可用或负载过高的情况下,发往该目标 IP 的请求会固定发给该服务器。
4.源地址散列调度算法 sh(静态)
与目标地址散列调度算法类似,但它是根据源地址散列算
5.最少链接 lc)(动态)
动态地将网络请求调度到已建立的连接数最少的服务器上
如果集群真实的服务器具有相近的系统性能,采用该算法可以较好的实现负载均衡
6.加权最少链接 wlc(动态)
调度器可以自动问询真实服务器的负载情况,并动态调整权值
带权重的谁不干活就给谁分配,机器配置好的权重高
7.基于局部性的最少连接调度算法 lblc(动态)
这个算法是请求数据包的目标 IP 地址的一种调度算法,该算法先根据请求的目标 IP 地址寻找最近的该目标 IP 地址所有使用的服务器,如果这台服务器依然可用,并且有能力处理该请求,调度器会尽量选择相同的服务器,否则会继续选择其它可行的服务器
8.复杂的基于局部性最少的连接算法 lblcr(动态)
记录的不是要给目标 IP 与一台服务器之间的连接记录,它会维护一个目标 IP 到一组服务器之间的映射关系,防止单点服务器负载过高。法进行静态分配固定的服务器资源。
9.最少期望延迟 sed(动态)
不考虑非活动链接,谁的权重大,优先选择权重大的服务器来接收请求,但权重大的机器会比较忙
10.永不排队 nq(动态)
无需队列,如果有realserver的连接数为0就直接分配过去
三、部署命令介绍
1.管理lvs集群服务的增删查改:
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 火墙标记,是一个数字 |
实际引用
#增加
[root@DR-server ~]# ipvsadm -A -t 172.25.254.100:80 -s rr
[root@DR-server ~]# ipvsadm -A -f 66 -p 3000
#修改
[root@DR-server ~]# ipvsadm -E -t 172.25.254.100:80 -s wrr -p 3000
#删除
[root@DR-server ~]# ipvsadm -D -t 172.25.254.100:80
[root@DR-server ~]# ipvsadm -D -f 66
2.管理集群中的RS的增删查改
ipvsadm -a|e -t|u|f service-address -r realserver-address [-g|i|m] [-w weight]
关键字符 | 作用 |
-a | #添加realserver |
-e | #更改realserver |
-t | #tcp协议 |
-u | #udp协议 |
-f | #火墙标签 |
-r | #realserver地址 |
-g | #直连路由模式 |
-i | #ipip隧道模式 |
-m | #nat模式 |
-w | #设定权重 |
-z | #清空计数器 |
-C | #清空lvs策略 |
-L | #查看lvs策略 |
-n | #不做解析 |
--rate | #输出速率信息 |
实际应用:
注意:要先有管理集群的服务,否则无法添加rs
添加
更改
删除
查看
四、实际使用
1.部署NAT模式集群案例
前提:
- Director 服务器采用双网卡,一个是桥接网卡连接外网,一个是仅主机网卡与后端Web服务器相连
- Web服务器采用仅主机网卡与director相连
- Web服务器网关指向192.168.0.100
- 后端web服务器不需要连接外网
环境要求:
主机名 | ip | vip | rloe |
lvs | 192.168.0.100 | 172.25.254.100 | 调度器(vs) |
sever1 | 192.168.0.101,GW 192.168.0.100 | RS | |
server2 | 192.168.0.102,GW 192.168.0.100 | RS | |
test | 172.25.254.104 | 测试机 |
关闭防火墙,SElinux
配置命令:
定位server1
1.开启内核路由功能
echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/ip_forward.conf
2.安装ipvsadm
yum install ipvsadm -y
3.添加调度策略
ipvsadm -A -t 172.25.254.100:80 -s rr
ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.101:80
ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.101:80 -m
ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.102:80 -m
4.保存规则
ipvsadm -Sn
-A -t 172.25.254.100:80 -s rr
-a -t 172.25.254.100:80 -r 192.168.0.101:80 -m -w 1
-a -t 172.25.254.100:80 -r 192.168.0.102:80 -m -w 1
ipvsadm -Sn > /etc/sysconfig/ipvsadm-config
5.删除所有规则
ipvsadm -C
ipvsadm -Ln #查看,以下是查看情况
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
6.重新加载规则
ipvsadm -R < /etc/sysconfig/ipvsadm-config
ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.25.254.100:80 rr
-> 192.168.0.101:80 Masq 1 0 0
-> 192.168.0.102:80 Masq 1 0 0
定位test,测试效果
[root@test] ➤ for N in {1..6};do curl 172.25.254.100;done
RS2 server - 192.168.0.102
RS1 server - 192.168.0.101
RS2 server - 192.168.0.102
RS1 server - 192.168.0.101
RS2 server - 192.168.0.102
RS1 server - 192.168.0.101
可以试着修改权重调用不同的算法 对比看看结果
2.部署DR模式集群案例
实验环境
网络环境就不过多赘述,确保每台主机都可以ping通即可,但是对于rouer这台充当路由器的主机要主要其内外网的分配
在此过程,需要解决掉vip响应的问题
DR模型中各主机上均需要配置VIP,解决地址冲突的方式有三种:
(1)在前端网关做静态绑定
(2)在各RS使用arptables
(3)在各RS修改内核参数,来限制arp响应和通告的级别
配置命令
注意:
1.Director服务器采用双IP桥接网络,一个是VIP,一个DIP
2.Web服务器采用和DIP相同的网段和Director连接
3.每个Web服务器配置VIP
4.每个web服务器可以出外网
在lvs 和 rs 中设定vip
[root@lvs ~]# ip addr add dev lo 192.168.0.100/32
[root@rs1 ~]# ip addr add dev lo 192.168.0.100/32
[root@rs2 ~]# ip addr add dev lo 192.168.0.100/32
在RS1和RS2中解决响应问题
[root@rs1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@rs1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@rs1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@rs1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@rs2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@rs2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@rs2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@rs2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
在lvs中配置策略
[root@lvs ~]# ipvsadm -A -t 192.168.0.100:80 -s wrr
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.101:80 -g
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.102:80 -g
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.100:80 wrr
-> 192.168.0.101:80 Route 1 0 0
-> 192.168.0.102:80 Route 1 0 0
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.100:80 wrr
-> 192.168.0.101:80 Route 1 0 0
-> 192.168.0.102:80 Route 1 0 0
测试效果,定位client
[root@client ~]# for N in {1..6};do curl 192.168.0.100;done
RS2 server - 192.168.0.102
RS1 server - 192.168.0.101
RS2 server - 192.168.0.102
RS1 server - 192.168.0.101
RS2 server - 192.168.0.102
RS1 server - 192.168.0.101
文章内容参考:
https://blog.csdn.net/lcl_xiaowugui/article/details/81701949