分类: LINUX
2012-06-02 20:15:52
Linux集群系统研究
绪论
网络的高速发展,带来了服务器的线形增长,当访问需求增长时,服务器会在很短的时间内超载,集群技术由此应运而生。目前,越来越多的企业采用Linux操作系统,提供Web、邮件、文件存储数据库等服务。
随着人们对Linux服务器依赖的加深,对其可靠性、负载能力和数据能力也备加关注。Linux集群技术以低廉的成本,实现了这些需求。Linux可以运行于极为普及的PC机上,不需要购买昂贵的UNIX硬件设备。在几台运行Linux的PC机上,只要加入相应的集群软件,就可以组成具有很强可靠性、负载能力和计算能力的Linux集群。
集群是什么
集群(Cluster)是一组相互独立的服务器在网络中表现为单一的系统,并以单一系统的模式加以管理,以此单一系统为客户提供高可靠性的服务。在大多数模式下,集群中所有的计算机拥有一个共同的名称,集群内任一系统上运行的服务可被所有的网络客户所使用。Cluster 必须可以协调管理各分离的组件的错误和失败,并可透明地向 Cluster 中加入组件。一个 Cluster 包含多台(至少2台)拥有共享数据存储空间的服务器。任何一台服务器运行一个应用时,应用数据被存储在共享的数据空间内。每台服务器的操作系统和应用程序文件存储在其各自的本地储存空间上。Cluster 内各节点服务器通过一个内部局域网相互通信。当一台节点服务器发生故障时,这台服务器上所运行的应用程序将在另一台节点服务器上被自动接管。
集群的种类
集群可以分为 3 类:
(1) 高可用性集群(HA,High Availability Cluster)
高可用性集群的主要功能是提供24h不间断服务;通常是由多个节点构成,当单个节点出现故障时,系统其他节点接替服务,整个系统仍能继续正常对外提供服务。
(2) 负载均衡集群(LB,Load Balance Cluster)
负载均衡集群将系统的整体负载合理地分配到各个节点上,使得每个节点都不会因为超负荷工作而崩溃;并且系统整体负载需求大于系统整体负载能力时,可以通过增加系统节点平滑地拓展系统负荷能力,可以满足大并发高容量业务的需求。
(3) 高性能集群(HP,High Performance Cluster,也叫超级计算集群)。
高性能集群,是通过将多台机器连接起来同时处理复杂的计算问题的计算机群,可以满足天气预测,天体运行,人口统计等所需的大数据量计算要求,比如现在的云。
集群系统采用的操作系统主要有VMS、UNIX、WindowsNT和Linux,在实际生产环境中,一般Linux都是自己定制的居多,其中直接使用Suse,RedHat的也有,但相对较少。
集群配置常用软件
·负载均衡集群配置常用的软件有:lvs、haproxy;
·高可用集群配置常用的软件有:heartbeat、keepalived、corosync+openairs(pacemaker)RHCS、ultramokey;
·高性能集群配置常用的软件有:bowerful;
负载均衡集群
LB负载均衡集群,最简单的方法就是通过在DNS中设置多个A记录,来实现 DNS 轮询,来达到负载均衡的效果,当然这个是最简单,配置维护也最简单的方案,在很多场景中都可以见到,但是它不能区分服务器的差异,也不能反映服务器的当前运行状态。
还有一种比较有名的就是 LVS 负载均衡了。
简介
LVS 是的缩写,是由章文嵩博士的基于Linux内核的负载均衡技术。目的是把很多实际的计算机节点集中在一起 ,组成一个虚拟的高可伸缩、高可用的服务器。
基础架构
LVS 建筑于实际的服务器集群之上,用户看不到提供服务的多台实际服务器,而只能看见一台作为负载平衡器的服务器。实际的服务器通过高速局域网或地理上分散的广域网连接。实际服务器的前端是一台负载平衡器(Director),他将用户的请求调度到实际服务器(RealSever)上完成,这样看起来好像所有服务都是通过虚拟服务器来完成的。Linux 虚拟服务器能够提供良好的可升级性、可靠性和可用性。用户可以透明地增加或减少一个节点,可以对实际服务器进行监测,如果发现有节点失败就重新配置系统。
常用术语介绍
Diretor:负载均衡器,也叫调度器,指的是在服务前端用户实现集群效果的服务器,可在上面配置实际的业务服务,也可配置调度算法只用于集群服务,不处理实际业务请求。
RealServer:处理实际业务请求的服务器,一般有很多台。
CIP:发送请求的客户端ip。
VIP:客户都访问的公网ip,Director的虚拟ip。
DIP:Director的实际ip。
RIP:RealServer的ip。
调度算法
Director如何将客户端发送过来的请求转发到实际的业务服务器上的算法叫做调度算法。
LVS调度算法分为静态调度算法(Fixed Scheduling Method)还有动态调度算法(Dynamic Scheduling Method)。
(1) 静态调度算法指的是不考虑实际业务服务器RealServer当前连接的个数的调度算法。静态调度算法有以下四个:
·轮调(RR,Round Robin),调度器Director将请求按次序轮流发到实际服务器RealServer上,而不考虑当前各服务器的实际负载情况;
·加权轮调(WRR,Weighted Round Robin),指的是按照RealServer实际的处理能力来调度处理访问请求。此处的处理能力指的是硬件上的,比如CPU和内存相关的一些参数;
·目标地址哈希(DH,Destination Hashing),是针对目标IP地址的负载均衡,是一种可以提高缓存命中率的静态映射算法,通过一个散列(Hash)函数将一个目标IP地址映射到一台服务器。目标地址散列调度算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空;
·源地址哈希(SH,Source Hashing),与目标地址哈希调度算法相反,它根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。在实际应用中,源地址散列调度和目标地址散列调度可以结合使用在防火墙集群中,它们可以保证整个系统的唯一出入口。
(2) 动态调度算法指的是考虑实际业务服务器当前连接的个数的任务调度算法。服务器的连接分为活动连接与非活动连接,其中活动连接是指状态为Established的连接。动态调度算法有以下六个:
·最少连接(LC,Least Connections),此调度算法根据计算出来的负载值overhead来进行请求任务的调度,负载值overhead的计算方法是
overhead = 活动连接个数*256 + 非活动连接个数,overhead值越小,请求就越优先被调度到此服务器上;
·加权最少连接(WLC,Weighted Least Connections),这是默认的调度算法,也是最优的调度算法,其overhead计算公式是
overhead= (活动连接个数*256 + 非活动连接个数)/weight;
·最短期望延迟(SED,Shortest Expected Delay Scheduling),此算法不考虑非活动连接的个数,只考虑活动连接数值,overhead计算公式是
overhead =(活动连接个数+1)*256/weight,加1是考虑当连接个数为0时服务器调度的公平性;
·最小队列调度(NQ,Never Queue Scheduling),此算法是在SED算法基础上改良的。只要服务器上的连接个数为0,就优先给其一个连接请求,若连接个数不为0时,overhead计算方法与SED算法一样;
·基于本地的最少连接(LBLC,Locality-Based Least Connections),该算法是DH算法的动态实现,针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用"最少链接"的原则选出一个可用的服务器,将请求发送到该服务器;
·带复制的基于本地的最少连接(LBLCR, Locality-Based Least Connections with Replication Scheduling),也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与 LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标 IP地址找出该目标 IP 地址对应的服务器组,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按"最小连接"原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
分类
LVS按照其转发数据包方式的不同可分为三类:
(1) 基于目标地址转换(Network Address Translation)的集群,LVS-NAT
请求数据包从CIP发出,到达VIP,Director接收请求后,根据自身配置好的调度算法,将数据包经由DIP发出,送至实际接收请求的业务服务器RealServer。RealServer接收到数据包后,将应答信息发送至Director,经由VIP送至Client。其数据包进出栈路径如下:
数据包入栈经过路径:CIP->VIP->DIP->RIP
数据包出栈经过路径:RIP->DIP->VIP->CIP
LVS-NAT集群的特点是:
·集群节点Director的DIP和RealServer的RIP必须在同一网段;
·RIP是局域网地址,和DIP进行通信;
·Director处理进出集群的请求;
·DIP设置为默认网关;
·Director可使用端口映射,VIP与RIP上的端口可以不一样;
·RealServer可使用任何操作系统;
·Director可能会成为集群的瓶颈,因为能够带动起来的RealServer数量是受Director所限制的。
(2) 直接路由(Director Routing)的集群,LVS-DR
LVS-DR集群上的所有节点都配置有VIP,只是RealServer上VIP并不是配置在服务器的eth接口,而是lo接口上,并不能响应本地广播请求。
请求数据包从CIP发出,到达VIP,Director接收请求后,根据自身配置好的调度算法,将数据包经由DIP发出,经过Switch广播送至实际接收请求的业务服务器RealServer上。RealServer接收到数据包后,应答信息不再经过Director转发,而是通过自己的DIP直接发出,经过Switch、Router等设置送至Client。数据包进出栈路径如下:
数据包入栈经过路径:CIP->VIP->DIP->RIP
数据包出栈经过路径:DIP->CIP
LVS-DR集群的特点是:
·RealServer与Director必须在同一物理网络中,相互间可以通过mac通信;
·RIP可使用公网地址,若Director有错误,可以直接配置DNS A记录指向RealServer;
·Director只处理进栈请求,不负责出栈数据包;
·RealServer网关不指向Director;
·Director不能做端口映射;
·LVS-DR集群可以处理的请求比LVS-NAT多。
(3) 基于IP隧道(IP Tunnel)的集群,LVS-TUN
LVS-TUN集群的架构与LVS-DR的相同,只是各自节点所处的物理位置所在网段不同,实现的是异地集群系统。其特点是:
·RIP、DIP可以都是公网地址;
·RealServer、Director应该在不同物理网段上;
·RIP必须是公网地址;
·Director只需处理进栈请求,不负责出栈数据包,不能换端口映射;
·RealServer的操作系统必须可以支持ip隧道。
集群配置
首先先查看主机内核是否支持ipvs,使用命令:
grep -i ‘ipvs’ 或
grep –i ‘ip_vs’ /boot/config-`uname -r`.el5
若有显示config_ip_VS=m,则表示linux内核已将ipvs编译好了,剩下的就是配置ipvsadm。
命令小解
Ipvsadm命令参数如图:
举例如下:
[root@localhost ~]# ipvsadm -A -t 192.168.100.1:80 -s rr -p 600
以上表示在内核的虚拟服务器列表中添加一条192.168.100.1的虚拟服务器记录,并且指定此虚拟服务器的服务端口为80,然后指定此虚拟服务器的调度方法为轮询,并且在每个real server上的持续服务时间为600秒,即10分钟
[root@localhost ~]# ipvsadm -A -t 192.168.100.1:21 -s wlc
以上表示在内核的虚拟服务器列表中又添加了一条192.168.100.1的虚拟服务器,此虚拟服务器的服务端口为21,即FTP服务。使用的调度算法为wlc,即加权最少连接接算法。
[root@localhost ~]# ipvsadm -a -t 192.168.100.1:80 -r 192.168.100.2:80 –g
[root@localhost ~]# ipvsadm -a -t 192.168.100.1:80 -r 192.168.100.3:80 –g
以上两条设置表示在虚拟服务器192.168.100.1中添加两条新的RealServer记录,两个RealServer的IP分别为192.168.100.2和192.168.100.3,参数“-g”指定了虚拟服务器的工作模式为直接路由模式,即DR模式。
配置
假设当前需求是要配置一个集群能够承载5000个web并发请求连接,一个RealServer能承受的最大并发连接是3000,则需要两个RealServer。Director的ip假设是192.168.100.1,两个RealServer的ip分别是192.168.100.2和192.168.100.3,则配置步骤如下:
(1)使用yum分别配置两台RealServer上的web服务,可使用命令yum install httpd –y,配置好后,为各自的主页写入不同的内容;
(2)在Director中配置LVS-NAT集群服务、端口以及调度算法,使用命令
ipvsadm -A -t 192.168.100.1:80 -s rr
(3)向集群中添加两个RealServer,使用
ipvsadm -a -t 192.168.100.1:80 -r 192.168.100.2:80 –m
ipvsadm -a -t 192.168.100.1:80 -r 192.168.100.3:80 –m
打开浏览器,输入Director的ip地址,不断刷新,即可看到负载的效果。
使用ipvsadm –L –n 可在终端显示负载情况。
当重启ipvsadm服务时,以上配置会被清空,如果想要保存,则使用service ipvsadm save可将配置保存到/etc/sysconfig/ipvsadm文件中,此方法当服务器重启时失效。若想永久保存,必须把以上配置写出脚本。
配置
LVS-DR的配置相对LVS-NAT比较麻烦点,还必须配置RealServer不响应VIP的arp广播包,有三个办法:直接使用arptables配置arptables规则;修改内核参数,将vip配置到跟网卡无关的接口上,比如lo;让路由器直接绑定到固定的vip上,但前提是有路由器的操作权限。基于多种考虑,此处选择第二种,修改内核参数。
假设当前需求是要配置一个集群能够承载5000个web并发请求连接,一个RealServer能承受的最大并发连接是3000,则需要两个RealServer。地址规划如下:
配置步骤如下:
(1) LVS在Director Server上的配置
首先在Director上绑定一个VIP,此IP用于对外提供服务,执行如下命令:
[root@localhost ~]#ifconfig eth0:0 192.168.12.135 broadcast 192.168.12.135 netmask 255.255.255.255 up
此处在eth0设备上绑定了一个虚拟设备eth0:0,同时设置了一个虚拟IP是192.168.12.135,也就是上面我们规划的IP地址,然后指定广播地址也为192.168.12.135,需要特别注意的是,这里的子网掩码为255.255.255.255。
然后给设备eth0:0指定一条路由,执行如下指令:
[root@localhost ~]#route add -host 192.168.12.135 dev eth0:0
[root@localhost ~]#echo "1" >/proc/sys/net/ipv4/ip_forward
指令中,参数值为1时启用ip转发,为0时禁止ip转发。其实在DR模式中,开启系统的包转发功能不是必须的,而在NAT模式下此操作是必须的。
然后开始配置ipvs,执行如下操作:
[root@localhost ~]#ipvsadm -C
[root@localhost ~]#ipvsadm -A -t 192.168.12.135:80 -s rr -p 600
[root@localhost ~]#ipvsadm -a -t 192.168.12.135:80 -r 192.168.12.246:80 -g
[root@localhost ~]#ipvsadm -a -t 192.168.12.135:80 -r 192.168.12.237:80 -g
上面操作中,第一行是清除内核虚拟服务器列表中的所有记录,第二行是添加一条新的虚拟IP记录。这个新的IP是192.168.12.135,同时指定持续服务时间为600秒。第三、四行是在新加虚拟IP记录中添加两条新的Real Server记录,并且指定LVS 的工作模式为直接路由模式。
接着启动LVS服务,执行如下操作:
[root@localhost ~]#ipvsadm
(2) LVS在RealServer上的配置
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev lo:0
echo “1” >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo “2” >/proc/sys/net/ipv4/conf/lo/arp_announce
echo “1” >/proc/sys/net/ipv4/conf/all/arp_ignore
echo “2” >/proc/sys/net/ipv4/conf/all/arp_announce
此操作是在回环设备上绑定了一个虚拟IP地址,并设定其子网掩码为255.255.255.255,与Director上的VIP保持互通,然后禁止了本机的ARP请求。
由于VIP地址是Director和所有的RealServer共享的,如果有ARP请求VIP地址时,Director与所有RealServer都做应答的话,就出现问题了,因此,需要禁止RealServer响应ARP请求。
.高可用集群
当集群系统内某一台服务器出现故障时,其备援服务器便立即接管该故障服务器的应用服务,继续为前端的用户提供服务。
从客户端看来,集群中的所有服务器是一个系统,就像一台大型的计算机系统,其上运行着客户端需要的应用服务。在一年之内可达99.99%可用性时,这样的集群系统我们称为高可用性的集群系统。
高可用集群通常有两种工作方式:
·容错系统:通常是主从服务器方式。
·互备系统:集群中所有的节点都处于活动状态,它们承担系统的工作负载。
在高可用性的集群系统中,由于是多台服务器在高可用性的集群系统软件的管理下为客户端提供服务,故每一个计算机的部件都有冗余备份,其中最重要的是数据存放的介质要有冗余保护,一旦某个部件出现问题,冗余部件会自动接管故障部件的工作,也就是说某台服务器出现故障,则备份服务器将在集群软件的指挥下自动接管故障服务器的工作,从而消除了此故障对整个系统的影响。
参考资料: