无单点故障高性能LAMP集群的构建_第1页
无单点故障高性能LAMP集群的构建_第2页
无单点故障高性能LAMP集群的构建_第3页
无单点故障高性能LAMP集群的构建_第4页
无单点故障高性能LAMP集群的构建_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、无单点故障高性能LAMP集群的构建1无单点故障高性能无单点故障高性能 LAMP 集群的构建集群的构建摘要随着计算机技术的泛的应用,人们对其的依赖程度越来越高,计算机的可靠性和可用性便显得由为重要。尽管单台计算机的性能和可靠性在不断提升,但还是有许多现实要求是单台计算机难以完成的。自从 1994 年首次采用 Beowulf 集群以来,集群技术被广泛应用。集群系统在用户面前表现为单一系统映像。连接在网络上的一组 PC 不具有集群计算机资格,为了构成集群计算机,这些独立 PC 必须运行可以利用其他计算机的软件,使它们像一个团队那样为了共同的目标协同工作。本文以目前最流行的 web 框架 LAMP(L

2、inux-Apache-MySQL-PHP)为研究对象, 提出了一套高可用并且高性能的集群架构。 整个架构分为 5 层, 既分发层,web 层,共享存储层,代理层和数据库层。层与层之间相互关联,共同对外提供唯一的服务访问入口。论文首先对各层使用到的技术做了概括性的介绍,随后依次进行了展开,分别给出了每层工作原理和实现过程。此后在整个系统上安装 PHP 论坛,验证了系统能够正常工作,然后与单一架构进行了分析对比,给出了性能测试,测试出其性能有了显著提高。最后,论文提供无单点故障的测试视频,从而验证整个集群的高可用得以实现。关键字关键字:集群,代理,共享存储,数据库无单点故障高性能LAMP集群的构

3、建2The Construction of high availability and highperformance LAMP clusterABSTRACTWith the development of computer technology and its wide application, ourdependency on the computer technology becomes more and more high. Computersreliability and availability are becoming more important. Though a singl

4、e computerscapability and reliability is becoming better, But a single computer cant completesome request still.Since 1994, the first use of Beowulf clusters, cluster technology has been widelyapplied. Cluster system behaves as a single system image in front of the user. A groupof PC connections in

5、the network does not have the qualification of cluster. In order toconstitute a cluster computer, the PC of each station must run a software ,which canuse other computer and make them as a team, to a common goal of mutual support.The paper takes LAMP web framework (Linux-Apache-MySQL-PHP) as therese

6、arch object, put forward a set of high availability and high performance clusterarchitecture. The whole structure is divided into 5 layers. the distribution layer, weblayer, shared storage layer, agent layer, and database layer. There is a closerelationship between each layer, and they provides a un

7、ique service entrance。The paper has make a general introduction to the system. Then it introduces theworking principle of each layer and the realization of the process. I also install thePHP forum in the whole system, to verify whether it can work normally, and thengives test report of the performan

8、ce, and compared with the single architecture,testing its performance improved significantly. Finally, This paper provides no singlepoint of failure test screen, thus verifying the whole cluster high availability is无单点故障高性能LAMP集群的构建3achieved.Key words:cluster,proxy,share storage,database无单点故障高性能LAMP

9、集群的构建4目目录录1.绪论.11.1 研究背景.11.2 研究现状.11.3 研究意义.21.4 研究内容.21.5 论文结构.41.6 本章小结.42.负载均衡集群组成的 web 应用. 52.1 负载均衡集群技术.52.1.1 什么是负载均衡.52.1.2 以 LVS 作为负载均衡器.52.2 理解 LVS 的原理. 62.2.1 LVS web 应用的体系结构. 62.2.2 LVS 的负载调度算法.82.3 LVS 的 DR 路由方式.92.3.1 LVS 的地址概念.92.3.1 VS-DR 直接路由方式.102.4 关于 LVS 的一些补充.132.4.1 LVS 调度算法对服务

10、器的加权.132.4 2 LVS调度持续性和防火墙标记.132.5 LVS 负载均衡集群实现概述. 152.6 本章小结.173. 基于 iscsi 的共享存储存储层.183.1 NAS 和 SAN.183.2 iscsi 技术研究.19无单点故障高性能LAMP集群的构建53.2.1 iscsi 的报文格式.193.2.2 iscsi 协议栈模型.193.2.3 发起端-目标器模型.203.2.4 iscsi 命名规范.213.2.5 Initiator 端导入设备.223.3 LVM 实现存储的动态扩展和冗余.243.3.1 LVM 技术简介. 253.3.2 LVM 的组成.253.3.3

11、 基于集群的 LVM 技术. 263.4 GFS2 集群文件系统.264.高可用的 mysql-proxy 代理.304.1 mysql-proxy.304.1.1 为什么要实现读写分离.304.1.2 mysql-proxy 简介.304.2 高可用的 mysql-proxy 集群.334.2.1 HA 集群的概念.334.2.2 Linux 高可用性集群的相关技术概念.334.2.3 readhat 高可用集群的所需的相关组件.344.2.4 高可用 mysql-proxy 集群的简单说明.374.3 本章小结.405.高可用的 mysql 集群.415.1 mysql 的 replica

