Linux集群基础

Linux集群基础

作者:Danbo 时间:2015-7-12

集群概述

什么是集群?
集群是一组协同工作的服务器实体。用以提供比单一服务实体更具扩展性和可用性的平台。

集群的分类

1.HPC(High Performance Compute Clutering)
2.HA(High-availabtlity)
3.LB(Load-balance clutering)

HA集群的概念

1.容错;2.可用性;3.可靠性;4.热备份;5.数据完整性

HA集群的三种方式
1.主从方式:包含两台服务器及一个或多个服务。一台服务器运行服务,另一条作为备份服务器。
2.对称方式:包含两台服务器及一个或多个服务。两台服务器都运行服务开发为备份。
3.多机器方式:由多台服务器及多个服务组成。故障时切换至一组服务中的一台。

主从方式(非对称方式)(美国总统副总统)

主机工作,备机处于监控准备状况;当主机宕机时,备机接管主机的一切工作,待主机恢复正常后,按使用者的设定以自动或手动方式将服务器切换到主机上运行,数据的一致性通过共享储存系统解决。(在主机与备机之间有串口监控路径,也就是心跳检测机制。另外主备之间要保证切换服务后其服务的连续性,所以在服务所采用数据资料之间也要存在相应的解决机制,这里需要的是共享磁盘阵列。)这样对于客户是切换时透明的。

对称方式(互备互援)(斯巴达双王)

两台主机同时运行各自的服务工作且相互监督情况,当一台主机宕机,另一台主机立即接管它的一切工作,保证工作实时,应用服务系统的关键数据存放在共享存储系统中。(我们在做集群的时候主要时为了避免单点故障,但是想要让单点故障称为0,几乎是不可能,就像数据的二叉树分发,最后总会有一个支点。只能保证在几个9下正常运行。)

多机器方式(集群工作方式)(美国整个政权体制)

多台主机一起工作,各自运行一个或几个服务,各位服务定义一个或多个备用主机,当某个主故障时,运行在其上的服务就可以被其他主机接管。

HA集群中的技术词汇

1.服务(Service):一系列提供集群功能的资源,比如IP地址、共享存储。
2.浮动IP(Float IP):比如在主从方式中的两台主机上,当A机切换到B机,但是这种切换对客户来说必须是透明的,这就要求把之前A机的IP地址浮动到B机上。
3.成员服务器或节点(Member Server or Node)
4.失效域(Failover Domain):在HA集群当中提供特定资源的成员服务的集合。一个失效域中可能会存在多个服务器,当一天服务器宕掉后,可以将服务转移到失效域中的其他服务器。设计的时候我们要考虑到失效域范围,过大的话会造成资源浪费,过小的话又会造成可用性过低。
5.心跳(Heartbeat):集群当中相互监控的一种方法。保活机制。
6.共享存储(Share Storage):防止主备切换的时候造成数据的不一致。
7.单一故障点(Single Point of Failure,SPOF):比如磁盘存储我们用RAID1或者是RAID5,网路我们可以使用Ether-Channel来做多条链路的绑定。电源我们可以使用UPS。
8.仲裁(Quorum):
当主机down掉后,备份机之间由谁来接管主机以提供服务,此时就需要仲裁器来决定。

9.失效迁移(Failover):主机宕掉后的切换过程。
10.监视器(Watchdog):负责监视对方是否存活的软件或硬件。
11.可编程电源控制器(Programable Power Controller or Smart Power Switch)

LB集群概念

什么是LB集群
使用专门的路由算法将数据包分散到多个真实服务器中进行处理,从而达到负载均衡的作用。

硬件与软件的区别
硬件:F5
软件:LVS、Nginx、HAProxy、Bind

七层、四层、三层

LVS集群系统简介

LVS基于Linux内核实现四层或三层负载均衡调度。(基于ipvsadm内核,同iptables)

LVS最先采用IP隧道方式使成员服务武器可以跨越多个子网。

