您的位置:首页 > 运维架构 > Linux

Linux集群服务知识点总结及通过案例介绍如何实现高性能web服务

2015-02-02 09:32 645 查看

转自:http://guodayong.blog.51cto.com/263451/1201101


一:集群相关概念及知识点介绍:
LVS(Linux Virtual System)
本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的Free Software项目之一。linux虚拟服务器(LVS)项目在linux操作系统上提供了最常见的负载均衡软件。
集群定义

集群(cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益,其任务调度则是集群系统中
的核心技术。本文就集群系统的定义、发展趋势、任务调度等问题进行了简要论述。集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。集群配置是用于提高可用性和可缩放性。
集群系统的主要优点:(高可扩展性、高可用性、高性能、高性价比)

目前运行在LINUX最主流的三种集群:
负载集群之一:LB(Load Balancing)
负载均衡集群运行时,一般通过一个或者多个前端负载均衡器(Director Server),将用户发来的请求资源信息,通过一种调度算法发送至到后端的一组应用服务器(Real Server)上,从而达到整个系统的高性能和高可用性。这样的计算机集群有时也被称为服务器群(Server Farm)
一般高可用性集群和负载均衡集群会使用类似的技术,或同时具有高可用性与负载均衡的特点。
负载集群之二:HA(High-Availability)
一般是指当集群中有某个节点失效的情况下,其上的任务会自动转移到其他正常的节点上。并且还可以将集群中的某节点进行离线维护再上线,该过程并不影响
整个集群的运行。
高可用集群:为了保证服务一直在线的高可用能力的集群
衡量标准:可用性=在线时间/(在线时间+故障处理时间)
负载集群之三:HP
高性能计算集群采用将计算任务分配到集群的不同计算节点从而提高计算能力,因而主要应用在科学计算领域。比较流行的HPC采用Linux操作系统和其它一些免费软
件来完成并行运算。这一集群配置通常被称为Beowulf集群。这类集群通常运行特定的程序以发挥HPC cluster的并行能力。这类程序一般应用特定的运行库, 比如专为科学计算设计的MPI库。
HPC集群特别适合于在计算中各计算节点之间发生大量数据通讯的计算作业,比如一个节点的中间结果或影响到其它节点计算结果的情况。
高性能处理集群:
利用的是分布式存储:分布式文件系统,分布式文件系统把一个大任务切割为小任务、分别进行处理

LVS系统结构:
负载均衡器(Load Balancer)、服务器群组(Server Aarry)、共享存储(Shared Storage)
负载均衡层
整个集群服务最前端设备,它有一个或多个调度器(Director Server)组成,LVS软件运行在调度服务器上。
调度服务器的功能

服务器群组层
这是由一个或者多个应用程序服务器(Real Server)组成,并且每个应用服务器提供相同的服务,调度服务器会将用户的请求定向到具体的应用服务器上,然后由后端的应用服务器响应客户端。
共享存储层
功能只要是保证服务器群组中的应用服务器提供数据的一致性。
共享存储的实现方式
磁盘阵列、集群文件系统(OCFS2)

LVS是linux系统上的一种机制,类似于iptables,其相关属性也是通过(ipvsadm)与iptables命令类似的方式定义的,
LVS是工作于linux系统内核空间,通过内核来提供工作,其工作空间在iptables的INPUT链上,当客户端请求到达INPUT链上以后,通过LVS规则的验证,如果是内部请求,发送至用户空间,如果发现是集群,将此请求发送至POSTROUTING链,并交给后端应用程序服务器来响应用户的请求。

注意:上面所提到LVS其实是工作在iptables的INPUT和postrouting链上的,所以在此系统上iptables和LVS不能同时存在。

LVS的组成:
ipvsadm:用于管理集群服务的命令行工具,工作于Linux系统中的用户空间
ipvs:为lvs提供服务的内核模块,工作于内核空间 (相对于是框架,通过ipvsadm添加规则,来实现ipvs功能)
注:在linux内核2.4.23之前的内核中模块默认是不存在的,需要自己手动打补丁,然后把此模块编译进内核才可以使用此功能
LVS类型:
LVS-NAT模式、LVS-DR模式、LVS-TUN模式
NAT:(Network address translation)



原理:把用户的请求发来的IP包的IP报头目的地址,通过LVS服务器转换至后端提供服务的Real Server的地址并将用户的请求报文发送至应用服务器。而应用服务器打开报文并响应用户请求发送并经过LVS服务器,LVS服务器将源地址修改为LVS服务器接口上的VIP地址。
NAT模式特点:
DR:(Direct routing)



DR模式工作在数据链路层,其原理,LVS服务器和应用服务器使用同一个IP地址对外服务,但只有LVS服务器对ARP请求进行响应,所有应用服务器对本身这个IP地址的ARP请求保持静默。网关会把所有的ARP请求定向至LVS服务器,而LVS服务器收到用户请求数据报文,根据调度算法进行IP分流,然后相应的MAC地址的修改,发送至后端对应的应用服务器。
注:由于LVS服务器对二层数据包进行修改,所以LVS服务器和应用服务器必须在同一个广播域。

DR模式特点
注:在DR模式中,LVS服务器只负责接收用户请求,根据调度算法及IP分流,直接路由转发,其响应报文交给Real Server自行处理。
DR模式是三种模式当中性能最好的,唯一的缺陷是LVS服务器和后端的应用服务器必须在同一个广播域中,因此不能实现集群的跨网端应用。

TUN (IP Tunnel模式)



TUN模式,LVS将TCP/IP请求进行重新封装并转发给目标应用服务器,有目标应用程序服务器对用户请求做出相应。LVS Router和Real Server通过Tp Tunnel通过隧道技术
进行转发,因此两者可以存在不同的网络当中。
注:由于应用服务器需要对LVS发送的报文进行还原,也就是说应用服务器也要支持Ip Tunnel协议。(Network options)
TUN模式特点:
LVS负载均衡八种调度算法:

rr-->wrr-->lc-->wlc-->lblc-->lblcr-->dh-->sh
轮叫(Round Robin):
该算法将用户请求有次序地分发到后端的应用服务器,均等看待所有Real Server,而并不计算具体服务器上的链接和负载。
加权轮叫(Weighted Round Robin):
该调度算法根据各个应用服务器的不同负载能力,给服务器设置不同的权值,处理能力强的应用服务器的权值设置大点,来响应更多的用户请求。
最少连接(Least Connections):
该算法将用户发送的请求分配到连接做少的应用服务器上。
加权最少连接(Weighted Least Connections):
该算法根据应用服务器的不同负载能力,设置不同大小不同的权值,权值较大并且连接请求数少的应用服务器则优先分配用户请求信息。
基于局部性最少连接:(Locality-Based Least Connections):
该算法针对目标IP地址的负载均衡算法,主要用于缓存集群系统。此算法会根据用户请求的目标IP地址找出与目标地址最近的应用服务器,如果服务器没有超载,则请求被分发到该应用服务器,如果服务器不可用或者负载较大,则使用最少连接算法,选择目标应用服务器
带复制的基于局部性最少连接(Locality-Based Least Connections wiht Replication)
该算法也是针对目标IP地址的负载均衡算法,主要用于缓存集群系统。域LBLC区别在于,前者维护一个IP地址到一组服务器的映射。而后者则是维护一个IP地址到一台应用服务器的映射。
目标地址散列(Destination Hashing)
该算法将用户请求的目标地址作为散列键,并尝试从静态分配的散列表中找出对应的应用服务器。如果目标应用服务器没有超载,那么将用户的请求信息分发至该应用服务里,否则返回空。
源地址散列(Source Hashing)
该算法将请求的源地址作为散列键,并尝试从静态分配的散列表中找出对应的应用服务器。如果目标应用服务器可用并且没有超载,那么将用户请求的信息分发至此应用服务器,否则返回空。

LVS IP Address Name Conventions:(LVS Ip-address 命名规范)



ipvsadm命令详细介绍:

pvsadm: 管理集群服务的命令行工具,而ipvs系统内核中的一个模块
ipvsadm命令的基本使用:

二:项目案例-如图

LVS/DR+Keepalived 实现lvs高可用,并提供web服务负载均衡
案例环境:版本及相及IP地址的分配

名称(Name)
Ip_address
LVS-DR-DIP:eth0
LVS-DR-DIP:eth0
172.16.88.88/16
172.16.88.66/16
LVS-DR-VIP:eth0:0
172.16.88.100/16
WEB1-Real-Server:eth0
172.16.88.10/16
WEB2-Real-Server:eth0
172.16.88.20/16
软件及版本:Vmware Station-RHEL 5.8(2.6.18)

实验拓扑图如下:



配置过程如下:
Realserver1:172.16.88.10/16配置
第一步:设置主机名、IP地址、hosts文件IP地址和主机名对应关系,及关闭selinux

第二步:建立Realserver之间建立SSH互信及时间同步:
第三步:创建Shell_Scripts,在这里,我们的RealServer提供的是web服务器,所以在这里我们采用脚本的方式来对Realserver进行配置,脚本内容如下:
[root@Real1 ~]# vim /scripts/realserver.sh ##创建脚本实现vip地址以和默认路由的设置以及对外网ARP请求的相关设置


[b][b]第四步:给此脚本执行权限并安装httpd二进制软件包,提供web服务 [/b][/b]


[b][b][b][root@Real1 ~]# netstat -ntupl | grep 80 && curl httpd://172.16.88.10[/b][/b][/b]
[b][b][b][b][b][b]

[/b][/b][/b][/b][/b][/b]
这样Realserver1的基本设置就完成了,Realserver2的设置和Realserver1完全相同,所以笔者在这里就不再演示。
[b][b][root@Real2 ~]# curl [/b][/b][b][b]http://172.16.88.20[/b][/b]



Director1 Server Configure

Keepalived在这里主要用作RealServer的健康状态检查以及LoadBalance主机(172.16.88.88/16)和Backup主机(172.16.88.66/16)之间failover的实现
下面为二台lvs调度服务器,安装lvs+keepalived软件包。安装lvs软件包,因为keepalived是运行在lvs之上的,因此lvs及keepalived必须装在一个系统里面。
第一步:设置主机名和/etc/hosts对照关系及两台Director调度器之间建立SSH互信:
Director Router1操作步骤
第二步:IP地址信息及开路由转发功能:



[b]

[/b]
[root@Director ~]# sysctl -p ##重新加载/etc/sysctl.conf配置文件

Director Router2操作步骤:
第一步:配置IP、主机名、hosts 、SSH互信

第二步:安装ipvsadm和keepalived软件包

第三步:keepalived主配置文件格式及对每一个参数做详细的解释:

keepalived分为三个部分:
全局配置、VRRP定义配置、虚拟服务器定义
[b]全局配置格式:[/b]




VRRP定义配置格式:

虚拟服务器配置格式:


第四步:将此Director1上的keepalived主配置文件复制到Director2上,并将其状态以及优先级修改为BACKUP和100,然后保存并退出即可。
第五步启动keepalived服务器并查看vip配置在哪台Director上。




查看ipvsadm的虚拟服务器真实存在的Realserver主机记录



第六步:如何在维护模式下,模拟LVS服务器发生故障
只需在keepalived配置文件中,添加如下内容(vrrp实例之外添加如下内容):
当vrrps事务发生改变时,运行此脚本:只需要在vrrp实例内添加如下内容即可
在两台调度服务器上,重启keepalived进程,加载主配置文件



当手动在/etc/keepalived目录中创建down文件时,主服务就会变成backup服务器,则从backup模式转换为master模式
1、查看日志信息



日志分析:


2、查看vip地址相关信息



第七步:如果提供的两台应用服务里(web),由于其他原因出现故障,该如何解决呢:
第八步:模拟两台应用程序服务出现故障
第九步:到调度服务器上利用ipvsadm工具查看ipvs规则



测试一:利用windows客户端访问172.16.88.100看是否发生变化:



测试二:到其中一台应用程序服务器从新启动httpd进程,并查看ipvsadm规则


再次通过windows客户端访问网页,看是否提供正常web服务



三:通过corosync+pacemaker实现web服务高可用,主要实现步骤:
既然给web应用服务器做高可用,那么httpd进程就不能开机自动运行,而且当前httpd服务属于停止状态,有corosync来自动启动某台的httpd进程
注:在安装corosync+pacemaker软件包之前,使用yum来安装它们所依赖的软件包:
第一步:在两台Realserver应用服务器上安装corosync+pacemaker软件包,相应软件包列表:

第二步:配置corosync和authkeys文件
注:Real2上也做同样的操作,例如安装包依赖关系及安装corosync+pacemaker软件包。
第三步:将Realserver1上的corosync和authkey复制至Realserver2上即可:
第四步:分别为两个节点创建corosync,生成的日志所在的目录:
第五步:分别在每个节点上启动corosync进程服务




◆ 查看corosync启动的相关进程




第六步:检查corosync相关日志信息:
1:查看corosync引擎是否正常启动:
2、查看初始化成员节点通知是否正常发出:
3、查看pacemaker是否正常启动:
第七步:使用如下命令查看集群节点的启动状态:



第八步:配置集群工作属性及集群资源:
◆ 禁用stonith设备和关闭法定票数的默认策略为ingore





◆ 添加集群资源(vip、httpd):



第九步:查看资源的启用状态(crm stauts)



◆ 如果想让两个资源运行在一个Realserver中的话,需要定义组资源,然后将vip和webservice加入到组中即可。





◆ 用windows客户端测试:



第十步:如果其中一个节点发生故障,另一个节点就会取代发生故障的节点,然后对外提供服务。


再次使用windows客户端测试:



◆ 我们知道限制资源运行在同一个节点上,有两种方法(定义资源组和设置排列约束),下面来如何使用排列约束来限制两个资源在同一个节点上,在设置前,我们将资源组web收到删除。

◆ 下面就可以使用排列约束来限制两个资源运行在同一个节点上:



◆ 使用crm status命令查看资源运行节点状态并使用netstat








◆ 设置资源启动顺序







◆ 手动迁移资源到另一个节点:




◆ 用windows客户端测试




◆ 定义资源的黏贴性(倾向性),vip资源更倾向运行在Real1主机上:



◆ 使用crm status命令查看当前资源运行在那个节点上,并手动迁移资源,然后手动在上线,看是否vip资源更倾向于节点一上。

◆ 设定默认黏贴值为200,然后再手动迁移资源,看vip资源是否更倾向于运行在哪个节点上。




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  集群
相关文章推荐