12、tion.425.1.1 复制的概述.425.1.2 主主复制和主从复制. 445.2 mysql-mmm 架构.465.2.1 mysql-mmm 简介.465.2.2 VIP 和角色的分配.475.2.3 各成员的状态.495.3 本章小结.51无单点故障高性能LAMP集群的构建66. 性能测试.526.1 测试工具介绍.526.2 测试环境.526.3 测试方法.546.4 主要性能指标说明.546.5 数据采集结果.586.6.测试结果总结.607.总结与展望.617.1 总结. 617.2 展望. 61参考文献.62致谢.63无单点故障高性能LAMP集群的构建11.1.绪论1.1 研

13、究背景作为目前企业服务器市场的主流操作系统,linux 在最近几年得到了快速发展。由 linux,apache,mysql,php、perl 或者 python 组成的 lamp 网站架构,也逐步受到更多流行商业应用的青睐,成为国际流行的 web 框架。相较于 Java/J2EE,lamp 具有资源丰富、快速开发和轻量等特点。和微软的 net 架构相比,lamp 的跨平台、低价格、通用性强的优势又显现出来。因此,无论从质量、性能,或是价格等各方面的因素考虑,lamp 都成为企业网站的首选架构。随着企业信息系统的快速发展, 用户的核心应用数量越来越多, 此时企业自然会对其业务系统有着更高要求,

14、而高稳定性, 高可靠性就成了重要的评判标准。单一的 lamp 架构自然无法适应企业日益增长的业务需求,在这种趋势下,分布式应用系统逐步走进人们的视野, 多节点高性能的集群系统被广泛接受, 企业的应用进入了高性能时代。截止到目前, 主要 IT 厂商如 IBM,HP 已经在对基于 linux 的开源集群产品进行研发,集群软件也逐步从之前高端的 UNIX 平台逐步走向 linux 平台,linux 由此迈入企业应用的高端市场。1.2 研究现状上世纪 90 年代末, linux 操作系统逐步趋于成熟, 除了提供标准化的 PVM、MPI 消息传递机制,其健壮性也得到不断增强,而在普通的 PC 机上,li

15、nux 也提供了对高新能网络的支持,这些都成为推动 linux 集群技术发展的重要因素。早在 90 年代,包括中国科学院在内的科研机构与大学就开始了基于 linux集群的研究,很多大公司,如联想等都有自己的 linux 产品和解决方案,淘宝,百度,谷歌其后台也都在采用 linux 集群技术,其中谷歌在 05 年的时候就已经达到了 200 万台,与此同时,在保险,金融、电信等企业,linux 集群技术也得到了广泛使用。无单点故障高性能LAMP集群的构建2集群技术随着开放源代码的迅猛发展, 有了更好的技术平台。 目前的集群解决方案种类繁多,有基于纯软件的,也有基于硬件的,每种解决方案都有其自身的优

16、势,而如何选择适合自己,并且性价比相对较高的集群解决方案,是每个系统架构师需要考虑的问题。1.3 研究意义在这个以网络为中心的计算机时代,客户/服务器模型得益于其简单、易管理等特点在互联网上被广泛使用。上世纪 90 年代中期,万维网的出现将互联网的信息生动地传递给普通大众,web 正从一种发送机制向一种服务平台进行转变。目前大部分的服务和应用都是围绕 web 进行,这促使互联网用户数量在最近几年得到爆炸性增长。目前,大量的 CPU 密集型应用运行于 web 服务中,如动态主页等。同时,用户对交互性、安全性需求的不断提高对服务器的 I/0 和 CPU 性能都是不小的考验。比如目前被电子商务网站广

17、泛使用的 https,通过其调取一个静态页面所需的处理性能要高于 http 一个数量级。所以不单单是网络流量的增加,应用本身的发展也对服务器的处理性能要求越来越高。于此同时,大部分网站需要提供 7*24 小时的服务,特别是一些电子商务网站、银行、金融等部门对意外宕机时间要求更加苛刻。以戴尔为例,一小时的服务中断会对其造成 58 万美元的损失,这就对服务的可靠性提出了更高要求。1.4 研究内容本课题主要的内容是构建一个无单点故障且高性能的 lamp 环境。整体架构如下图所示:无单点故障高性能LAMP集群的构建3图图1-1 总体架构图总体架构图无单点故障高性能LAMP集群的构建4整个集群架构分为

18、5 层,分别是:分发层,web 层,共享存储层,代理层,和最后的数据库层。分发层和 web 层构成一个 LVS 集群环境,实现高可用的同时也提供更高性能的 web 服务。共享存储层用作为存放网站软件的文件服务器,同时也保证了网站视频、图片的一致性。代理层使用 mysql-proxy 来实现读写分离,从而提高数据库的访问速度。与此同时,为了保证整个架构的无单点故障,会在 mysql-proxy 上使用红帽提供的 HA 套件,从而实现代理服务的高可用。数据库则使用 mysql,通过 mysql-mmm 架构来实现数据库的主主同步和主从同步,并同时保证数据库层的无单点故障。具体说明可见上图。1.5