组成部分:IPVS内核模块、IPVSadmin、控制端软件。

三种路由方式:VS-NAT、VS-TUN、VS-DR 

VS-NAT

参考之前的文章

VS-Tun

这种模式会遇到一个问题:非源地址路由:我们知道调度器和RS所配置的IP地址与RS相同,并且由于调度器和RS不在同一个物理网段,这就导致RS在回包的时候由于源IP与所在的机房配置不在同一个网段,这就需要跟RS所处机房的运维人员沟通,让其在路由器上配置支持非源站路由。

VS-DR

技术词汇

CIP(Clinet IP Address)
DGW(Director Gateway)
VIP(Virtual IP)
PIP(Primary IP)(主DR的内网IP地址)
SIP(Slave IP)(备DR的内网IP地址)
DIP(Director IP)(DGW的IP地址)
RIP(Real Server IP)

详细参考之前的文章

调度算法

1.轮叫调度(Round-Robin Scheduling,RR)
调度器通过“轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等的对待每一台服务器,而不管服务器上实际的连续数和系统负载。
轮叫调度算法假设所有服务器处理性能均相同,不管服务器的当前连接数和相应速度。该算法相对简单,不适用于服务器组中处理性能不一的情况,而且当请求服务器时间变化比较大时,轮叫调度算法容易导致服务器间的负载不平衡。虽然Round-Robin DNS方法也是以轮叫调度的方式将一个域名解析到多个IP地址,但轮叫DNS方法的调度粒度是基于每个域名服务器的域名服务器对域名解析的缓存会妨碍轮叫解析域名生效,这会导致服务期间负载的严重不平衡。这里,IPVS轮叫调度算法的粒度是基于每个连接的,同一用户的不同链接都会被调度到不同的服务器上,所以这种细粒度的轮叫调度要比DNS的轮叫调度优越很多。

2.加权轮叫(Weighted Round Robin,WRR)
调度器通过“加权轮叫”调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多多的访问流量。调度器可以自动问询真实服务器的负载情况,冰女动态地调整期权值。
WRR算法可以解决服务器间性能不一的情况,它用相应的权值表示服务器的处理性能,服务器的缺省权值为1.假设服务器A的全职为1,B的全职为2,则表示服务器B的处理性能时A的两倍。加权轮叫调度算是

3.最少链接(Least Connections,LC)
调度器通过“最少连接”调度算法动态地将网路请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有近似的系统性能,采用“最小连接”调度算法可以较好地均衡负载。( 最小连接调度算法是把新的连接请求分配到当前连接最小的服务器。最小连接调度是一种动态调度算法,它通过服务器当前活跃的连接数来估计服务器的负载情况。调度器需要记录各个服务器已经建连接数的数目,当一个请求被调度到某台服务器,其连接数加1;当链接中断或超,其连接数减一。在系统实现时,,我们也引入当服务器的全职为零时,表示该服务器不可用而不被调度。)
最小连接调度算法流程:

当各个服务器有相同的处理性能时,最小连接调度算法能把负载变化大的请求分布平滑到各个服务器上,所有处理时间比较长的请求不可能被发送到同一台服务器上。但是,当各个服务器的处理能力不同时,该算法并不理想,因为TCP连接处理请求后会进入TIME_WAIT状态,TCP的TIME_WAIT一般为2min,此时连接占用服务器资源,所以会出现这样情形,性能高的服务器已处理所收到的连接,连接处于TIME_WAIT状态,性能低的服务器已经忙于处理所收到的连接,还不断地收到新的连接请求。

