新浪微博 登陆  注册   设为首页 加入收藏

学PHP >> 服务器架构 >> lvs实现Linux集群功能

lvs实现Linux集群功能

查看次数60368 发表时间2012-08-08 00:07:35

Linux下用lvs软件实现集群
  目标:
  学会分别使用LVS的NAT(NAT转换),DR(直接路由),TNU(隧道技术)实现linux下服务器的集群
  结构:
  1. 简单介绍集群的概念
  2. lvs实现集群的三种方式
  3. lvs十种调度算法
  4. ipvsadm的使用方法简介
  5. lvs实现集群实验详细步骤
  内容:
  ======================================================================
  一.集群概念:
  通俗的说集群就是为了完成一些单个计算机不可能完成的或者完成起来很吃力的工作而将多个计算机通过一点的技术连接到一块,但在外界看起来起来还只是一台计算机的技术.用专业术语来说Cluster集群技术是将一组相互独立的服务器在网络中表现为单一的系统,并以单一系统的模式加以管理.此单一系统为客户工作站提供高可靠性的服务.大多数模式下,集群中所有的计算机拥有一个共同的名称,集群内任一系统上运行的服务可被所有的网络客户所使用.Cluster可以协调管理各分离的组件的错误和失败,并可透明地向Cluster中加入组件.一旦在服务器上安装并运行了群集服务,该服务器即可加入群集.群集化操作可以减少单点故障数量,并且实现了群集化资源的高可用性.下述各节简要介绍了群集创建和群集操作中的节点行为.
  目前,越来越多的网站采用Linux操作系统,提供邮件、Web、文件存储、数据库等服务.也有非常多的公司在企业内部网中利用Linux服务器提供这些 服务.随着人们对Linux服务器依赖的加深,对其可靠性、负载能力和计算能力也倍加关注.Linux集群技术应运而生,可以以低廉的成本,很好地满足人们的这些需要.
  Linux竞争力很强的原因之一,是它可以运行于极为普及的PC机上,不需要购买昂贵的专用硬件设备. 在几台运行Linux的PC机上,只要加入相应的集群软件,就可以组成具有超强可靠性、负载能力和计算能力的Linux集群.集群中的每台服务器称为一个节点.

  ===============================
  二.集群的分类
  按照侧重点的不同,可以把Linux集群分为三类:
  高可用性集群 HA (High Avaliability)
  高可用性集群运行于两个或多个节点上,目的是在系统出现某些故障的情况下,仍能继续对外提供服务.高可用性集群的设计思想就是要最大限度地减少服务中断时间.这类集群中比较著名的有Turbolinux TurboHA、Heartbeat、Kimberlite等.
  计算机系统的可用性(availability)是通过系统的可靠性(reliability)和可维护性(maintainability)来度 量的.工程上通常用平均无故障时间(MTTF)来度量系统的可靠性,用平均维修时间(MTTR)来度量系统的可维护性.于是可用性被定义为:
  MTTF/(MTTF MTTR)*100%   
业界根据可用性把计算机系统分为如下几类:     
           可用比例              
(Percent Availability)
         
           年停机时间              
(downtime/year)
         
           可用性分类
         
           99.5
         
           3.7天
         
           常规系统(Conventional)
         
           99.9
         
           8.8小时
         
           可用系统(Available)
         
           99.99
         
           52.6分钟
         
           高可用系统(Highly Available)
         
           99.999
         
           5.3分钟
         
           Fault Resilient
         
           99.9999
         
           32秒
         
           Fault Tolerant
         


  表1. 系统可用性分类   
对于关键业务,停机通常是灾难性的.停机带来的损失也是巨大的.下面的统计数字列举了不同类型企业应用系统停 机所带来的损失.     
           应用系统
         
           每分钟损失(美元)
         
           呼叫中心(Call Center)
         
           27000
         
           企业资源计划(ERP)系统
         
           13000
         
           供应链管理(SCM)系统
         
           11000
         
           电子商务(eCommerce)系统
         
           10000
         
           客户服务(Customer Service Center)系统
         
           27000
         

  表 2. 停机给企业带来的损失   