19、论文结构本文分为五部分, 由上至下依次对集群中各个部分进行了详细讲解, 最后得出性能测试报告,各部分内容依次如下:第 2 章:对负载均衡组成 web 应用进行了讨论,对 lvs 工作原理进行研究分析,最后给出 lvs 集群的运行状态。第 3 章:对共享存储层进行研究,其中会涉及 iscsi 技术、CLVM、GFS2 文件系统,对以上技术尽心讲解的同时,给出整个共享存储层的导入与挂载情况。第 4 章:重点放在 mysql-proxy 的原理和高可用 HA-proxy 集群的研究,讨论了 proxy 和 redhat 高可用集群的相关组件以及工作原理。最后给出 HA-proxy集群的运行状态。第

20、5 章: 对数据库层进行讨论研究, 内容涉及 mysql 的主主复制, 主从复制,以及 mysql-mmm 集群架构,在对其原理进行研究的同时,给出整个 mysql 集群相关角色,IP 分配,以及节点成员的运行状态。第 6 章:通过和单一架构系统进行比较,得出性能测试报告。1.6 本章小结本章主要介绍了本文的选题背景及意义, 对整个项目的研究内容及本文的大致结构进行了概览。无单点故障高性能LAMP集群的构建52.2.负载均衡集群组成的负载均衡集群组成的 web 应用应用2.1 负载均衡集群技术2.1.1 什么是负载均衡在开始负载均衡的原理之前,先举一个例子帮助理解。现在有一个 BBS 论坛,最

21、多只允许 200 人同时在线。初期,由于网站知名度较小,一般只有几十个用户同时在线。经过一段时间的发展,其知名度开始提高,百度公司也收录了该网站,注册用户数直线上升,很快同时在线人数就达到了千人,超过了原本的最大在线人数。于是网站访问开始变的迟钝,不少用户开始抱怨。通常一个网页如果 8s 内没有打开,用户基本上不会有耐心继续等待了,为了不影响用户对网站的信心,一定要想到有效的解决办法。如果在前方放置一个转发器,后端放置多台性能相同的服务器,由转发器将用户的请求分配给后端的服务器,使得每台机器的用户数控制在 150 个左右,那么网站的访问速度无疑会得到大幅度提升,即使有一台服务器宕机,也不会对用

22、户的访问造成影响。而这个转发器就称之为负载均衡器(分发机)。负载均衡能够提供廉价、透明的方来提高网络的吞吐量,加强网络数据的处理能力, 通过负载均衡器可以实现让多台廉价的 linux 服务器并行处理用户请求,从而使其达到大型计算机的能力,这也是为何负载均衡如此流行的主要原因。2.1.2 以LVS作为负载均衡器lvs是由中国人发起的最著名的linux项目。它由章文嵩博士创立,在98年5月发布了第一个版本, 其全称为linux virtual server,高可用性和高伸缩性是lvs具备的重要特征,其可兼容目前绝大多数的网络服务,并且易于管理。lvs应用广泛,很多高访问量的网站,如淘宝,都采用了l

23、vs的架构。lvs建立在一个由主控服务器及若干个真实服务器组成的系统之上。 主控服务器主要负责按照预先制定的调度算法对前方的用户请求进行分发,后端的真实服务器则负责处理用户请求,对外提供服务。相对于用户而言,集群的结构完全透明,用户只通过绑定在主控服务器上虚拟IP与集群进行通信,从用户的角度,这其实就是一台单独的服务器。无单点故障高性能LAMP集群的构建6真实服务器(real-server)可提供的服务有很多,常用的有web服务,ftp,以及DNS,让多台real-server来提供web服务,就可以轻松的实现web层的高并发和高可用。2.2 理解LVS的原理2.2.1 LVS web应用的体

24、系结构使用lvs架设的web应用集群主要有三个部分组成: 主控服务器所在的位置称为负载均衡层 (Load Balance), 中间的web服务器组成了一个服务池 (server pool) ,最底端的是共享存储层,用Shared Storage表示。负载均衡层一般由2台负载调度器组成,但同一时刻只有一台负载调度器在执行请求的分发工作,而另一台则作为backup,当提供分发服务的调度器宕机,另一台会顶上来,接管分发服务,lvs的模块就安装在其上。调度器在整个集群中主要起一个类似于路由器的作用,它含有完成分发任务所需的路由表,并能够根据事先制定的算法,将用户的请求分发给服务池中的某台web服务器。

25、服务池由一组真正执行客户端请求的服务器组成。在这个项目中,服务池由2台web服务器组成。共享存储层在这里并不放置网站的信息数据,网站的信息数据是存放在mysql数据库当中,这里所说的共享存储,其实是放置网站本身的软件和用户上传的视频、图片(视频、图片会存放在web服务器的图片视频目录中,而数据库中一般存放的是这些图片、视频名字对应的地址)。拓扑图如下所示:无单点故障高性能LAMP集群的构建7图图 2-1 lvs拓扑图拓扑图无单点故障高性能LAMP集群的构建8关于上图,有几点需要进行说明:调度器作为集群的唯一入口,上面绑定了对外提供服务的虚拟 IP,并且在同一时刻,这个虚拟 IP 只会在一台调度