4.加权最少链接(Weighted Least Connections,WLC)(LVS默认算法)
在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动链接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
问题1:加权最小连接算法是最小连接调度的超集,各个服务器用相应的全职表示其处理性能。服务器的缺省权值为1,系统管理员可以动态第设置服务器的权值。加权最小连接调度在调度新连接时可能使服务器的已建立连接数和其权值成比例。比如基于80端口的LVS服务,我想问的是WLC的最小连接是RS的80端口的连接数还是所有TCP的连接数。
答:IPVS在内核中的负载均衡调度是以连接为粒度的。在HTTP协议(非持久性)中,每个对象从WEB服务器上获取都需要建立一个TCP连接,同一用户的不同请求被调度到不同的服务器上,所以这种细粒度的调度在一定程度上可以避免单个用户访问的突发性引起服务器间的负载不平衡。

5.基于局部性的最少链接(Locality-Based Least Connections,LBLC)
“基于局部性的最少链接”调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将请求发送到该服务器。
目前主要用于Cache集群系统,因为在Cache集群中客户请求报文的目标IP地址是变化的。这里假设任何后端服务器都可以处理任一请求,算法的设计目标是在服务器的负载基本平衡的情况下,将相同目标IP地址的请求调度到同一台服务器,来提高各台服务器的访问局部性和贮存Cache命中率,从而整个集群系统的处理能力。 LBLC调度算法先根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到服务器;若服务器不存在,或者该服务器超载且有服务器处于其一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将请求发送到该服务。其算法的详细流程如下:

此外,对关联变量ServerNode[dest_ip]要进行周期性的垃圾回收(Garbage Collection),将过期的目标IP地址到服务器关联进行回收。过期的关联项是指哪些当前时间(实现时)

 

6.带复制的基于局部性最少链接(Locality-Based Least Connections with Replication,LBLCR)
“带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组, 按“最小连接”原则从这个集群中中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。

7.目标地址散列(Destination Hashing,DH)
“目标地址散列”调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

8.源地址散列(Source Hashing)
“源地址散列”调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且为超载,将请求发送到该服务器,否则返回空。

什么是权?
权是对服务器能力的评估;权是相对的比例。先找出一个基准服务器,并将其值设置为1,其他服务器在此基础上设置整数倍。

使用WLC时需要注意的
这种算法有可能造成短期分配不均衡的问题,这种情况发生在当加入一台新的服务器到后端集群当中的时候,初期会造成所有的连接都分配到这台新添加的服务器上,直到新加入的服务器上的连接数与之前存在的服务器上的连接数相等的后为止。这样会在短时间内给新添加的服务器造成过大的流量,我们通常会将相应的服务器配置成静态服务器(quiesce),此时当有新的RS添加进来时,调度器会清空当前的分发列表,重新平均分配,这样新加入的服务器的负载就会平稳的上升,最终所有的RS负载都相等。

LVS调度持续性

保持用户连接和session的必要性
比如当用户登入后,即此时建立了一个会话(session),此时客户端是与其中一台RS建立连接的,之后当用户发起第二次连接时,调度器为其分配另外一台RS,这样就会造成第二台Session并不知道客户端已与第一台Session建立连接了,此时会继续向用户请求登入。实际的解决方式是:1.在其生存周期内仅为一个用户分配一台真实的RS。2.RS之间互相去同步Session。3.所有与RS建立的session列表都存放在同一个存储位置。
保持连接(就是分配单一的RS);session(就是保持session不中断,即登入一次就好了)

LVS提供两种解决方法:
-持续性(Persistence)
LVS在分发的时候将用户包的首部做相应的记录,依靠这个记录去识别单一的用户请求,用于分配单一的RS。

-防火墙标记(Firewall Marks)
相应的数据包在通过路由的过程当中我们给相应的包设置相应的标记(即打标签)。这样呢被打了同样标记的包就被识别出来了。我们知道http端口为80、https为443,此时假如有一个包由http转到https(比如跳转到支付页面时),此时客户到服务器的连接需要保持的(即之前保持的Session要由http传递到https),这里就是用到打标签方式去识别了。在这里我们要明白保持连接是TCP,也就是传输层,而我们打标记是在IP层。(这里要了解iptables)

LVS-DR模式配置实例

我们先看一下LVS-DR模式的拓扑图如下图所示:
我是图

我们在四台虚拟机上其中一台上配置hosts文件:
192.168.244.129   LB1
192.168.244.130   LB2
192.168.244.131   node1
192.168.244.132   node2
然后我们使用scp(secure copy)实现linux文件之间文件复制:
[root@lb1 etc]# scp /etc/hosts lb2:/etc
root@lb2's password:
hosts                                         100%  287     0.3KB/s   00:00
然后分别复制到其余三台Linux虚拟机上。我们之所以不使用DNS主要是减少网络的带宽占用。
然后我们必须在相应的DR上安装apache和ipvsadn。然后为了方便配置LVS,我们可以安装piranha,piranha作用是方便配置和监控LVS的图像化工具,这个工具是通过访问本机的3636端口然后进入piranha的配置界面。

其安装步骤为:
yum -y install gcc    //安装gcc编译器
yum -y install httpd    //安装apache服务器
wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz     //下载ipvsadm1.24。
ln -s /usr/src/kernels/2.6.18-406.el5-x86_64/ /usr/src/linux     //软连接内核版本信息,如果无法链接,此时我们应当安装kernel-devel-2.6.18-398.e15,此后即可安装ipvsadmtar -zxvf ipvsadm-1.2.4.tar.gz

cd ipvsadm-1.2.4
make
makeinstall
/sbin/ipvsadm   //ipvasdm加载到内核
lsmod | grep ip_vs   //验证LVS是否
/etc/init.d/httpd start    //启用apache服务器
/sbin/ipvsadm     //启用ipvsadm管理程序
yum -y install piranha      //安装piranha管理程序。
/etc/init.d/piranha     //启用piranha管理/配置lvs程序
然后通过piranha-passwd为piranha设置密码,默认登录用户名为piranha。
我们通过命令:ssh lb2 yum install -y piranha,来为lb2安装piranha。通过ssh远程登录都lb2,去安装piranha。


其登录界面如下:

上图表示:Control/Monitoring,这个用于查看ipvs的基本状态信息:

 

 

上图表示:Global Setting,这个是为了配置IPVS的界面,我们可以看到有主备的IP地址,和LB的三种可选模式:

 


上图表示:Redundancy(冗余模式),我们可以看到冗余模式是关闭的。而对于LVS来说,单台的DR也是可以运行的。当我们定下enable后显示如上图所示的内容:
1.Heartbeat interval(心 跳检测的间隔)、Assume dead after(三倍的心跳检测时间,没有收到主DR的心跳,那么就备DR则会承担调度作用)、 Headbeat runs on port(定义在哪个接口上去监听心跳检测包,真实环境下,注意此端口不能被防火墙禁用)、Monitor NIC links for failures(监控网卡信息)、Syncdaemon(同步服务状态,即主机上的服务变化是否同步到备机上)

 


上图表示:Virtual Servers(虚拟服务器,指的就是那些真实的服务器,之所以称之为虚拟服务器,是RS组成的集群相当于一个高性能的虚拟服务器):这里有个叫 Sorry Server地址,指的是当所有的真实服务器都宕机的情况下,则访问这条Sorry Server服务器,然后返回给访问用户的提示信息。 (一般指定为外部网络的一台服务器,而不与这些集群处在同一局域网内);Firewall Mark(防火墙标签,这个就是我们上面所讲的);Device:指虚拟IP设置在什么上,所有的虚拟机都是单网卡的虚拟机,因为我们看到默认设置为虚拟网卡eth0:1;Re-entry Time:当一台虚拟机重新加入集群的时候,需要等待多少秒才会加入到集群调度列表当中。(防止由于线路问题或其他问题导致连接震荡);Service timeout:后端真实的服务器失去连接后经过多长时间后宣布其死亡,并将其剔除出选举列表; Quiesce timeout: No表示当RS宕掉后立即剔除转发列表,而当设置为Yes的时候不会将其剔除出列表,而是将其权重设置为0(表示新的访问不会再分配给这台主机,久的访问仍然会访问这台RS。这种设计是基于防止某些间接性或偶然性的连接断开);Load monitoring tool:可以调用rup或ruptime,用于探测后端服务器的承载压力的,但开启后可能会造成不能均衡分发的问题。;Persistence(持续性):后面接秒数,是指客户在这段时间内发起第二次连接,那么就为持续性的为其分配相同的RS;Persistence Network Mask:在某个子网掩码范围内提供持续性。

