Nginx+Keepalived+LVS高可用集群—-相关知识回顾

1、原理回顾

1.1、集群知识回顾

集群特点:

1)高性能performance。 一些需要很强的运算处理能力比如天气预 ,核试验等。这需要上千台计算器协同来完成这个工作的,共同分担计算任务。

2)价格相对便宜且可集中管理: 通常一套系统集群架构,只需要几台或数十台服务器主机即可,且这些计算机的性能实际使用中也不必太高,甚至可利旧老式的服务器,与动则上百王的专用超级计算机具有更高的性价比。

3)弹性伸缩性: 当服务器负载压力增长的时候,系统扩展将变得相对容易,从而来满足业务增长需求,且不降低服务质量。

4)高可用性: 尽管部分硬件和软件发生故障,整个系统的服务必须是7*24小时运行的,集群内成员节点故障对用户透明。一部分服务器宕机了业务不受影响,一般耦合度没有那么高,依赖关系没有那么高。

********************************* 集群架构按照功能和结构一般分以下几类*****************************

1)负载均衡集群(Loadbalancingclusters)简称LBC

2)高可用性集群(High-availabilityclusters)简称HAC

3)高性能计算集群(High-perfomanceclusters)简称HPC

4) 格计算(Gridcomputing)

常主要用前三个,负载均衡和高可用集群式在互联 行业尤其是最常用的集群架构。

(1)负载均衡集群

负载均衡集群为:把很多客户集中访问的请求负载压力可能尽可能平均的分摊到计算机集群中处理。客户请求负载通常包括应用程度处理负载和 络流量负载。这样的系统非常适合向使用同一组应用程序为大量用户提供服务。每个节点都可以承担一定的访问请求负载压力,并且可以实现访问请求在各节点之间动态分配,以实现负载均衡。从而实现集群分担访问流量(负载均衡)和保持业务的连续性(高可用)。

负载均衡集群的实现方式,一般通过一个或多个前端负载均衡器将客户访问请求分发到后端一组服务器(即我们的RS上:真实服务器)上,从而达到整个系统的高性能和高可用性。一般高可用性集群和负载均衡集群会使用类似的技术,或同时具有高可用性与负载均衡的特点。

(2)高可用性集群

一般是指当集群中的任意一个节点失效的情况下,节点上的所有任务自动转移到其他正常的节点上,并且此过程不影响整个集群的运行,不影响业务的正常对外访问。

这类集群中通常运行着两个或两个以上的一样的节点,当某个主节点出现故障的时候,那么其他作为从 节点的节点就会自动接替主节点上面的任务。从节点可以接管主节点的资源(IP地址,架构身份等),此时用户不会发现提供服务的对象从主节点转移到从节点。

高可用性集群的作用:当一个机器宕机另一台进行接管,对用户透明。比较常用的高可用集群开源软件有:keepalive,heardbeat。

(3)高性能计算集群

高性能计算集群采用将计算任务分配到集群的不同计算节点儿提高计算能力,因而主要应用在科学计算领域。比较流行的HPC采用Linux操作系统和其它一些免费软件来完成并行运算。这一集群配置通常被称为Beowulf集群。这类集群通常运行特定程序以发挥HPCcluster的并行能力。这类程序一般应用特定的运行库, 比如专为科学计算设计的MPI库。HPC集群特别适合于在计算中各计算节点之间发生大量数据通讯的计算作业,比如一个节点的中间结果或影响到其它节点计算结果的情况。

常用集群软硬件:

常用开源集群软件有:lvs,keepalived,haproxy,nginx,apache,heartbeat

常用商业集群硬件有:F5,Netscaler,Radware,A10

1.2、LVS原理

LVS(linux virtual server)linux虚拟服务器,是一个虚拟的服务器集群系统,可以在unix/linux平台下实现负载均衡集群功能。该项目在1998年5月由我国章文嵩博士组织成立。该集群基于IP层基于内容请求分发的负载平衡调度解决方法,并在Linux内核中实现了这些方法,将一组服务器构成一个实现可伸缩的、高可用 络服务的虚拟服务器。

一般来说,LVS集群采用三层结构,层与层之间相互独立,每一个层次提供不同的功能,但三者会通过高速 络相连接,如100Mbps交换 络、Myrinet和Gigabit 络等。使用高速的 络,主要为避免当系统规模扩大时互联 络成为整个系统的瓶颈。

