所谓集群就是指将多台计算机按照某种方式组合起来,完成某些特定任务的这样一种架构
将集群分为三种:
(1)LB:Load Balancing(负载均衡),LVS
(2)HA:High Availability (高可用),保证服务的在线,和可用性。在线性能,99.9%
(3)HP: High Performance(高性能)提供大量运算的能力 ,主要运用于人口统计,科学勘探,汽车撞车实验,DNA基因图谱的绘制等
提高服务器的性能;
scale on:向上扩展,利用高性能的计算机来代替
scale out: 向外扩展,利用多台计算机组合起来。优点:成本低,扩展架构比较简单。
(1) LB:实现分摊负载
需要前端的负载均衡器。将按照某种算法分发到后台真正的服务器上。
例如我们所学的DNS就能实现负载,它是通过简单的轮调,但是由于不考虑服务器工作时的状态,所以不能算真正的负载均衡
实现负载均衡既可以通过软件实现LVS,也可以通过硬件来实现F5:
LVS:Linux Virtual Server (开发者:章文嵩)
F5:硬件
LVS的简单模型:
图1-1 LVS简单模型
LVS特点:
负载均衡,高吞吐能力
能够提供类似高可用性能
适用性:扩展能力非常强,便捷的扩展性
提供冗余
但是LVS也是存在一定的问题的:
你可以想一想:如果LVS当机了,那整个集群服务会怎么样?很显然就无法访问了。因此LVS会成为单点故障
(2)高可用集群,主要保证服务实时在线,而不是实现负载均衡
在正常情况下,只有一个节点在工作,所有的访问只访问一台服务器,只有当正在工作的那台服务器当掉之后,另一台服务器才会代替它。例如:A服务器当掉了,B服务器就会把A服务器上的服务拿过来,并把A的Ip地址也拿过来。
在高可用集群中,地址和服务称为高可用集群的资源,这些资源可以在各个节点之间流动(float),流动的过程就是故障转移的过程
因此我们就得考虑如何实现两台服务器上提供的服务相同,说白了,也就是说如何实现文件共享,有以下方式实现:
1.nfs,samba
2.rsync:实现检测文件是发生改变,如果改变的进行同步
3.drbd:在内核中基于模块实现的
4.专业级别的共享存储:SAN(存储区域网络)块级别的共享
(3)高性能集群
前端也有一个转发节点,此节点是将复杂的运算任务分成N多个小任务,分发出去,处理完之后,前端节点会把各个任务再次整合起来。
hadoop 雅虎所使用的高性能集群
----------------------------------------------------------------------------------------------------------
各集群中的解决方案(开源的):
LB:LVS
haproxy
HA: heartbeat
corosync+openais:RHCS (红帽集群套件)
ultramokey
keepalive
HP:bowerful
------------------------------------------------------------------------------------------------------------
(1)LB:负载均衡
LVS:(Linux Virtual Server)
虚拟服务器(LVS),接收用户发来的请求,本身不响应用户请求。只是把请求转发到真正的服务器。真正提供服务的节点我们称为realservers,LVS应用只需要装在调度节点上
LVS其实是一个四层交换:
只是简单的判断用户请求的地址和端口,尤其是端口,来判定用户所请求的服务。
这种转发机制对用户来说是透明的
工作模式
(1)地址转换(net) LVS-NAT
(2)直接路由(direct routing)LVS-DR
(3)隧道(IP tunneling)LVS-TUN
图1-2 LVS工作模型
我再画一个简易的图来演示一下:
图1-3 LVS中的IP种类
在lvs中ip地址的种类
VIP :virtual IP address (虚拟ip地址) 对外用户能够看到的ip(类似于DNAT)
RIP :real ip address 真正的ip,类似于地址转换中的私有ip
DIP :director's ip address
CIP :client computer's ip address
(1) 地址转换 LVS-NAT
图1-4 LVS-NAT模型
其工作原理:类似于目的地址转换。将访问Director的VIP转换为真正服务器的ip地址。
在Director上指定将VIP转换为RIP
注意:
1.Dip和各Rip只能在同一个子网中
2.Rip的地址可以是私有地址
3.director 面临的压力比较大
4.RIP的网关必须指向Dip
5.net可以做端口映射,不仅做地址转换,而且也做端口转换
6.对realserver后台的操作系统没有要求
7.单director节点会成为整个集群的瓶颈
--------
(2)直接路由 LVS-DR
图1-5 LVS-DR模型
只有进来的请求才会通过Director
Rip的网关是指向其他路由器的,此时并不指向Director。
只允许director响应Arp,而realserver则将其arp响应禁掉,使用arptables
我画一个图来说明一下原理:
图1-6 LVS-DR工作原理图
原理:
来自客户端的请求,经过路由发送给director ,director上就只有一块网卡,此网卡上既有Vip,又有Dip,director接收到请求后,只负责转发,首先修改目标mac地址为Realserver的mac地址,并将请求转发给Realserver,Realserver上的主机同样具有两个ip:Vip和Rip。不过Vip是配置在lo:0上。当Realserver响应时,通过路由器,此时显示的源ip会是Realserver的Rip,这样肯定不行。因此我们需要通过添加一条主机路由,使源地址成为Vip,这样发给路由器时,显示的源地址就是Vip的地址了。
可能上面的原理你有许多迷惑,那我就先介绍一下数据在网络传输的流程。
首先,我来稍微对网络知识进行一下补充:
Tcp/ip协议栈: 应用层
传输层 负责端到端的传输
网络层 负责网络路由
数据链路层 负责主机到主机的传输
物理层 转化为二进制,在通信线路上传输
物理层属于第一层,依次往上。
数据从上往下进行层层封装。如下图:
图1-7 传输封装图
我再简化一步,只是帮助你理解。
图1-8
-----------------------------------
图1-9 网络拓扑图
如上图所示,我们和对方通信时,通过ip地址通信。1.1.1.1这台主机要和3.3.3.2通行,源端口(随即),目的端口(80),源ip(1.1.1.1),目的ip(3.3.3.2)。接下来该封装MAC地址了,1.1.1.1一看目的主机和自己不是同一个网段,因此它首先要通过本地网关,也就是说它的目的MAC应该为1.1.1.2的MAC地址,此时,它就通过ARP协议发送ARP广播,来获取1.1.1.2的MAC地址。之后就可以封装完成,发送出去了。路由器是3层设备,所以只需要经过物理层,数据链路层和网络层的处理。并且我们给路由器配置的路由,因此他可以选择发送路径。路由器是隔离广播的。路由器与路由器之间,完成通信也是通过ARP广播来获得对方的MAC地址的。之后的过程同前面差不多,我这里就不赘述了。
------------------------------------------------------------------------------
特点:
1. 集群和director节点必须在同一物理子网
2. Rip可以使用公网地址
3. director仅处理用户发来的请求,相应的信息则不经过director
4. 集群节点的网关不能指向dip
5. 不支持端口转换
6. 绝大多数操作系统都可以使用realserver
7. 能够比net模型的带动更多的realserver
(3) 隧道 LVS-TUN
图1-10 LVS-TUN模型
VPN :虚拟专用网络
GRE:通用路由封装
二层的;
PPTP
L2Tp
三层的:
ipsec
五层的:
sslvpn 经过改进了的,可以经过互联网实现
特点:
1.集群节点和director节点不必在同一个物理网络里
2.rip必须是公网地址
3.只处理进来的请求
4.响应请求一定不会经过director节点
5. director不能做端口映射
6.只能使用那些支持ip隧道协议的系统作realserver
-------------------------------
lvs的调度方法
(1)静态调度方法
(2)动态调度方法
静态是不考虑realserver当前的连接状态,动态是考虑realserver当前的连接状态
(一) 静态算法:
(1)轮询Round-robin(RR)
(2)加权轮调(weigthted Round-robin)
根据服务器响应的能力不同,设置权限,权限越大,处理的越多。例如权重比:400:200:100
(3)目标地址hashing(DH)
对目标地址的请求作固定定向转发
主要应用场景:director之后为缓存服务器,将来自同一个用户的请求转发到同一个服务器
,目的是提高缓存利用率
(4)源地址hashing(SH)
将来自内网同一个用户的请求转发到同一个Router或Firewall上
主要实现平均内网负载。
*** 静态算法的缺陷:
静态是不考虑后台realserver当前的连接状态,因此就要用到动态调度算法(二)动态调度算法:
基于两种标准来考量连接状态:
(1)当前处于活动状态的连接 (ESTABLISHED)
(2)非活动状态:还处于连接状态,非断开的连接 (非FIN之前的状态)
算法:
(1) LC(Least-connection)同时检查处于活动状态的连接数和非活动状态的连接数。当前连接数最少的,作为下一个连接
选择原理:
【处于活动状态的*256+非活动连接】 计算结果作为当前连接数overhead,谁的overhead小,就作为下次请求。
(2)WLC:Weighted Least-Connect加权最小连接数 【最常用的算法】
【(处于活动状态的*256+非活动连接)/权重】 作为overhead。谁的overhead小,就作为下一次连接
(3)Shortest Expected Delay(SED)
不再考虑非活动状态连接数,在计算overhead之前,要把活动连接状态数+1,主要目的是提高权重大的响应能力,overhead小的作为下一次请求
【(活动连接数+1)*256/权重】
(4)Never Queue (NQ)
不考虑非活动状态连接数,无论权重多大,只要它是空闲的,就作为下一次请求
(5) Locality-Based Least-connection(LBLC) 基于本地的最少连接算法
和 DH 算法相似
支持权重
(6)Locality-Based Least-connection with Replication Scheduling (LBLCR)
能够在LBLC基础上,实现负载均衡
和DH算法相似