一、Linux集群类型、系统扩展方式及调度方法
1.概念
Linux cluster,Linux集群系统是一种计算机系统, 它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。一个集群(cluster)就是一组计算机,它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统就是集群的节点(node)。一个理想的集群,用户是不会意识到集群系统底层的节点的。在他们看来,集群是一个系统,而非多个计算机系统。并且集群系统的管理员可以随意增加和删改集群系统的节点。
Linux 集群系统的优点在于:
(1)高扩展性,管理员可自行增加或删除集群系统中的节点。
(2)高可用性,当集群中某一个节点失效时,其负责的任务可以传递给其他节点,因此能够有效防止单点失效。
(3)高性能,负载均衡的集群系统能够同时接入更多的用户。
(4)高性价比,可以使用廉价的硬件构造出高性能的系统。
2. Linux Cluster类型
(1)LB:Load Balancing,负载均衡;
提供和节点个数成正比的负载能力,这种集群很适合提供大访问量的Web服务。负载均衡集群往往也具有一定的高可用性特点。Turbolinux Cluster Server、Linux Virtual Server都属于负载均衡集群。主流架构Nginx+Keepalived(利于动静分离)、LVS+Keepalived。
(2)HA:High Availiablity,高可用集群;
一般是指当集群中有某个节点失效的情况下,其上的任务会自动转移到其他正常的节点上。还指可以将集群中的某节点进行离线维护再上线,该过程并不影响整个集群的运行。计思想就是要最大限度地减少服务中断时间。这类集群中比较著名的有Turbolinux TurboHA、Heartbeat、Kimberlite等。
高可用集群一般是通过系统的可靠性(reliability)和系统 的可维护性(maintainability)来衡量的。通常用平均无故障时间(MTTF)来衡量系统的可靠性,用平均维护 时间(MTTR)来衡量系统的可维护性。因此,一个高可用集群服务可以这样来定义:
A=MTBF平均故障间隔时间/(MTBF平均故障间隔时间+MTTR平均恢复时间)
(0,1):90%, 95%, 99%, 99.5%, 99.9%, 99.99%, 99.999%, 99.9999%
一般高可用集群的标准有如下几种:
99%:表示 一年不在线时间不超过87小时
99.9% :表示一年不在线时间不超过8.7小时
99.99%: 表示一年不在线时间不超过1小时
99.999% :表示一年不在线时间不超过3-5分钟
(3)HP:High Performance,高性能集群;
HPCC高性能计算集群也称为DAS(数据分析超级计算机)
(4)分布式系统集群:
分布式存储:分布式存储是一种数据存储技术,通过网络使用企业中的每台机器上的磁盘空间,在元数据服务器做索引,并将这些分散的存储资源构成一个虚拟的存储设备,数据分散的存储在企业的各个角落。
分布式计算:分布式计算是一种计算方法,和集中式计算是相对的。随着计算技术的发展,有些应用需要非常巨大的计算能力才能完成,如果采用集中式计算,需要耗费相当长的时间来完成。分布式计算将该应用分解成许多小的部分,分配给多台计算机进行处理。这样可以节约整体计算时间,大大提高计算效率。
3. 系统扩展类型
常见的系统扩展类型有:
-
scale up(向上扩展):利用现有的硬件资源,通过增加硬件资源来满足日益增长的性能消耗的需求,但是此方式通常来说能提升的性能有限。
-
scale out(向外扩展):通过硬件或软件的方式,将以往由单一服务器负责的业务需求分配到其他节点的服务器上进行处理,但是从用户的视角来看,这些服务器是单一的系统。而lvs集群的扩展方式正是属于scale out。
4. 负载均衡集群实现:
4.1、硬件设备实现负载均衡:
- F5公司的 Big-IP产品: 性能好价格高
- Citrix公司的 Netscaler产品
- A10 公司的A10产品
4.2、软件实现负载均衡:
- lvs:Linux Virtual Server虚拟服务,不处理服务,而是转到其他地方处理
- nginx伪四层调度
- haproxy
- ats:apache traffic server 雅虎公司的开源项目
- perlbal
- pound
4.3、基于工作的协议层次划分:
(1)四层负载均衡:传输层调度器(通用):(DPORT)
- lvs:基于udp、tcp调度
- nginx:stream模块用来模拟四层调度
- haproxy:mode tcp模块用来模拟四层调度
(2)七层负载均衡:应用层调度器(专用):(自定义的请求模型分类)
proxy server:
- http:nginx(使用http的模块), httpd, haproxy(使用http的模块)
- fastcgi:nginx, httpd, ...
- mysql:ProxySQL, ...
4.4、集群的站点指标:
- PV:Page View页面浏览量
- UV:Unique Vistor单独浏览者
4.5、集群的会话保持问题:
为了对访问用户的追踪
-
(1) session sticky会话绑定
Source IP-----基于原ip识别原用户
Cookie----基于原Cookie识别原用户 -
(2) session replication;复制集群
session cluster会话集群 -
(3) session server指定一台专门储存会话的服务器
l4:四层交换机,四层路由器。
VS:根据请求报文的目标IP和目标协议及端口将其调度转发至某RealServer,根据调度算法来挑选RS。
iptables/netfilter:
iptables:用户控件的管理工具
netfilter:内核空间上的框架
流入:PREROUTING---> INPUT
流出:OUTPUT---> POSTROUTING;
转发:PREOUTING---> FORWARD---> POSTROUTING
DNAT:目标地址转换;PREROUTING;
SNAT:源地址转换;POSTROUTING;
lvs:ipvsadm/ipvs
ipvsadm:用户空间的命令行工具,规则管理器,用于管理集群服务及相关的RealServer;
ipvs:工作与内核空间的netfilter的INPUT钩子之上的框架。
6、讲解lvs
CIP:所有的客户端都成为CIP
VIP:接收客户端的请求称之为VIP。
DIP:与后端主机通信的称之为DIP。
RIP:后端主机对应的ip称之为RIP。
LVS的工作原理:
(1)当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间 (2)PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发往INPUT链 (3)IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已定义好的集群服务进行比对,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发往POSTROUTING链 (4)POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送给后端的服务器
LVS 由2部分程序组成,包括 ipvs 和 ipvsadm。
- ipvs(ip virtual server):一段代码工作在内核空间,叫ipvs,是真正生效实现调度的代码。
- ipvsadm:另外一段是工作在用户空间,叫ipvsadm,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器(Real Server)
7、lvs集群类型中的术语
8、lvs集群的类型:
lvs-nat:修改请求报文的目标IP;多目标IP的DNAT
lvs-dr:操纵封装新的MAC地址;
lvs-tun:IP隧道。在原请求IP报文之外新加一个IP首部
lvs-fullnat:修改请求报文的源IP和目标IP。
1)lvs-nat讲解:
多目标IP的DNAT,通过将请求报文中的目标地址和目标端口来实现调度(通常修改为某挑出的RS的RIP和PORT实现转发); (1)RIP和DIP必须在同一个IP网络,且应该使用私网地址;RS的网关要指向DIP; (2)请求报文和响应报文都必须经由Director转发;Director易于成为系统瓶颈; (3)支持端口映射,可修改请求报文的目标PORT; (4)vs必须是Linux系统,rs可以是任意系统;
扩展问题:所有的应答再次转向VS调度器,这样子造成VS的压力过大。可以优化的方向是RS远端服务器直接向用户客户端发送响应报文。
2)lvs-dr:
Direct Routing,直接路由; 通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变; Director和各RS都得配置使用VIP; 1、 确保前段路由器将目标ip为VIP的请求报文发往Director,有以下三种方式: 在前端网关做静态绑定。这种方法不适用。 在RS上使用arptables; 在RS上修改内核参数以限制arp通告及应答级别;修改两处
arp_announce
arp_ignore
2、 RS的RIP可以使用私网地址,也可以使用公网地址;RIP和DIP在同一个ip网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director; 3、 RS跟Director要在同一个物理网络; 4、 请求报文要经由Director,但响应报文不能经由Director,而是由RS直接发往Client; 5、 不支持端口映射
3)lvs-tun
转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而是在原IP报文之外再封装一个IP首部(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目标IP是CIP); 1、 DIP VIP RIP 都应该是公网地址; 2、 RS的网关不能,也不可能指向DIP; 3、 请求报文要经由Director,但响应不能经由Director; 4、 不支持端口映射 5、 RS的OS得支持隧道功能; 使用场景:广域网负载;
4)lvs-fullnat
通过同时修改请求报文的源IP地址和目标IP地址进行转发 CIP< - - > DIP VIP< - - > RIP 1、 VIP是公网地址,RIP和DIP是私网地址,且通常不在同一个IP网络;因此,RIP的网关一般不会指向DIP 2、 RS收到的请求报文源地址是DIP,因此,只能响应给DIP;但是Director还要将其发往Client; 3、 请求和响应报文都经由Director;Director的压力会比较大。 4、 支持端口映射;
注意:此类型默认不支持。
总结:
lvs-nat,lvs-fullnat:请求和响应报文都经由Director;
lvs-nat:RIP的网关要指向DIP;
lvs-fullnat:RIP和DIP未必在同一IP网络,但要能通信。
lvs-dr,lvs-tun:请求报文要经由Director,但响应报文有RS直接发往Client;
lvs-dr:通过封装新的MAC首部实现,通过MAC进行网络转发
lvs-tun:通过在原IP报文之外封装新的IP首部实现转发,支持远距离通信;