负载调度器(load balancer,又称为DR,它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的,即我们的VIP(虚拟IP地址)。调度器是服务器集群系统的唯一入口点(Single Entry Point),它可以采用IP负载均衡技术、基于内容请求分发技术或者两者相结合。在基于内容请求分发技术中,服务器可以提供不同的服务,当客户请求到达时,调度器可根据请求的内容选择服务器 执行请求。因为所有的操作都是在Linux操作系统核心空间中将完成的,它的调度开销很小,所以它具有很高的吞吐率。另外,为保证集群的高可用,调度器上有资源监测进程来时刻监视各个服务器结点的健康状况。当服务器对ICMP ping不可达时或者探测她的 络服务在指定的时间没有响应时,资源监测进程通知操作系统内核将该服务器从调度列表中删除或者失效。这样,新的服务请求就 不会被调度到坏的结点。资源监测进程能通过电子邮件或传呼机向管理员 告故障。一旦监测进程到服务器恢复工作,通知调度器将其加入调度列表进行调度。另 外,通过系统提供的管理程序,管理员可发命令随时可以将新机器加入服务来提高系统的处理性能,针对调度器本身,一般也设置主从结构,保证DR的高可用,集群DR上配置两个心跳(Heartbeat)进程[分别在主、从调度器上运行,它们通过串口线和UDP等心跳线来相互定时地汇 各自的健康状况。当从调度器不能听得主调度器的心跳时,从调度器通过ARP欺骗 (Gratuitous ARP)来接管集群对外的Virtual IP Address,同时接管主调度器的工作来提供负载调度服务。当主调度器恢复时,这里有两种方法,一是主调度器自动变成从调度器,二是从调度器释放 Virtual IP Address,主调度器收回Virtual IP Address并提供负载调度服务。这里,多条心跳线可以使得因心跳线故障导致误判(即从调度器认为主调度器已经失效,其实主调度器还在正常工作)。另外为了防止主DR宕机切换从DR时,用户会话/已建立连接的状态丢失,LVS调度器在Linux 内核中实现一种高效状态同步机制,将主调度器的状态信息及时地同步到从调度器。当从调度器接管时,绝大部分用户已建立的连接会持续下去。

服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。根据业务不同峰值,可弹性扩展服务器池,整个系统的性能基本上可以随着服务器池的结点数目增加而线性增长。

共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务;共享存储通常是数据库、 络文件系统或者分布式文件系统。动态更新的数据一般存储在数据库系统中,同时数据库会保证并发 访问时数据的一致性。静态的数据可以存储在 络文件系统(如NFS/CIFS)中,但 络文件系统的伸缩能力有限,一般来说,NFS/CIFS服务器只能支持3~6个繁忙的服务器结点。对于规模较大的集群系统,可以考虑用分布式文件系统,如AFS、GFSCoda和 Intermezzo等。分布式文件系统可为各服务器提供共享的存储区,它们访问分布式文件系统就像访问本地文件系统一样,同时分布式文件系统可提供良好的伸缩性和可用性。此外,当不同服务器上的应用程序同时读写访问分布式文件系统上同一资源时,应用程序的访问冲突需要消解才能使得资源处于一致状 态。这需要一个分布式锁管理器(Distributed Lock Manager),它可能是分布式文件系统内部提供的,也可能是外部的。开发者在写应用程序时,可以使用分布式锁管理器来保证应用程序在不同结点上并发访 问的一致性。之所以使用共享存储,是考虑到当 络服务需要有相同的内容,非共享架构中每台服务器需要将相同的内容复制到本地硬盘上。当系统存储的内容越多,这种无共享结构(Shared-nothing Structure)的代价越大,因为每台服务器需要一样大的存储空间,任何的更新需要涉及到每台服务器,系统的维护代价会非常高。

Graphic Monitor是为系统管理员提供整个集群系统的监视器,它可以监视系统的状态。Graphic Monitor是基于浏览器的,所以无论管理员在本地还是异地都可以监测系统的状况。为了安全的原因,浏览器要通过HTTPS(Secure HTTP)协议和身份认证后,才能进行系统监测,并进行系统的配置和管理。

在LVS框架中,提供了含有三种IP负载均衡技术的IP虚拟服务器软件IPVS、基于内容请求分发的内核Layer-7交 换机KTCPVS和集群管理软件。可以利用LVS框架实现高可伸缩的、高可用的Web、Cache、Mail和Media等 络服务;在此基础上,可以开 发支持庞大用户数的、高可伸缩的、高可用的电子商务应用。LVS服务器集群系统具有良好的伸缩性,可支持几百万个并发连接。配置100M 卡,采用VS/TUN或VS/DR调度技术,集群系统的吞吐量可高达1Gbits/s;如配置千兆 卡,则系统的最大吞吐量可接近10Gbits/s。LVS集群系统已被应用于很多重负载的站点。

LVS:Linux Vritual Server,项目的主页(http://www.LinuxVirtualServer.org/

LVS由ipvs和ipvsadm两部分组成:

1)ipvs:ipvs是工作在内核空间netfilter的input链上的框架,通过用户空间工具进行管理,其中是真正生效实现调度的代码。

2)ipvsadm:ipvsadm负责为ipvs内核框架编写规则,是管理配置内核中ipvs程序的用户空间的管理工具。

1.3.2、可伸缩媒体服务

Cache服务器采用本地硬盘来存储可缓存的对象,因为存储可缓存的对象是写操作,且占有一定的比例,通过本地硬盘可以提高I/O的访 问速度。Cache服务器间有专用的多播通道(Multicast Channel),通过ICP协议(Internet Cache Protocol)来交互信息。当一台Cache服务器在本地硬盘中未命中当前请求时,它可以通过ICP查询其他Cache服务器是否有请求对象的副本, 若存在,则从邻近的Cache服务器取该对象的副本,这样可以进一步提高Cache服务的命中率。

1.3.4、可伸缩邮件服务

这样,客户所看到的只是在Virtual IP Address上提供的服务,而服务器集群的结构对用户是透明的。对改写后的 文,应用增量调整Checksum的算法调整TCP Checksum的值,避免了扫描整个 文来计算Checksum的开销。

在 一些 络服务中,它们将IP地址或者端口 在 文的数据中传送,若我们只对 文头的IP地址和端口 作转换,这样就会出现不一致性,服务会中断。所以,针 对这些服务,需要编写相应的应用模块来转换 文数据中的IP地址或者端口 。我们所知道有这个问题的 络服务有FTP、IRC、H.323、 CUSeeMe、Real Audio、Real Video、Vxtreme / Vosiac、VDOLive、VIVOActive、True Speech、RSTP、PPTP、StreamWorks、NTT AudioLink、NTT SoftwareVision、Yamaha MIDPlug、iChat Pager、Quake和Diablo。

1.3.6、通过IP隧道实现虚拟服务器(LVS/TUN)

VS/DR的体系结构如图

Keepalived是对VRRP的一个实现, VRRP(虚拟路由冗余协议,Virtual Router Redundancy Protocol)的目的是为了解决静态路由单点故障问题,它通过一种竞选(election)协议动态地将路由任务交给LAN中虚拟路由器中的某台VRRP路由器。

如上图所示Keepalived的功能体系结构,大致分两层:用户空间(user space)和内核空间(kernel space)。Keepalived的所有功能是配置keepalived.conf文件来实现的。

内核空间:主要包括IPVS(IP虚拟服务器,用于实现 络服务的负载均衡)和NETLINK(提供高级路由及其他相关的 络功能)两个部份。

1)VRRP路由器: VRRP路由器就是一台路由器,只不过上面运行了VRRPD程序来实现VRRP协议而已,是物理的路由器。一台VRRP路由器可以位于多个虚拟路由器中。