随着企业越来越依赖于信息技术,系统停机而带来的损失也越拉越大.
  负载均衡集群 LB (Load Balaceing)
  负载均衡集群目的是提供和节点个数成正比的负载能力,这种集群很适合提供大访问 量的Web服务.负载均衡集群往往也具有一定的高可用性特点.Turbolinux Cluster Server、Linux Virtual Server(LVS)都属于负载均衡集群.另一类是超级计算集群,按照计算关联程度的不同,又可以分为两种.一种是任务片方式,要把计算任务分成任务片,再把任务 片分配给各节点,在各节点上分别计算后再把结果汇总,生成最终计算结果.另一种是并行计算方式,节点之间在计算过程中大量地交换数据,可以进行具有强耦合关系的计算.这两种超级计算集群分别适用于不同类型的数据处理工作.有了超级计算集群软件,企业利用若干台PC机就可以完成通常只有超级计算机才能完成的 计算任务.这类软件有Turbolinux EnFusion、SCore等.

  高可用性和负载均衡集群的区别:
  高可用性集群与负载均衡集群的工作原理不同,适用于不同类型的服务.通常,负载均衡集群适用于提供静态数据的服务,如HTTP服务;而高可用性集群既适用于提供静态数据的服务,如HTTP服务,又适用于提供 动态数据的服务,如数据库等.高可用性集群之能适用于提供动态数据的服务,是节点共享同一存储介质,如RAIDBox.也就是说,在高可用性集群 内,每种服务的用户数据只有一份,存储在共用存储设备上,在任一时刻只有一个节点能读写这份数据.
  以Turbolinux TurboHA为例,集群中有两个节点A和B,设这个集群只提供Oracle服务,用户数据存放于共用存储设备的分区/dev/sdb3上.在正常状态 下,节点A提供Oracle数据库服务,分区/dev/sdb3被节点A加载在/mnt/oracle上.当系统出现某种故障并被TurboHA软件检测 到时,TurboHA会将Oracle服务停止,并把分区/dev/sdb3卸载.之后,节点B上的TurboHA软件将在节点B上加载该分区,并启动 Oracle服务.对于Oracle服务有一个虚拟的IP地址,当Oracle服务从节点A切换到节点B上时,虚拟的IP地址也会随之绑定到节点B上,因此用户仍可访问此服务.
  由以上分析可以看出, 负载均衡集群适用于提供相对静态的数据的服务,比如HTTP服务.因 为通常负载均衡集群的各节点间通常没有共用的存储介质,用户数据被复制成多份,存放于每一个提供该项服务的节点上.
  高性能计算集群 HP (High perfomancing)
  高可用性集群对一种服务而言不具有负载均衡功能,它可以提高整个系统的可靠性,但不能增加负载的能力.当然,高可用性集群可以运行多种服务,并适当分配在不同节点上,比如节点A提供Oracle服务,同时节点B提供Sybase服务,这也可以看成是某种意义上的负载均衡,不过这是对多种服务的分配而言. 简单的说,高性能计算(High-Performance Computing)是计算机科的一个分支,它致力于开发超级计算机,研究并行算法开发相关软件.高性能计算主要研究如下两类问题:

  大规模科学问题,象天气预报、地形分析和生物制药等;   
