初识Linux集群

Linux cluster基础与lvs简单介绍

Linux cluster

一个Linux集群(cluster)就是一组计算机,它们作为一个整体向用户提供特定的服务。这些单个的计算机系统就是集群的节点(node)。那么问题来了,我们为啥要使用集群技术?它的优点如下:

  1. 易于扩展,管理员可很方便的增加或删除集群系统中的节点。
  2. 高可用性,当集群中某一个节点失效时,其负责的任务可以传递给其他节点,有效避免单点故障。
  3. 高性能,负载均衡的集群系统能够承担极大的并发客户请求。
  4. 高性价比,可以使用相对廉价的硬件构造出高性能的系统。

既然集群的好处多多,那么常见的集群有哪些呢?

1.LB:load balancing:负载均衡集群
负载均衡集群中有调度器(Director),它处在多台内部服务器的上层,根据定义的调度方式从下层的服务器组中选择一台来响应客户端发送的请求。

2.HA:highavailability 高可用
顾名思义就是服务的可用性比较高,当某台服务器故障后不会造成所提供的服务中断。集群自动将客户的访问请求转交给一个正常工作的服务器。

3.HP:Hight Performance 高性能
高性能的集群是当某一项任务计算量非常大的时候,由一个计算机集群共同来完成这项任务。这种 处理方式我们称为并行处理机制。一般高性能集群用于科研工作方面。

常见的系统扩展类型有:
scale up(纵向扩展):通过增加硬件资源,即增加更好的设备来满足性能消耗的需求。但是此方式性价比很低。
scale out(横向扩展):通过硬件或软件的方式,将由单一服务器负责的业务需求转为一组节点服务器来进行处理,此种方式易于扩展且性价比高。

以上是cluster的初步概念,接下来介绍一下由章文嵩博士研究出的负载均衡集群技术LVS。

Linux Virtual Server

一般来说,LVS采用三层结构:调度器、服务器池、共享存储。LVS工作在OSI七层模型的第四层,所以LVS又有一个别名是四层交换机。因此LVS需要在内核的TCP/IP协议栈对数据流进行过滤筛选,这就需要有内核的模块来支持,而这样的过滤转发规则又是由管理员用户进行定义的,所以,LVS就是两段式的架构,在内核空间中工作的是”ipvs”, 而在用户空间中工作的,用来定义集群服务规则的是”ipvsadm”。

LVS集群类型中的术语:
调度器:director,dispatcher,balancer
VS:Virtual Server, Director, Dispatcher, Balancer
RS:Real Server, upstream server, backend server
CIP:Client IP, VIP: Virtual serve ip , DIP: Director IP,RIP: Real server IP

lvs集群的类型:
lvs-nat:修改请求报文的目标IP; MASQUERADE类型
lvs-dr(direct routing):重新封装新的MAC地址,默认使用的类型; GATEWAY类型
lvs-tun(ip tunneling):在原请求IP报文之外新加一个IP首部;IPIP类型
lvs-fullnat:修改请求报文的源和目标IP;

lvs-nat:
多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发;
(1)RIP和DIP必须在同一个IP网络,且应该使用私网地址;RS的网关要指向DIP;
(2)请求报文和响应报文都必须经由Director转发;极高负载的场景中,Director可能成为系统瓶颈;
(3)支持端口映射,可修改请求报文的目标PORT;
(4)vs必须是Linux系统,rs可以是任意系统;

lvs-dr:lvs的默认模式
Direct Routing,直接路由;
通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变;
Director和各RS都得配置使用VIP;
(1) 确保前端路由器将目标IP为VIP的请求报文发往Director:
在RS上修改内核参数以限制arp通告及应答级别;arp_announce及arp_ignore
(2) RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director,在RS的lo别名网卡上配置vip地址;
VIP配置在DR上的时候,应该是在eth0:0上,在RS上配置VIP的时候,就必须是lo:0了,否则达不到让RS不响应VIP的ARP通告的效果。
(3) RS跟Director要在同一个物理网络即同一广播域;
(4) 请求报文要经由Director,但响应不能经由Director,而是由RS通过网关直接发往Client;
(5) 不支持端口映射;