26、器上,当这台调度器宕机,包括虚拟 IP 在内的所有资源会自动漂移到 backup 上,此时backup 接管分发服务。在这个项目中,笔者采用了基于 IP 的负载均衡技术,这就要求服务池中的服务器必须具有相同的内容,也就是说要提供相同的服务,这里所有服务器都作为 web-server,运行 apache 服务。当用户请求到达时,调度器会根据每台服务器的负载情况,结合预先指定的调度算法,从服务池中挑选出一台服务器处理用户请求。与之相对应的是基于内容的请求分发技术,这种分发技术允许服务池中的服务器提供不同的服务,当用户的请求到达时,服务器会根据内容筛选出相应的服务器去处理用户请求。本文主要讨论前者,

27、但无论是哪一种技术,服务池中的节点数目都是可变的,当用户请求不断增长,可以通过在服务池中增加节点来满足负载,整个系统的性能基本上可以随着 server pool 中节点成员的增加而线性增长。2.2.2 LVS 的负载调度算法LVS提供10种负载调度算法来分发用户的请求, 本项目使用加权最少链接算法。 在服务池中的服务器性能相差较大时使用加权最少链接算法能够有效优化负载均衡的性能。系统管理员可对性能较高的服务器设置较大的权值。举个例子,当一台服务器的权值被设置为2,另一台为1,那么权值为2的服务器将会承受2倍于权值为1的服务器的活动链接。调度器会了解当前真实服务器的负载情况,尽可能的使服务器上已

28、建立的连接数和其权值成比例。现在用S0,S1,.Sn-1表示一组后端服务器,W(Si)表示Si的权值,Si当前的连接数用C(Si)表示。当前服务器的连接总和为Csum,其值等于C(S0)+C(Si)+.C(Sn-1)。假设现在新的连接请求被发送给Sm,此时Sm必须满足以下条件:(C(Sm)/Csum)/W(Sm)=min(C(Si)/Csum)/W(Si)(i=0,1,.,n-1),其中Csum为常 数 , W ( Si ) 不 为 0 , 所 以 之 前 的 条 件 可 等 价 于C(Sm)/W(Sm)=minC(Si)/W(Si)(i=0,1,.,n-1),由于linux内核不允许浮点除法