上图为添加真实服务器

 

Monitoring Scripts:调度器要检测RS的存活性,而这里RS提供的是Web服务,因此调度器可以通过不断的给RS发送Web请求,看RS是否回应来判断RS是否存活。而LVS本身并不提供相应的检测机制,需要自己编写脚本来进行检测,或者使用上述方法也行。
我们在Sending Program里输入:testlink %h,意思就是发送http请求,当返回Expect里面输入的“HTTP”则成功,如果后面是数据库服务器的话,RS肯定是要开端口的,而且要有返回值。

当我们一切配置好的,这些都保存在/etc/sysconfig/ha/lvs.cf文件中,其脚本如下:

serial_no = 23
primary = 192.168.244.129
primary_private = 192.168.244.130
service = lvs
backup_active = 1
backup = 192.168.244.130
heartbeat = 1
heartbeat_port = 539
keepalive = 6
deadtime = 18
network = direct
debug_level = NONE
monitor_links = 0
syncdaemon = 0
virtual httpd {
     active = 1
     address = 192.168.1.100 eth0:1
     sorry_server = 8.8.8.8
     vip_nmask = 255.255.255.0
     port = 80
     persistent = 3
     send = "GET / HTTP/1.0\r\n\r\n"
     expect = "OK"
     use_regex = 0
     send_program = "testlink %h"
     load_monitor = none
     scheduler = wlc
     protocol = tcp
     timeout = 6
     reentry = 15
     quiesce_server = 0
     server node1 {
         address = 192.168.244.131
         active = 1
         weight = 1
     }
     server node2 {
         address = 192.168.244.132
         active = 1
         weight = 1
     }
}

testlink脚本:我们将其放入/bin目录下,方便执行。chmod 755 /bin/testlink

#!/bin/bash
/usr/bin/links -dump 1 $1 > /dev/null 2>&1
if [ $? -eq 0 ];then
        echo OK
else
        echo Fail
fi

我们将其复制到lb2上并且加上执行权限:
scp /bin/testlink lb2:/bin
ssh lb2 chmod 755 /bin/testlink
此时我们在lb1上修改node1和node2的web页面
ssh node1 "echo node1 > /var/www/html/index.html"
ssh node2 "echo node2 > /var/www/html/index.html"
关闭node1和node2还有DR上的VIP的ARP功能(此前我们在lb1和lb2上安装:yum -y install arptables_jf)
同理我们可以通过一个脚本来完成:

#!/bin/bash
VIP=192.168.1.100
RIP=192.168.244.131
arptables -F
arptables -A IN -d $VIP -j DROP    #不听别人说它是VIP。
arptables -A OUT -s $VIP -j mangle --mangle -ip -s $RIP    #往外走的数据包如果源IP是VIP,则调用mangle将源IP地址换为RIP(本来广播说我是VIP结果换成了RIP,即不说我是VIP)
/sbin/ifconfig eth0:1 $VIP broadcast $VIP netmask 255.255.255.255 up  #在当前的物理网卡绑虚网卡并绑定VIP
/sbin/route add -host $VIP dev eth0:1   #添加一台通往VIP的默认路由。

并将这些脚本复制到所有的RS机器上。这里我们需要有一定的iptables的相关知识。

或者通过一下的方式关闭node上的arp响应
[root@node1 ~]# echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
[root@node1 ~]# echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
[root@node1 ~]# echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
[root@node1 ~]# echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

转载于:https://www.cnblogs.com/danbo/p/4641367.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值