存储和处理海量数据,象数据挖掘、图象处理和基因测序;     
顾名思义,高性能集 群就是采用集群技术来研究高性能计算.
  =======================================
  三. linux下LVS软件实现集群
  Linux 下实现服务器集群的方法有很多种,下面我们主要探讨通过LVS软件来实现linux下服务器的集群.我们有必要简单提下下我们LVS的开源始祖章文嵩.他是内地唯一对开源linux作出卓绝贡献,将LVS嵌入到linux内核中的中国人,有兴趣的可以自己去Google下了.
  下面这幅图就是我们lvs 的架构图,我们需要了解以下几个概念:
  
  Dip(Director's IP address)
  vip(Virtual IP address)
  cip(Client computer's IP address)
  rip(Real IP address)
  LVS工作原理:
  如图所示的就是我们LVS的一个构架图.LVS的工作原理很类似于iptables和netfilter之间的工作方式.我们通过向ipvs中写规则来过滤数据流,从而达到分发控制数据流向,均衡服务器负载的目的:当client来访问服务器时,其目标IP是director分发器的对外网声明的一个viretual ip地址,当director接收到请求后通过自己的真实director ip将请求传递给内网的real server,client实际访问的是real server上的服务,director只是起到一个分发任务给内网各服务器的作用.这里我们需要声明的是linux 2.4.26版本往后的版本都将lvs技术直接嵌入的内核中,我们直接可以使用.
  LVS中ipvs的实现:
  
  和iptables一样,它也是通过这五个钩子函数来实现数据的过滤.因此它和iptables是相互冲突的,两者不能同时共存于系统.过程:
  ① 当一个数据包进入网卡时,它进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去.

  ② 如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链.数据包到了INPUT链后,任何进程都会收到它.本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出.
  ③ 如果数据包是要转发出去的,且内核允许转发,数据包就会如图10-4所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出
  ============================================
  基于ipvs来实现虚拟服务主要有以下三种技术:
  1. 通过NAT实现虚拟服务器(L VS/NAT)
  
  特点:
  1.IP DIP在同一网段,为私有地址
  2.IP为RIP的default gateway
  3.irector很容易会成为整个网络的瓶颈点
  4.IP可支持端口映射
  2通过直接路由实现虚拟服务器(LVS/DR)
  
  特点:
  1.RIP DIP在同一网段,都不必是私有地址,
  2.IP直接给CIP回复,directory只需要处理请求数据,这样的工作效率将成倍的提高,解决了LVM-NAT的瓶颈问题.不能进行端口映射
  3.IP不支持端口映射.服务使用默认的端口
  4.理员可以直接通过Internet连接到RIP对服务器进行配置.但这里同时也存在着来自Internet的网络安全隐患
  3.通过IP隧道实现虚拟服务器(LVS/TUN)
  
  特点:
  1.IP DIP 都为公网地址,DIP RIP之间数据通过网络Internet传送.因此directory和server可以不再同一个网段,可以跨越地区,其他的都和LVM-DR形式的一样,
  LVM scheduling Methods
  2.其耗资源,投资较大,在实际应用中并不常用.这里不做详细介绍.
  ======================================================================
  LVS的调度方法:
  -s 指定服务采用的算法,常用的算法参数如下:

  Fixed echeduling(rr wrr dh sh)===========静态调度方法
  1. 轮叫 Round-robin (RR)
  调度器通过"轮叫"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载.
  2. 加权轮叫 Weithted round-robin (WRR)
  调度器通过"加权轮叫"调度算法根据真实服务器的不同处理能力来调度访问请求.这样可以保证处理能力强的服务器处理更多的访问流量.调度器可以自动问询真实服务器的负载情况,并动态地调整其权值
  3. 目标地址散列 Destination hashing (DH)
  "目标地址散列"调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空.
  4. 源地址散列 Source hash (SH)
  "源地址散列"调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空.   
Dynamic Scheduling (lc wlc sed nq lblc lblcr)=====动态调度方法
  其算法是:活动链接数x256 非活动链接数 将client请求分给数值小的服务器.
  1. 最少链接 Least-connect (LC)
  调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上.如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载.
  2. 加权最少链接 Weighted least-connection (WLC) (Default)
  在集群系统中的服务器性能差异较大的情况下,调度器采用"加权最少链接"调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载.调度器可以自动问询真实服务器的负载情况,并动态地调整其权值.

  3. 最短期望连接Shortest Expected delay(SED)
  对wlc的改进,在wlc算法的基础上给权重值加一,主要用来针对某个服务器活动链接数值为0情况
  4. 从不排队Never Quene(NQ)
  基于SED算法的改进,不排队
  5. 基于局部性的最少链接locality-based least-connection (LBLC)
  基于局部的最少连接
  6. 带复制的基于局部性最少链接 Locality-Based Least Connectionswith Replication (LBLCR)
  
  
  四. IPVS命令的用法:
  ===================================================================
  IPVS命令用法:
  ipvsadm 的用法和格式如下:ipvsadm -A|E -t|u|f virutal-service-address:port [-s scheduler] [-p [timeout]] [-M netmask] ipvsadm -D -t|u|f virtual-service-address ipvsadm -C ipvsadm -R ipvsadm -S [-n] ipvsadm -a|e -t|u|f service-address:port -r real-server-address:port [-g|i|m] [-w weight] ipvsadm -d -t|u|f service-address -r server-address ipvsadm -L|l [options] ipvsadm -Z [-t|u|f service-address] ipvsadm ——set tcp tcpfin udp ipvsadm ——start-daemon state [——mcast-interface interface] ipvsadm ——stop-daemon ipvsadm -h命令选项解释:有两种命令选项格式,长的和短的,具有相同的意思.在实际使用时,两种都可以.   
-A ——add-service 在内核的虚拟服务器表中添加一条新的虚拟服务器记录.也就是增加一台新的虚拟服务器.     
-E ——edit-service 编辑内核虚拟服务器表中的一条虚拟服务器记录.     
-D ——delete-service 删除内核虚拟服务器表中的一条虚拟服务器记录.     
-C ——clear 清除内核虚拟服务器表中的所有记录.     
-R ——restore 恢复虚拟服务器规则
  -S ——save 保存虚拟服务器规则,输出为-R 选项可读的格式
  -a ——add-server 在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录.也就是在一个虚拟服务器中增加一台新的真实服务器

  -e ——edit-server 编辑一条虚拟服务器记录中的某条真实服务器记录
  -d ——delete-server 删除一条虚拟服务器记录中的某条真实服务器记录
  -L|-l ——list 显示内核虚拟服务器表
  -Z ——zero 虚拟服务表计数器清零(清空当前的连接数量等)     
——set tcp tcpfin udp 设置连接超时值
  ——start-daemon 启动同步守护进程.他后面可以是master 或backup,用来说明LVS Router 是master 或是backup.在这个功能上也可以采用keepalived 的VRRP 功能.     
——stop-daemon 停止同步守护进程
  -h ——help 显示帮助信息其他的选项:-t ——tcp-service service-address 说明虚拟服务器提供的是tcp 的服务[vip:port] or [real-server-ip:port] -u ——udp-service service-address 说明虚拟服务器提供的是udp 的服务[vip:port] or [real-server-ip:port] -f ——fwmark-service fwmark 说明是经过iptables 标记过的服务类型.     
-s ——scheduler scheduler 使用的调度算法,有这样几个选项rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,默认的调度算法是: wlc. -p ——persistent [timeout] 持久稳固的服务.这个选项的意思是来自同一个客户的多次请求,将被同一台真实的服务器处理.timeout 的默认值为300 秒.     
-M ——netmask netmask persistent granularity mask
  -r ——real-server server-address 真实的服务器[Real-Server:port]
  -g ——gatewaying 指定LVS 的工作模式为直接路由模式(也是LVS 默认的模式)     
-i ——ipip 指定LVS 的工作模式为隧道模式-m ——masquerading 指定LVS 的工作模式为NAT 模式-w ——weight weight 真实服务器的权值——mcast-interface interface 指定组播的同步接口-c ——connection 显示LVS 目前的连接 如:ipvsadm -L -c——timeout 显示tcp tcpfin udp 的timeout 值 如:ipvsadm -L ——timeout——daemon 显示同步守护进程状态——stats 显示统计信息——rate 显示速率信息——sort 对虚拟服务器和真实服务器排序输出——numeric -n 输出IP 地址和端口的数字形式

  ============================================================================================================================================
  五.实验
  
                                                      
  一.通过NAT实现虚拟服务器(L VS/NAT)实验环境:
  实验环境:
  Client: CIP:10.0.0.5/24
  Director:VIP:10.0.0.1/24
  DIP:192.168.0.1/24
  Realserver1: RIP:192.168.0.222/24
  Realserver2: RIP:192.168.0.223/24
  实验拓扑图:
  
  
  IPVS配置:
  [root@node2 ~]# yum install ipvsadm -y
  [root@node2 ~]# ipvsadm -L -n
  IP Virtual Server version 1.2.1 (size=4096)
  Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn
  [root@node2 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
  [root@node2 ~]# cat /proc/sys/net/ipv4/ip_forward
  1
  [root@node2 ~]# service iptables stop
  [root@node2 ~]# ipvsadm -A -t 10.0.0.1:80 -s rr
  [root@node2 ~]# ipvsadm -a -t 10.0.0.1:80 -r 192.168.0.222:80 -m
  [root@node2 ~]# ipvsadm -a -t 10.0.0.1:80 -r 192.168.0.223:80 -m
  [root@node2 ~]# ipvsadm -L -n
  IP Virtual Server version 1.2.1 (size=4096)
  Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn
  TCP 10.0.0.1:80 rr
  -> 192.168.0.223:80 Masq 1 0 0
  -> 192.168.0.222:80 Masq 1 0 0
  realserver1和realserver2配置:
  [root@station7 html]# yum install httpd –y
  [root@station7 html]#service httpd restart
  注意:
  需配置网关,分别指向director内网地址
  在client测试(轮显如下realserver上的服务):
  
  
  小结:
  1. RIP和DIP在同一网段,并且都是私有地址.
  2. RIP网关需指向DIP,否则无法成功的.

  3.Director的防火墙需要关闭
                                                            
                                                            
  二.通过直接路由实现虚拟服务器(LVS/DR)
  实验环境:
  Client: CIP:192.168.0.100/24
  Director:VIP:192.168.0.210/32(条件限制我们这里用同一网段地址)
  DIP:192.168.0.1/24
  Realserver1: RIP:192.168.0.222/24 VIP:192.168.0.210/32
  Realserver2: RIP:192.168.0.223/24 VIP:192.168.0.210/32
  这里需要接触到VIP隐藏,参加《LVS中VIP隐藏的实现》篇
  实验拓扑图:
  
  IPVS配置:
  [root@node2 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
  [root@node2 ~]# cat /proc/sys/net/ipv4/ip_forward
  1
  [root@node2 ~]# route add -host 192.168.0.210 dev eth0
  [root@node2 ~]# route -n
  Kernel IP routing table
  Destination Gateway Genmask Flags Metric Ref Use Iface
  192.168.0.210 * 255.255.255.255 UH 0 0 0 eth0
  192.168.0.0 * 255.255.255.0 U 0 0 0 eth1
  169.254.0.0 * 255.255.0.0 U 0 0 0 eth1
  [root@node2 ~]# ipvsadm -C
  [root@node2 ~]# ipvsadm -A -t 192.168.0.210:80 -s wlc
  [root@node2 ~]# ipvsadm -a -t 192.168.0.210:80 -r 192.168.0.222 -w 1 -g
  [root@node2 ~]# ipvsadm -a -t 192.168.0.210:80 -r 192.168.0.223 -w 3 -g
  [root@node2 ~]# ipvsadm -L -n
  IP Virtual Server version 1.2.1 (size=4096)
  Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn
  TCP 192.168.0.210:80 wlc
  -> 192.168.0.223:80 Route 3 0 0
  -> 192.168.0.222:80 Route 1 0 0
  
  realserver1和realserver2配置两者一样:
  [root@station7 html]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
  [root@station7 html]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

  [root@station7 html]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
  [root@station7 html]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
  [root@station7 html]# ifconfig lo: 192.168.0.210 broadcast 192.168.0.210 netmask 255.255.255.255 up
  [root@station7 html]# route add -host 192.168.0.210 dev lo:0
  [root@station7 html]# route -n
  Kernel IP routing table
  Destination Gateway Genmask Flags Metric Ref Use Iface
  192.168.0.210 0.0.0.0 255.255.255.255 UH 0 0 0 lo
  192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
  169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
  在客户端我们地址栏我们输入http://192.168.0.210会轮显realserver
  
  
  以上知识仅为集群的一些基础知识.在下篇我们一起来学习实际应用中集群的应用
  1.LVS中隐藏IP的实现
  2.iptables标记
  3.HA高可用性集群 (heartbeat)
  4.ldirectord解决主备节点“脑裂”问题

  5.drbd和 mon应用




















Linux群集LVS简介

一、 LVS简介
LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver.org。现在LVS已经是 Linux标准内核的一部分,在Linux2.4内核以前,使用LVS时必须要重新编译内核以支持LVS功能模块,但是从Linux2.4内核以后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能。
使用LVS技术要达到的目标是:通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。
LVS自从1998年开始,发展到现在已经是一个比较成熟的技术项目了。可以利用LVS技术实现高可伸缩的、高可用的网络服务,例如WWW服务、Cache服务、DNS服务、FTP服务、MAIL服务、视频/音频点播服务等等,有许多比较著名网站和组织都在使用LVS架设的集群系统,例如:Linux的门户网站(www.linux.com)、向RealPlayer提供音频视频服务而闻名的Real公司(www.real.com)、全球最大的开源网站(sourceforge.net)等。
二、 LVS体系结构
使用LVS架设的服务器集群系统有三个部分组成:最前端的负载均衡层,用Load Balancer表示,中间的服务器群组层,用Server Array表示,最底端的数据共享存储层,用Shared Storage表示,在用户看来,所有的内部应用都是透明的,用户只是在使用一个虚拟服务器提供的高性能服务。
LVS体系结构如图1所示:

图1 LVS的体系结构
 

下面对LVS的各个组成部分进行详细介绍:
 Load Balancer层:位于整个集群系统的最前端,有一台或者多台负载调度器(Director Server)组成,LVS模块就安装在Director Server上,而Director的主要作用类似于一个路由器,它含有完成LVS功能所设定的路由表,通过这些路由表把用户的请求分发给Server Array层的应用服务器(Real Server)上。同时,在Director Server上还要安装对Real Server服务的监控模块Ldirectord,此模块用于监测各个Real Server服务的健康状况。在Real Server不可用时把它从LVS路由表中剔除,恢复时重新加入。
 Server Array层:由一组实际运行应用服务的机器组成,Real Server可以是WEB服务器、MAIL服务器、FTP服务器、DNS服务器、视频服务器中的一个或者多个,每个Real Server之间通过高速的LAN或分布在各地的WAN相连接。在实际的应用中,Director Server也可以同时兼任Real Server的角色。
 Shared Storage层:是为所有Real Server提供共享存储空间和内容一致性的存储区域,在物理上,一般有磁盘阵列设备组成,为了提供内容的一致性,一般可以通过NFS网络文件系统共享数据,但是NFS在繁忙的业务系统中,性能并不是很好,此时可以采用集群文件系统,例如Red hat的GFS文件系统,oracle提供的OCFS2文件系统等。
从整个LVS结构可以看出,Director Server是整个LVS的核心,目前,用于Director Server的操作系统只能是Linux和FreeBSD,linux2.6内核不用任何设置就可以支持LVS功能,而FreeBSD作为Director Server的应用还不是很多,性能也不是很好。
对于Real Server,几乎可以是所有的系统平台,Linux、windows、Solaris、AIX、BSD系列都能很好的支持。

三、  LVS集群的特点
3.1  IP负载均衡与负载调度算法

1.IP负载均衡技术
负载均衡技术有很多实现方案,有基于DNS域名轮流解析的方法、有基于客户端调度访问的方法、有基于应用层系统负载的调度方法,还有基于IP地址的调度方法,在这些负载调度算法中,执行效率最高的是IP负载均衡技术。
LVS的IP负载均衡技术是通过IPVS模块来实现的,IPVS是LVS集群系统的核心软件,它的主要作用是:安装在Director Server上,同时在Director Server上虚拟出一个IP地址,用户必须通过这个虚拟的IP地址访问服务。这个虚拟IP一般称为LVS的VIP,即Virtual IP。访问的请求首先经过VIP到达负载调度器,然后由负载调度器从Real Server列表中选取一个服务节点响应用户的请求。
当用户的请求到达负载调度器后,调度器如何将请求发送到提供服务的Real Server节点,而Real Server节点如何返回数据给用户,是IPVS实现的重点技术,IPVS实现负载均衡机制有三种,分别是NAT、TUN和DR,详述如下:
 VS/NAT: 即(Virtual Server via Network Address Translation)
也就是网络地址翻译技术实现虚拟服务器,当用户请求到达调度器时,调度器将请求报文的目标地址(即虚拟IP地址)改写成选定的Real Server地址,同时报文的目标端口也改成选定的Real Server的相应端口,最后将报文请求发送到选定的Real Server。在服务器端得到数据后,Real Server返回数据给用户时,需要再次经过负载调度器将报文的源地址和源端口改成虚拟IP地址和相应端口,然后把数据发送给用户,完成整个负载调度过程。
可以看出,在NAT方式下,用户请求和响应报文都必须经过Director Server地址重写,当用户请求越来越多时,调度器的处理能力将称为瓶颈。
 VS/TUN :即(Virtual Server via IP Tunneling)
也就是IP隧道技术实现虚拟服务器。它的连接调度和管理与VS/NAT方式一样,只是它的报文转发方法不同,VS/TUN方式中,调度器采用IP隧道技术将用户请求转发到某个Real Server,而这个Real Server将直接响应用户的请求,不再经过前端调度器,此外,对Real Server的地域位置没有要求,可以和Director Server位于同一个网段,也可以是独立的一个网络。因此,在TUN方式中,调度器将只处理用户的报文请求,集群系统的吞吐量大大提高。
 VS/DR: 即(Virtual Server via Direct Routing)
也就是用直接路由技术实现虚拟服务器。它的连接调度和管理与VS/NAT和VS/TUN中的一样,但它的报文转发方法又有不同,VS/DR通过改写请求报文的MAC地址,将请求发送到Real Server,而Real Server将响应直接返回给客户,免去了VS/TUN中的IP隧道开销。这种方式是三种负载调度机制中性能最高最好的,但是必须要求Director Server与Real Server都有一块网卡连在同一物理网段上。

2.负载调度算法
上面我们谈到,负载调度器是根据各个服务器的负载情况,动态地选择一台Real Server响应用户请求,那么动态选择是如何实现呢,其实也就是我们这里要说的负载调度算法,根据不同的网络服务需求和服务器配置,IPVS实现了如下八种负载调度算法,这里我们详细讲述最常用的四种调度算法,剩余的四种调度算法请参考其它资料。
 轮叫调度(Round Robin)
“轮叫”调度也叫1:1调度,调度器通过“轮叫”调度算法将外部用户请求按顺序1:1的分配到集群中的每个Real Server上,这种算法平等地对待每一台Real Server,而不管服务器上实际的负载状况和连接状态。
 加权轮叫调度(Weighted Round Robin)
“加权轮叫”调度算法是根据Real Server的不同处理能力来调度访问请求。可以对每台Real Server设置不同的调度权值,对于性能相对较好的Real Server可以设置较高的权值,而对于处理能力较弱的Real Server,可以设置较低的权值,这样保证了处理能力强的服务器处理更多的访问流量。充分合理的利用了服务器资源。同时,调度器还可以自动查询Real Server的负载情况,并动态地调整其权值。
 最少链接调度(Least Connections)
“最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用“最小连接”调度算法可以较好地均衡负载。
 加权最少链接调度(Weighted Least Connections)
“加权最少链接调度”是“最少连接调度”的超集,每个服务节点可以用相应的权值表示其处理能力,而系统管理员可以动态的设置相应的权值,缺省权值为1,加权最小连接调度在分配新连接请求时尽可能使服务节点的已建立连接数和其权值成正比。
其它四种调度算法分别为:基于局部性的最少链接(Locality-Based Least Connections)、带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)、目标地址散列(Destination Hashing)和源地址散列(Source Hashing),对于这四种调度算法的含义,本文不再讲述,如果想深入了解这其余四种调度策略的话,可以登陆LVS中文站点zh.linuxvirtualserver.org,查阅更详细的信息。

3.2 高可用性
LVS是一个基于内核级别的应用软件,因此具有很高的处理性能,用LVS构架的负载均衡集群系统具有优秀的处理能力,每个服务节点的故障不会影响整个系统的正常使用,同时又实现负载的合理均衡,使应用具有超高负荷的服务能力,可支持上百万个并发连接请求。如配置百兆网卡,采用VS/TUN或VS/DR调度技术,整个集群系统的吞吐量可高达1Gbits/s;如配置千兆网卡,则系统的最大吞吐量可接近10Gbits/s。

3.3 高可靠性
LVS负载均衡集群软件已经在企业、学校等行业得到了很好的普及应用,国内外很多大型的、关键性的web站点也都采用了LVS集群软件,所以它的可靠性在实践中得到了很好的证实。有很多以LVS做的负载均衡系统,运行很长时间,从未做过重新启动。这些都说明了LVS的高稳定性和高可靠性。

3.4 适用环境
LVS对前端Director Server目前仅支持Linux和FreeBSD系统,但是支持大多数的TCP和UDP协议,支持TCP协议的应用有:HTTP,HTTPS ,FTP,SMTP,,POP3,IMAP4,PROXY,LDAP,SSMTP等等。支持UDP协议的应用有:DNS,NTP,ICP,视频、音频流播放协议等。
LVS对Real Server的操作系统没有任何限制,Real Server可运行在任何支持TCP/IP的操作系统上,包括Linux,各种Unix(如FreeBSD、Sun Solaris、HP Unix等),Mac/OS和Windows等。

3.5 开源软件
LVS集群软件是按GPL(GNU Public License)许可证发行的自由软件,因此,使用者可以得到软件的源代码,并且可以根据自己的需要进行各种修改,但是修改必须是以GPL方式发行。



(转发请注明转自:学PHP)    


  相关推荐



1楼 Jennah说: 2016-12-21 20:08:08
Good to see a talnet at work. I can't match that.

  发表评论
昵称:
(不超过20个字符或10个汉字)
内容: