集群的定义:
集群(cluster)是按一定方式组合起来的一组计算机,作为一个整体向客户提供网络服务和网络资源,每一个单个的计算机称为集群的一个借点(node)。
------------------------------------------------------------------------------------------------------------------------------------------------------
集群中常用的三种集群类型:
1、负载均衡集群:LB,Load Balancing
LB主要就是为了扩展服务器的容量
定义:根据某种算法将客户端的访问请求按这种算法分配给集群中的每一台计算机,以减轻计算机的负载压力,从而降低对计算机硬件软件的要求。
2、高可用集群:HA,High Availability
HA主要是用来提高服务的可用性
定义:在负载均衡的基础上为节点增加一台备用节点,即备用计算机,通过某种机制和算法当集群中某台节点出现故障时,备用节点会在很短时间内接替故障节点的工作,从而使服务器基本达到永远在线的功能。
高可用最大的优点就在于可以为客户端提供不间断的服务,次集群常用在提供高度可靠的服务当中。
3、高性能集群:HP,High Performance
HP主要提供高并发的计算能力,来完成单个计算机不能完成的大量计算、统计、分析等工作。
定义:按照一定机制将所需统计的大量数据按一定的方法存储的后端提供的共享存储器当中,再使用某种计算机制来更快更高效的完成计算任务。
------------------------------------------------------------------------------------------------------------------------------------------------------
LB Cluster:负载均衡集群的具体实现方式原理:
1、最简单的实现负载均衡方法:DNS定义多条A记录,DNS可以简单的实现轮询,每个记录对应一台服务器,可以处于不同地方(缺点:这种方式负载均衡考虑不到服务器的处理能力),称为Round Robin(轮询、轮调、轮叫);其效果很差;还会受到DNS缓存的影响;这种方法只能在一些特定的方式下使用。
2、在服务器前端增加一台负载均衡器或调度器(Director):它只提供请求转发的功能,当用户请求时,使用某种机制将请求转发至后端不同的服务器上响应;(但是:也要考虑到集群节点本身的承载能力和Director本身的性能)
考虑到集群节点本身的性能:
不仅要考虑节点在空闲状态下的承载能力,还要考虑到当前节点在响应过程中所能够提供的空闲的响应能力;解决此问题的机制就称之为调度算法。
在网络服务中调度器运行正常的情况下,其不但要检查各节点的承载能力还要做到检查各节点是否在线,称之为对服务器的健康状态检测。
提供响应服务和资源的机制正常情况下,就要涉及到服务器资源的存储性能了;当客户端请求响应过程中对页面进行了刷新,服务器就要保证之前客户请求的资源不会消失,所以提供了各个节点共享存储的机制。
共享存储的类型:
DAS:直接附加存储,Direct attached storage,能直接连接到cpu上的机制,存储设备和服务要在同一台主机上
NAS:网络附加存储,network attached storage,客户机对服务器的请求时,服务器调用后端另行提供的存储器响应资源请求
SAN:storage area network,这种机制共享的并不是文件,而是共享的设备
------------------------------------------------------------------------------------------------------------------------------------------------------
常用负载均衡集群LVS:
-----------------------------------
1、LVS:Linux Virtual Server 的缩写,即linux虚拟服务器;是由中国科学家章文嵩研发的,用于实现基本的负载均衡集群。
2、LVS的工作模型:
(1)LVS需要安装在Director上,它的工作模型类似于iptables中DNAT的模型,当客户端发送请求时,由前端的Director调度器负责接收请求,此请求包先经过PREROUTING链,在送到INPUT链,由工作在INPUT链上的LVS工具ipvs定义的规则进行匹配,若请求的是集群服务,则LVS强制对此包进行转发并转换目标地址,经由FORWARD链,POSTROUTING链转发到达后端的服务器(集群服务和iptables防火墙功能不能同时开启)。
(2)ipvs是使ipvsadm定义的规则生效的框架工具,ipvsadm是LVS中用来定义规则的工具;在LVS模型中客户端的ip称之为CIP,Director有两个网卡,连接外网的网卡ip称为VIP,即Virtual IP,连接内部服务器的ip称为DIP,向后端服务器转发请求的ip;集群服务器中每个节点的ip称为RIP,即Real IP,提供真正服务的ip;而服务器称为RealServer。
(3)LVS的特点是高吞吐能力、高并发能力、冗余能力。
3、LVS的工作模型图:
4、LVS的调度算法:
(1)静态调度方法(不检查realserver的连接状态)
<1>Round-robin(RR)轮调
根据ipvs规则自上而下依次寻找RS
<2>Weighted round-robin(WRR)加权轮调
根据处理能力的大小来分配权重,从而分配调度次数。
<3>Destination hashing(DH)目标地址哈希
---实现针对同一目标地址的请求做固定定向转发
<4>Source hashing (SH)源地址哈希
---实现针对同一源地址的请求做固定定向转发
(2)动态调度方法 (检查realserver的连接数和连接状态)
连接有两种状态: active和inactive,即活动和非活动状态
<1>LC(Least-connection)最少连接数
同时检查active连接和inactive连接,谁的连接数目少就把请求转发给谁。
计算公式:最大连接数Overhead=active连接数*256+inactive连接数
<2>WLC(weighted least-connection)加权最少连接数
基于LC的基础上检查连接
计算公式:最大连接数Overhead=active连接数*256+active连接数/权重weight,谁得到的数值小下次请求就转发给谁;
<3>SED(Shortest Expected Delay) 最短期望延迟
计算公式:最大连接数overhead=(active连接数+1)*256/权重weight
<4>NQ (Never Queue)永不排队算法
无需队列。如果有台 realserver的连接数=0就直接分配过去,不需要在进行SED运算
<5>LBLC (Locality-Based Least-Connection) 基于局部性的最少链接
SED的改进版
调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接” 的原则选出一个可用的服务器,将请求发送到该服务器
<6>LBLCR (Locality-Based Least-Connection with Replication scheduling)带复制的基于局部性最少链接
调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按“最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
5、LVS的三种工作模式
(1)Network Adress Translation(LVS-NAT):地址转换
基本特点:
<1>DIP和RIP必须在同一子网
<2>RIP通常是私有地址
<3>Director处理请求的数据包和请求的数据包,directory需要两张网卡
<4>所有的RIP必须以DIP为默认网关
<5>nat机制可以实现端口映射。
<6>任何操作系统都可以做Realserver
<7>Director负载压力很大,可能会成为瓶颈
优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,物理服务器可以分配Internet的保留私有地址,只有负载均衡器需要一个合法的IP地址。
缺点:扩展性有限。当服务器节点超过20个的时候,负责调度的服务器可能会成为瓶颈,因为所有的接收请求报文和响应报文都要经过调度器为客户响应。
NAT模型工作流程图:
(2)Direct Routing(LVS-DR):直接路由
基本特点;
<1>Director和Cluster要在同一网络中
<2>RIP的地址可以为公有地址
<3>Director只处理请求的数据包,而不处理响应
<4>Cluster的网关不可为DIP,应是路由ip
<5>不能重新映射端口,端口必须保持一致
<6>大多数操作系统可实现realserver
<7>这种模型可以比NAT模型处理更多的请求
模型剖析:
<1>数据包在节点间传输靠的是MAC,通过ARP的广播解析IP到MAC;此种模型中Director仍有VIP、DIP;Real server有VIP、RIP;
<2>Director及real server 都连接到一个Switch上;
<3>Director及real server 都配置的有VIP;
<4>相同的IP,为防止冲突,在 real server 上采取手段隐藏起VIP地址,使其对请求VIP地址解析的ARP请求不作响应,这样解析到的VIP地址即为Director,数据包先传输到Director;
<5>Director 接收到数据包后,根据算法找到某个real server ,并且修改数据包中的目的MAC地址为该real server的Mac,然后通过 Switch转发该数据包;此时,该数据包的源ip仍未CIP,目标ip为VIP;
<6>real server接收到数据包后(包中的VIP、目的MAC均匹配自己),处理该包,返回的数据直接通过Switch出去并过Router传回Client。
优点:负载均衡器只是分发请求,应答包通过单独的路由方法返回给客户端。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务
缺点:要求负载均衡器的网卡必须与物理网卡在一个物理段上。
DR模型工作流程图:
(3)IP tunneling(LVS-TUN):IP隧道
基本特点:
<1>Director和Cluster不在同一网络中
<2>RIP必须是公网地址,不能是私有地址
<3>Director只处理请求的数据包,不处理响应数据包
<4>不能重新映射端口,端口必须保持一致
<5>只有支持隧道协议的服务器才能作为RealServer
TUN模型工作流程图:
与DR模型相似,不同的是,TUN中Director与Realserver的ip可以不在同一个网络中,即可以是广域网中的ip。
------------------------------------------------------------------------------------------------------------------------------------------------------
实现LVS的方法:
LVS的机制与iptables有些类似,有一段是专门定义在用户空间,命令叫ipvsadm,而工作在内核空间中的代码叫ipvs,2.4内核之后,ipvsadm已经被做进内核中,只需要将相应的功能开启即可;通过用户空间中的ipvsadm定义一些规则来实现对内核中ipvs的控制的。
- 安装ipvsadm的rpm包即可;
- ipvsadm 的用法和格式如下:
- ipvsadm -A|E -t|u|f virutal-service-address:port [-s scheduler] [-p [timeout]] [-M netmask]
- ipvsadm -D -t|u|f virtual-service-address
- ipvsadm -C
- ipvsadm -R
- ipvsadm -S [-n]
- ipvsadm -a|e -t|u|f service-address:port -r real-server-address:port [-g|i|m] [-w weight]
- ipvsadm -d -t|u|f service-address -r server-address
- ipvsadm -L|l [options]
- ipvsadm -Z [-t|u|f service-address]
- ipvsadm --set tcp tcpfin udp
- ipvsadm --start-daemon state [--mcast-interface interface]
- ipvsadm --stop-daemon
- ipvsadm -h
- 命令选项解释:
- 有两种命令选项格式,长的和短的,具有相同的意思。在实际使用时,两种都可以。
- -A --add-service 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器。
- -E --edit-service 编辑内核虚拟服务器表中的一条虚拟服务器记录。
- -D --delete-service 删除内核虚拟服务器表中的一条虚拟服务器记录。
- -C --clear 清除内核虚拟服务器表中的所有记录。
- -R --restore 恢复虚拟服务器规则
- -S --save 保存虚拟服务器规则,输出为-R 选项可读的格式
- -a --add-server 在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录。也就是在一个虚拟服务器中增加一台新的真实服务器
- -e --edit-server 编辑一条虚拟服务器记录中的某条真实服务器记录
- -d --delete-server 删除一条虚拟服务器记录中的某条真实服务器记录
- -L|-l --list 显示内核虚拟服务器表
- -Z --zero 虚拟服务表计数器清零(清空当前的连接数量等)
- --set tcp tcpfin udp 设置连接超时值
- --start-daemon 启动同步守护进程。他后面可以是master 或backup,用来说明LVS Router 是master 或是backup。在这个功能上也可以采用keepalived 的VRRP 功能。
- --stop-daemon 停止同步守护进程
- -h --help 显示帮助信息
- 其他的选项:
- -t --tcp-service service-address 说明虚拟服务器提供的是tcp 的服务[vip:port] or [real-server-ip:port]
- -u --udp-service service-address 说明虚拟服务器提供的是udp 的服务[vip:port] or [real-server-ip:port]
- -f --fwmark-service fwmark 说明是经过iptables 标记过的服务类型。
- -s --scheduler scheduler 使用的调度算法,有这样几个选项 rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,默认的调度算法是: wlc.
- -p --persistent [timeout] 持久稳固的服务。这个选项的意思是来自同一个客户的多次请求,将被同一台真实的服务器处理。timeout 的默认值为300 秒。
- -M --netmask netmask persistent granularity mask
- -r --real-server server-address 真实的服务器[Real-Server:port]
- -g --gatewaying 指定LVS 的工作模式为直接路由模式(也是LVS 默认的模式)
- -i --ipip 指定LVS 的工作模式为隧道模式
- -m --masquerading 指定LVS 的工作模式为NAT 模式
- -w --weight weight 真实服务器的权值
- --mcast-interface interface 指定组播的同步接口
- -c --connection 显示LVS 目前的连接 如:ipvsadm -L -c
- --timeout 显示tcp tcpfin udp 的timeout 值 如:ipvsadm -L --timeout
- --daemon 显示同步守护进程状态
- --stats 显示统计信息
- --rate 显示速率信息
- --sort 对虚拟服务器和真实服务器排序输出
- --numeric -n 输出IP 地址和端口的数字形式