29、,且 W(Si) 均 大 于 0 , 所 以 用 于 判 断 的 条 件 可 以 最 终 转 化 为无单点故障高性能LAMP集群的构建9C(Sm)*W(Si)C(Si)*W(Sm)。当服务器权值等于0时,要保证其不被调度。算法执行如下:for(m=0;m0)thenfor(i=m+1,iC(Si)*W(Sm)m=i;return Sm;return NULL;2.3 LVS的DR路由方式目前的IP负载均衡技术大都是通过网络地址转换将一组服务器构成高性、 能高 可 用 的 服 务 集 群 , 其 称 为 VS/NAT ( Virtual Server via Network AddressTra

30、nslation)技术。在VS/NAT技术的基础上,又提出了通过直接路由实现虚拟服务器的方法VS/DR(Virtual Server via Direct Routing)和通过IP隧道实现虚拟服务器的方法VS/TUN(Virtual Server via IP Tunneling) ,这些方法都极大的提高了整个系统的伸缩性。目前,lvs实现IP负载均衡主要是通过VS/NAT、VS/TUN和VS/DR是这三种技术,本项目使用的是DR模式,由于篇幅所限,本文只对DR模式的工作原理进行描述。2.3.1 LVS 的地址概念要了解LVS的路由模式, 关于地址的概念必不可少。 在此先给大家一一列出,等到

31、下面跟大家讲解的时候,会在图上标出,方便大家理解。1.Client IP Address(CIP)无单点故障高性能LAMP集群的构建102.Director Gateway(DGW)3.Virtual IP(VIP)4.Primary IP(PIP)5.Slave IP(SIP)6.Real Server IP(RIP)CIP:客户端IP。DGW:默认网关。VIP:虚拟IP,用于客户端访问服务PIP:主分发机的私有IPSIP:从分发机的私有IPRIP:真实服务器IP2.3.1 VS-DR 直接路由方式LVS-DR 是 基 于 IBM 的 NetDispatcher 设 计 , 他 的 数 据

32、包 流 向 为CIP-DGW-VIP-RIP-DGW-CIP,DR模式能够同时处理大量客户端请求,多用于真实服务器数量较多 或频繁更新的服务。大致原理如下图所示:无单点故障高性能LAMP集群的构建11图图2-22-2 DRDR方式原理图方式原理图下面举一个例子对上图进行说明。 有一个client, 它的IP就是上面提到的CIP,无单点故障高性能LAMP集群的构建12现在它要通过来访问论坛, URL在DNS解析后, client会拿到一个VIP,这个VIP就是访问论坛网站的唯一入口,首先client会对数据包进行分装,数据包头部会包含目标地址VIP和源地址CIP。数据包经过Internet,到达

33、机房网关。网关收下数据包后发现目标IP是VIP,便会将其转发给后端的分发机,分发机收到数据包后发现这是一个lvs的数据包,原mac地址是网关的mac,目标mac是自己的mac,原IP是client的IP,目标IP是VIP。现在要将这个数据包转发给后端的real-server。分发机现在会通过2层交换机将数据包进行转发,所以其不需要对网络层的IP地址进行更改,只需要将目标mac改成real-server的mac,改完后发给交换机,交换机那里会有mac地址绑定列表,它会去查找目标mac究竟是绑定在哪个接口上,然后将数据包从相应的接口转发出去。real-server收到了数据包之后,看一下目标mac

34、地址,发现是自己,然后再看一下目标IP是不是自己,目标IP如果不是自己, 会将数据包丢弃。 这时发现目标IP是个VIP, 现在怎么告诉real-server这个VIP其实就是自己,这就需要在real-server绑定一个VIP,如果real-server发现本地有这个IP,就会收下数据包。处理完成之后,就拿这个VIP作为源地址,返回数据包,在返回数据包时会不经过分发机直接将其交给机房网关。现在就面临IP地址冲突的问题,在一个局域网中,大量的real-server都会去绑定一个VIP,每个real-server也会有自己的RIP,RIP是肯定不一样的。要解决这个问题,就需要关闭arp广播, Li

35、nux在绑定IP地址时, 一般会默认使用arp广播来探测是否IP冲突。现在要使所有的real-server在发送arp广播时,所有关于VIP的广播都不发,而关于RIP的广播要允许, 这里使用arptables防火墙来实现。 其次分发机也会绑定VIP,它在绑定的过程中也会发送arp广播进行询问, real-server会对这个广播进行回应,所以还需要让real-server丢弃掉询问VIP的arp广播,前者是不要发送有关于VIP的广播,后者是要丢弃有关于VIP的ARP询问。arptables的设置脚本如下图所示:无单点故障高性能LAMP集群的构建13图图2-32-3 arptablesarpta

36、bles配置脚本配置脚本2.4 关于LVS的一些补充2.4.1 LVS调度算法对服务器的加权前面在介绍算法时提到过权值的概念,在架构LVS集群时会根据每台服务器自身的硬件条件为每个节点分配一个权值, 这样能够帮助分发机在能力各不相同的硬件环境中更加有效的去均衡分配负载。”权“是一种相对比率,假设一台服务器的权值为3,另一台的权值为1,那么权值为1的服务器每得到1个链接,权值为3的服务器就将得到3个链接。虽然这种方法能够有效的均衡集群负载, 但当某个真正的服务器刚被添加入server pool,并且此时分发机使用的是加权最少链接算法时, 这个新加入的服务器在被调度时会造成暂时的不平衡。举个例子,

37、现在server pool中有三台服务器,分别是A、B、C。A和B的权值均为1,C的权值为2,如果C由于某种原因发生宕机,此时A和B就会将会平分被放弃的载量。当C恢复后重新加入到server pool当中,分发机发现它的连接数为0,就会将所有的请求都转发给它,直到它的A、B、C三台机器的载量重新回到同一级别为止。2.4.2 LVS调度持续性和防火墙标记无单点故障高性能LAMP集群的构建14大多数情况下, 客户端其实并不希望分发机按照负载均衡方式轮循的分发请求,他们希望能够重复的访问同一台服务器,这样的例子很多,比如FTP连接、多屏幕的网页表格、SSL等等。在类似于这样的情况下,除非事物被同一台

38、服务器处理从而保留内容衔接,否则客户有肯能无法正常操作。LVS中提供了两种方式来解决这一问题:防火墙标记和持续性连接。持续性连接的原理比较简单,说白了它就像一个计时器,当客户连接到某个服务,分发机会记住在某一指定时间段内的前一次连接。在这段时间内,如果这个IP地址又来连接,请求就会发送到前一次被连接的服务器上,当然,如果超过了之前设定好的时间,分发机依旧会按照分发规则进行处理。持续性连接不是用来处理合并不同目标端口连接最有效的方法,一般会使用防火墙标记,本项目就是采用的这种方法。防火墙标记主要是用来合并一个协议或者一组相关协议端口, 可以通过为每个协议在分发机上分配相同的防火墙标记,使得事物的

39、状态信息得以保留,在连接被打开后,分发机会将所有请求都转发给server pool中某台定的服务器。如果说这个项目中的LVS群集被用来运行电子商务网站,防火墙标记可以把HTTP的80端口和HTTPS的443端口捆绑在一起,当和持续性综合使用时,防火墙标记会确保只要来自客户端的请求发生在持续性参数所指定的范围内便会被分配到同一真实服务器上。 但分发机本身并不能分配防火墙标记, 一般需借助iptables完成该任务。iptables的配置如下图所示,主要作用是在路由前将访问VIP的80端口和443端口全部打上防火墙标记100,这样它们就会被分发机识别,然后进行转发。图图2-42-4 iptable

40、siptables配置脚本配置脚本在设置完成之后,可以使用iptables L n来查看mangle表。如下图所示。无单点故障高性能LAMP集群的构建15图图2-52-5 iptablesiptables的的manglemangle表表2.5 LVS负载均衡集群实现概述拓扑图如下所示:图图2-62-6 webweb层和分发层概览层和分发层概览如上图所示,LVS1和LVS2作为分发机,构成一个HA集群,每次只有一台分发机对外提供分发服务,会有一个浮动IP绑定在LVS1或者LVS2上(当然,在DR模式下, 后端的node也要绑定VIP) , 这取决于现在正在对外提供分发服务的机器是哪台。该浮动IP

41、作为整个集群架构的唯一入口,用户通过访问浮动IP来访问网站。浮动IP作为分发机的一种资源存在,同样作为资源的还有分发策略(按照什么算法进行分发) 、已经分发的条目记录(原来已经分发了多少次,已经分配到第几台机器)和路由表。当正在提供服务的分发机发生宕机,包括VIP在内的所有资源会迁移到另一台LVS上,从而使整个分发层做到无单点故障。后面的两台node作为web服务的真实提供者,他们的IP对于用户来说是隐藏无单点故障高性能LAMP集群的构建16的,用户可见的IP只有VIP,也就是绑定在分发机上的IP。两台node构成了LB负载均衡,同时对外提供服务,分发机会根据路由表和相应的算法向后分发用户请求

42、到相应的node。前方的分发机会定期进行连接测试,如果其中一台node发生宕机或服务运行异常, 则连接测试失败, 分发机会将该node从自己的路由表中剔除,最后所有的用户请求都将有由健康的节点处理。分发机通过一个脚本实时了解server-pool中哪台服务器发生异常,其内容如下所示:具体脚本如何加载,会在实施文档中给出。图图2-72-7 探测脚本内容探测脚本内容整个集群的运行状态如下图所示:具体步骤在实施手册中给出。图图2-72-7 lvslvs集群运行状态集群运行状态无单点故障高性能LAMP集群的构建172.6 本章小结本章对LVS实现的负载均衡集群原理做了简单介绍,LVS内容繁多,这里只对

43、该项目中使用到的关键技术原理做介绍,还有很多地方没有涉及到,关于具体如何去实现,实施文档中会给出详细步骤。无单点故障高性能LAMP集群的构建183.3.基于基于 iscsi 的共享存储存储层的共享存储存储层截止到目前,已把绪论里提到的负载均衡层、web 层介绍完毕。接下来会对共享存储层做相应的介绍。在开始存储层之前,先了解一下共享存储在整个集群中起到的作用。在第一章提到过,共享存储在这里作为存放网站软件的文件服务器,同时也保存用户上传的图片或视频。举个例子,用户 A 上传了一张 JPG 格式的照片,保存在web-server1 上,现在 B 用户想浏览这张图片,如果每个 web-server

44、均使用自己独立的存储,那么当分发机将用户 B 的请求随机分发到 web-server2 上时就无法浏览到刚才 A 用户上传的图片(视频、图片会存放在 web 服务器的图片视频目录中,而数据库中一般存放的是这些图片、视频名字对应的地址)。解决这一问题可以采用 sync 进行实时同步,也可使用这节介绍的共享存储方案。另外再看看现在面临的主要问题有哪些, 这样可以方便后面追个击破。 首先,所谓存储层,必定是由若干台存储服务器构成,那么web服务器作为客户端要如何使用存储服务器的磁盘呢?其次,再大的空间都会有用完的一天,如何能在不影响服务的前提下实现存储的动态扩展,必定是在实施项目时需要考虑的因素。最

45、后,如果有一台存储服务器坏了,如何能保证数据不丢失,也就是对数据的冗余。接下来的内容对这些问题都进行了逐一解答。3.1 NAS 和 SAN本章开始提到了关于web服务器是如何共使用存储服务器磁盘的问题,笔者在这里选择了iscsi方案,为了更好的理解,这里就目前企业上流行的2种存储模式做简单介绍,为后面对iscsi的介绍做铺垫。NAS(Network-Attached Storage)的全称为网络接入存储,它通过交换机把服务器和存储系统连接起来,从而建立专门用来提供数据存储的存储网络。早期的网络接入存储性能受到网络带宽影响, 但快速以太网的出现使得其读写性能有了很大提高。目前,NAS基本上具备了

46、磁盘阵列的所有优点,与市面上一些大型磁带库和磁盘柜相比, 其还具有很强的价格优势, 在一些中小企业中被广泛使用。无单点故障高性能LAMP集群的构建19NAS通常被用来提供高速的文件共享任务,比如NFS,CIFS等。SAN(Storage-Area Network)全称为存储区域网络,它采用光纤技术,通过光纤交换机连接存储系统和服务器,目前比较流行的有FC SAN和ISCSI SAN两种方案,其部署价格较高,一般小公司很少会使用。ISCSI(Internet SCSI)全称为互联网小型计算机系统接口,它基于IP协议的技术标准,能够将存储行业广泛使用的SCSI接口技术和IP技术进行结合,实现了SC

47、SI和TCP/IP协议的连接,从而允许用户能够通过TCP/IP网络来构建SAN。目前在IP网络上已经部署的大量DAS存储设备是推动ISCSI协议不断发展的主要动力,这些存储设备可以通过ISCSI协议被更多的用户使用,同时也使得DAS设备支持了那些只有高级存储才支持的镜像、容灾等应用。3.2iscsi技术研究3.2.1 iscsi的报文格式得益于IP网络的广泛应用,iscsi使得数据的存储不再受到地域限制。无论是WAN、LAN甚至Internet,iscsi均能在其上进行数据传送。其核心技术是对scsi报文进行封装,从而使scsi命令和数据可以在普通以太网上传输。iscsi的报文格式下图所示:图

48、图3-13-1 iscsiiscsi报文格式报文格式千兆以太网:提供连接寻址、大型帧长度、以及流量控制信息。IP头:包含路由信息,因此报文能找到通过网络的路径。TCP头:提供必要信息保证交付。iscsi头:解释如何提取scsi命令和数据。iscsi的工作过程大致如下:操作系统会在iscsi主机应用程序发出读写请求后生成相应的scsi命令,该命令首先会在iscsi initiator层进行封装,封装后的iscsi消息包通过TCP/IP被传送到设备侧,设备侧的iscsi Target层会对其进行解封装,然后把得到的iscsi命令内容传送给scsi设备执行。命令执行后的响应在经过设备侧的iscsi

49、Target层时被封装成iscsi响应PDU(Protocol Data Unit) ,然后通过TCP/IP无单点故障高性能LAMP集群的构建20传送给主机的iscsi initiator层,iscsi响应PDU 会在这里被进行解析,得到scsi响应后传送给操作系统,最后由操作系统响应给应用程序。3.2.2 iscsi协议栈模型iscsi使用TCP/IP协议在不稳定的网络上进行可靠的数据传输。其协议栈模型如下图所示:图图3-23-2 iscsiiscsi协议栈模型协议栈模型如上图所示:initiator会将scsi命令和数据进行封装,使其变成iscsi协议数据单元,然后向下提交给IP层继续进行

50、封装,变成IP数据报后在现有的IP网络中进行传输。 到达target后, 对数据包进行解封装, 最后还原成之前的scsi命令和数据,然后再由存储控制器将其发送给指定的驱动器。最终实现数据和scsi命令在IP网络上的透明传输。3.2.3 发起端-目标器模型Target与Initiator是iscsi体系结构模式中两个重要角色。其结构如下图所示:无单点故障高性能LAMP集群的构建21图图3-33-3 发起端发起端- -目标器模型目标器模型scsi通道将scsi Port连接起来 (比如scsi initiator port和scsi target port) , 其不但被Initiator用来向t

51、arget发送请求,也被target用来向Initiator发送响应。Initiator至少需要有一个发送请求的客户端和一个scsi port,target不但需要有一个scsi port,还要有逻辑单元和任务分发器。 其中任务分发器用来把用户的请求分给适当的逻辑单元,scsi port被用来连接scsi通道,而真正用来处理任务的实体是逻辑单元,由于一个逻辑单元一般都会支持多任务环境, 所以还需要真正响应请求的服务器和任务管理器。3.2.4 iscsi命名规范为了方便大家理解iscsi的配置,这里介绍一下iscsi的命名规范,在此之前先说一下什么是逻辑单元号。scsi总线上一般可挂的设备数量为

52、6个或者15个,用TargetID对这些设备进行描述, 每个设备在加入系统时会取得一个代号,但实际上需要描述的设备数量一般都会超过这个数字,于是就有了逻辑单元号(LUN)的概念,它的作用就是为了对Target进行扩展。Target主机由“iscsi Qualified Nam(iqn) ”来标记,Target的名字一定要以qin后面加上一个点号开头,形如qin.,在点号后面是日期,日期后面是一个唯一的点号加上域名的反转,在被反转的域名后面跟一个冒号,最后加上任意的字符串,其格式如下:iqn.:,在本项目中的名字起法如图所示:无单点故障高性能LAMP集群的构建22图图3-43-4 命名示例命名示

53、例在iscsi命名规范中,iqn必须唯一的标记出目标设备(Target) ,LUN ID由iscsi目标设备(Target)分配。3.2.5 Initiator端导入设备首先查看在target端共享出的磁盘:图图3-53-5 磁盘导出情况磁盘导出情况在targrt共享出设备后,可以在Initiator中使用如下命令发现target导出的磁盘:无单点故障高性能LAMP集群的构建23图图3-63-6 发现导出磁盘发现导出磁盘然后将其导入本地:图图3-73-7 对磁盘导入对磁盘导入最后会在/dev目录下发现两个设备文件名,通过查看UUID可知这两个设备文件名分别对应着两个存储服务器上的sda6和sd

54、a8,如下图所示。由于笔者在做的时候是在虚拟机上进行设备发现和导入,所以设备文件名为sda和sdb,如果使用真机的话,应该会得到sdb和sdc。无单点故障高性能LAMP集群的构建24图图3-83-8 查看导入磁盘查看导入磁盘关于iscsi的配置,会在实施手册中详细给出,由于篇幅限制,关于iscsi的介绍只能到此为止,感兴趣的话可以参考一本叫大话存储的书,写的很像武侠小书,里面有关于存储更加详细的介绍。3.3 LVM实现存储的动态扩展和冗余刚才向大家介绍了 iscsi 技术,目的是为了使 web server 能够使用存储柜导出的磁盘,大致结构如下图,这个项目中使用两台服务器作为 iscsi 的

55、 target 端,分别导出各自的一个分区,两台 web server 则作为 iscsi 的 initiator 端,对来自不同服务器的两块存储进行导入, 这时在本地的/dev 目录下会看到相应的设备文件名,查看 uuid 便可知这两块磁盘自两台存储服务器。图图3-93-9 存储层概览存储层概览为什么要使用两台相互独立了存储服务器,一台不行么?当然可以,但万一这一台服务器发生宕机,web server本地发现的磁盘设备不是也就没了么,宕机也就算了,如果一台服务器导出的磁盘损坏怎么办,软件家目录存放的图片、视频之类的数据不就丢失了么,为了防止这样的情况产生,本项目使用两台存储服无单点故障高性能

56、LAMP集群的构建25务器并将其做成镜像关系(类似于raid1) ,这样就相当于数据是完整保存在两台存储服务器中,两台存储服务器互为对方的备份,那么就算其中任意一台宕机或发生磁盘损坏,数据不但不会丢失,集群也可以正常工作。3.3.1 LVM技术简介LVM(Logical Volume Manager)全称为逻辑卷管理,它是Linux环境下对磁盘分区进行管理的一种机制,相较于普通的磁盘分区,LVM提供了更高等级的磁盘存储。举个例子,现在本地有一块硬盘sda,并对其进行了分区划分,最后得到sda1、sda2、sda3,后面还有剩余空间没有使用。现将sda1挂载到boot目录,sda2挂载到根目录,

57、sda3挂载到home目录,如果home目录的空间不够了怎么办,一般的做法是再划分出一个分区sda4, 先将sda4暂时挂在mnt目录下, 接着把home目录下(sda3)的文件cp过去,最后用sda4替换下sda3,也就是实现了用更大的分区替换掉不够用的sda3。这种方法不但麻烦,而且浪费了sda3,并且如果后面的分区容量小于sda3怎么办?lvm针对这种情况提供了完美的解决方案,它可以实现在不对分区进行卸载的前提下,自如调整分区大小。前提是系统要支持lvm,并且需要动态扩展的对象是逻辑卷。3.3.2 LVM的组成如图所示:图图3-103-10 LVMLVM组成图组成图PV(physical

58、 volume):位于LVM的最底层,一般为物理盘上的分区,比如上面提到的sda1,sda2,sda3。VG(volume group):一个VG至少由一个PV组成,如上图所示。LV(logical volume): LV建立在VG上,VG中没有使用的空间可以用来对已有的LV进行扩展,也可以用于建立新的LV。无单点故障高性能LAMP集群的构建26PE(physical extent):PE是组成PV的基本单元,默认情况下为4MB。LE(logical extent):LE是LV的基本组成单位,在同一个VG中,LE和PE一一对应,并且大小相同。对于LV的扩展时只需把VG上空闲的PE搬到LV里即可

59、。VG最多能够支持65534个PE,因此LV不能无限扩大。3.3.3 基于集群的LVM技术集群逻辑卷管理简称CLVM(Cluster Logical Volume Manager), 作为LVM的扩展,其允许集群中的各节点使用LVM管理共享存储。要在集群状态下使用lvm,需要在每个web server服务节点上安装lvm2-cluster软件包(RHEL6的操作系统) ,接着在任意一台执行如下命令即可:,再建好vg后,接下来的操作比较重要,还记得之前提到的对磁盘进行冗余么,现在要将/dev/sdb和/dev/sdc做成镜像关系,lvm本身具有这个功能,但因为在集群环境下,两台webserver

60、上还需要装上cmirror的软件包,并启动cmirror服务。完成上述两步后,使用lvcreate m 1 L 10G n clvm_mirror clvm_vg即可,-m 后跟的是mirror的个数,L后跟的是mirror的大小,-n后的是做成mirror的名字 (随便起) , 最后是表示在哪个vg上做mirror。做好后的cmirror如图:Clvm_mirror是由/dev/sdb和/dev/sdc组成的,当往clvm_mirror上写数据时,其实是往storage1和storage2同时写数据,当一个storage发生损坏,相同的数据在storage2上也有一份,这样就避免了由于存储单

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论