lvs-tun:
转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而在原IP报文之外再封装一个IP首部(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;可能会因MTU产生分片问题。
(1) DIP, VIP, RIP都应该是公网地址;
(2) RS的网关不能,也不可能指向DIP,在RS的lo别名网卡上配置vip地址;
(3) 请求报文要经由Director,但响应不能经由Director;
(4) 不支持端口映射;
(5) RS的OS得支持隧道功能;
客户端请求:
client—–CIP VIP——->director——–CIP VIP DIP RIP———realserver(在lo别名上配置vip);
服务器响应请求:
realserver——VIP CIP———client

lvs-fullnat:
通过同时修改请求报文的源IP地址和目标IP地址进行转发;
CIP –> DIP
VIP –> RIP
(1) VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP;
(2) RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client;
(3) 请求和响应报文都经由Director;
(4) 支持端口映射;
注意:lvs-fullnat型lvs默认不支持需更换支持的内核。

静态调度算法:根据算法本身进行调度;

rr:roundrobin,轮询,调度器将外部请求轮流分配到集群中的节点中。
wrr:Weighted RR,加权轮询,调度器根据事先设置的权重来分配外部请求到集群中的节点。
sh:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的真实服务器Ip,从而实现会话绑定;
dh:Destination Hashing;目标地址哈希,将发往同一个目标地址的请求始终转发至第一次挑中的真实服务器IP,典型使用场景是正向代理缓存场景中的负载均衡;

动态调度算法:根据真实服务器当前的负载状态及调度算法进行调度。

lc:least connections,调度器通过lc调度算法动态地将网络请求调度到已建立连接最少的服务器上。
wlc:Weighted Least Connections,调度器通过wlc调度算法根据事先设置的权重优化负载均衡调度。具有较高权重的服务器将承受较大比例的连接请求。
sed:Shortest Expection Delay,在WLC基础上改进,Overhead = (activeconns+1)*256/权重,不再考虑非活动状态,把当前处于活动状态的数目+1来实现,数目最小的,接受下次请求,+1的目的是为了考虑加权的时候,非活动连接过多缺陷:当权重过大的时候,会导致空闲服务器一直处于无连接状态。
NQ:Never Queue Scheduling NQ,如果有台 realserver的连接数=0就直接分配过去,不需要再进行sed运算,保证不会有一个主机很空闲。
lblc:基于地址的最小连接数调度(locality-based least-connection):将来自同一个目的地址的请求分配给同一台RS,此时这台服务器是尚未满负荷的。否则就将这个请求分配给连接数最小的RS,并以它作为下一次分配的首先考虑。
LBLCR:Locality-Based Least Connections with Replication,带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按“最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/101543

(0)
net31_行者无疆net31_行者无疆
上一篇 2018-06-24
下一篇 2018-06-24

相关推荐

  • awk

    使用方法 awk ‘{pattern + action}’ {filenames} 尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern就是要表示的正则表达式,用…

    2018-05-20
  • 网络模型与linux资源管理工具

    osi七层网络模型
    TCP/iP五层网络模型
    htop
    vmstat
    dstat
    ip命令
    ss命令

    2018-07-24
  • 第11周

    总结

    Linux笔记 2018-06-10
  • route命令

    1.   使用背景         需要接入两个网络,一个是部署环境所在内网环境,这个环境是上不了外网, 外网环境很可能是一个无线网络。如果两者都连接上,很可能导致有一方不能起作用,即外网或内网上不了,常常需要使用繁琐的“禁用网络连接”、“启用网络连接”的操作来进行内外网的切换,甚是麻烦。         为了解决这个问题,可以使用route命令来使得同时内…

    Linux笔记 2018-05-01