2)虚拟路由器: 虚拟路由器通常由多台VRRP路由器通过某种方式组成,就好像将这些物理路由器都丢到一个池里面去,整个池对外看起来就像是一台路由器,但其实内部有多台。虚拟路由器的标识称为VRID。

用户空间:
WatchDog:负载监控checkers和VRRP进程的状况
VRRP Stack:负载负载均衡器之间的失败切换FailOver,如果只用一个负载均稀器,则VRRP不是必须的。
Checkers:负责真实服务器的健康检查healthchecking,是keepalived最主要的功能。换言之,可以没有VRRP Stack,但健康检查healthchecking是一定要有的。
IPVS wrapper:用户发送设定的规则到内核ipvs代码
Netlink Reflector:用来设定vrrp的vip地址等。

在一个VRRP虚拟路由中,有多台物理的VRRP路由器,但是这多台物理路由并不同时工作,而是由一台称为master的负责路由工作,其它的都是backup。master并非一成不变,VRRP协议让每个VRRP路由器参与竞选,最终获胜的就是master。master有一些特权,比如拥有虚拟路由器的IP地址,我们的主机就是用这个IP地址作为静态路由的。拥有特权的master要负责转发发送给 关地址的包和响应ARP请求。

【工作原理】:

VRRP通过竞选协议来实现虚拟路由器的功能,所有的协议 文都是通过IP多播(multicast)包形式发送的,多播地址为224.0.0.18。虚拟路由器由VRID(范围0-255)和一组IP地址组成,对外表现为一个众所周知的MAC地址:00-00-5E-00-01-{VRID}。所以,在一个虚拟路由器中,不管谁是master,对外都是相同的MAC和IP(称之为VIP)。客户端主机并不需要因为master的改变而修改自己的路由配置,对它们来说,这种主从的切换是透明的。

2.1 案例1:Keepalived+LVS+MySQL双主复制实现读写负载均衡及高可用

Nginx+Keepalived+LVS高可用集群----相关知识回顾
1、【环境】:

172.16.1.124:Keepalived + LVS Master
172.16.1.125:Keepalived + LVS Slave
172.16.1.126:MySQL Replication Master
172.16.1.127:MySQL Replication Master
172.16.1.100:VIP
注:本案中之所以要使用MySQL双主复制而不是主从复制,是因为本方案中并没有涉及读写分离,而是在两个等价的MySQL服务器之间做读写负载均衡。

2、部署配置:

1)124和125这2台DR上安装LVS和Keepalived,执行:

2)配置:

1> master的keepalived配置文件如下: vi /etc/keepalived/keepalived.conf

2> slave的keepalived配置文件如下:


                                                        

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年8月22日
下一篇 2022年8月22日

相关推荐