LVS+Keepalived

来源:互联网 发布:迈网络摄像头默认ip 编辑:程序博客网 时间:2024/06/05 10:08

Linux负载均衡软件LVS

 LVS集群的体系结构以及特点

1、 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)等。

2、 LVS体系结构

         使用LVS架设的服务器集群系统有三个部分组成:最前端的负载均衡层,用Load Balancer表示,中间的服务器群组层,用Server Array表示,最底端的数据共享存储层,用Shared Storage表示。

 

         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文件系统等。

3、 LVS集群的特点

   (1)IP负载均衡与负载调度算法

1)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 AddressTranslation)

    也就是网络地址翻译技术实现虚拟服务器,当用户请求到达调度器时,调度器将请求报文的目标地址(即虚拟IP地址)改写成选定的Real Server地址,同时报文的目标端口也改成选定的Real Server的相应端口,最后将报文请求发送到选定的Real Server。在服务器端得到数据后,Real Server返回数据给用户时,需要再次经过负载调度器将报文的源地址和源端口改成虚拟IP地址和相应端口,然后把数据发送给用户,完成整个负载调度过程。

VS/TUN :即(Virtual Server viaIP Tunneling)

    也就是IP隧道技术实现虚拟服务器。它的连接调度和管理与VS/NAT方式一样,只是它的报文转发方法不同,VS/TUN方式中,调度器采用IP隧道技术将用户请求转发到某个Real Server,而这个Real Server将直接响应用户的请求,不再经过前端调度器,此外,对RealServer的地域位置没有要求,可以和Director Server位于同一个网段,也可以是独立的一个网络。因此,在TUN方式中,调度器将只处理用户的报文请求,集群系统的吞吐量大大提高。

VS/DR: 即(Virtual Server viaDirect Routing)

    也就是用直接路由技术实现虚拟服务器。它的连接调度和管理与VS/NAT和VS/TUN中的一样,但它的报文转发方法又有不同,VS/DR通过改写请求报文的MAC地址,将请求发送到Real Server,而Real Server将响应直接返回给客户,免去了VS/TUN中的IP隧道开销。这种方式是三种负载调度机制中性能最高最好的,但是必须要求DirectorServer与Real Server都有一块网卡连在同一物理网段上。

     FULL NAT 模式

2)负载调度算法

    IPVS实现了如下八种负载调度算法,这里我们详细讲述最常用的四种调度算法,剩余的四种调度算法请参考其它资料。

  轮叫调度(Round Robin)

    “轮叫”调度也叫1:1调度,调度器通过“轮叫”调度算法将外部用户请求按顺序1:1的分配到集群中的每个Real Server上,这种算法平等地对待每一台Real Server,而不管服务器上实际的负载状况和连接状态。

    加权轮叫调度(Weighted Round Robin)

    “加权轮叫”调度算法是根据RealServer的不同处理能力来调度访问请求。可以对每台Real Server设置不同的调度权值,对于性能相对较好的Real Server可以设置较高的权值,而对于处理能力较弱的Real Server,可以设置较低的权值,这样保证了处理能力强的服务器处理更多的访问流量。充分合理的利用了服务器资源。同时,调度器还可以自动查询Real Server的负载情况,并动态地调整其权值。

  最少链接调度(Least Connections)

    “最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用“最小连接”调度算法可以较好地均衡负载。

  加权最少链接调度(Weighted Least Connections)

    “加权最少链接调度”是“最少连接调度”的超集,每个服务节点可以用相应的权值表示其处理能力,而系统管理员可以动态的设置相应的权值,缺省权值为1,加权最小连接调度在分配新连接请求时尽可能使服务节点的已建立连接数和其权值成正比。

    其它四种调度算法分别为:基于局部性的最少链接(Locality-Based LeastConnections)、带复制的基于局部性最少链接(Locality-Based LeastConnections with Replication)、目标地址散列(DestinationHashing)和源地址散列(Source Hashing),对于这四种调度算法的含义,这里不再讲述,如果想深入了解这其余四种调度策略的话,可以登陆LVS中文站点zh.linuxvirtualserver.org,查阅更详细的信息

。3、 LVS集群的特点

 (2)高可用性

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

(3)高可靠性

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

(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等。

 

 

通过LVS+Keepalived搭建高可用的负载均衡集群系统

1、 安装LVS软件

      (1)安装前准备

操作系统:统一采用Centos5.3版本,地址规划如下:


更详细的信息如下图所示:

    图中的VIP指的是虚拟IP地址,还可以叫做LVS集群的服务IP,在DR、TUN模式中,数据包是直接返回给用户的,所以,在Director Server上以及集群的每个节点上都需要设置这个地址。此IP在Real Server上一般绑定在回环地址上,例如lo:0,同样,在Director Server上,虚拟IP绑定在真实的网络接口设备上,例如eth0:0。

    各个Real Server可以是在同一个网段内,也可以是相互独立的网段,还可以是分布在internet上的多个服务器.

      (1)安装前准备

安装的LVS负载均衡集群拓扑图:


      (2)安装操作系统需要注意的事项

    Centos5.3版本的Linux,内核默认支持LVS功能,为了方便编译安装IPVS管理软件,在安装操作系统时,建议选择如下这些安装包:

l   桌面环境:xwindows system、GNOMEdesktop environment。

l   开发工具:development tools、x software development、gnome software、development、kde software development。

系统安装完毕,可以通过如下命令检查kernel是否已经支持LVS的ipvs模块:

[root@localhost~]#modprobe -l |grep ipvs

/lib/modules/2.6.18-194.11.1.el5/kernel/net/ipv4/ipvs/ip_vs.ko

/lib/modules/2.6.18-194.11.1.el5/kernel/net/ipv4/ipvs/ip_vs_dh.ko

如果有类似上面的输出,表明系统内核已经默认支持了IPVS模块。接着就可以安装IPVS管理软件了

(3)在Director Serve上安装IPVS管理软件

    IPVS提供的软件包有源码方式的也有rpm方式的,这里介绍下源码方式安装IPVS,首先从http://www.linuxvirtualserver.org/software/ipvs.html下载对应版本的ipvs源码,由于我们这里采用的操作系统为Centos5.3版本,因此,下载对应的ipvsadm-1.24版本,接着进行安装:

[root@localhost~]#tar zxvf ipvsadm-1.24.tar.gz

[root@localhost~]#cd ipvsadm-1.24

[root@localhost~]#make

[root@localhost~]#make install

    注意:在make时可能会出现错误编译信息,这是由于编译程序找不到对应内核的原因,按照如下操作就可以正常编译:

[root@localhost~]#ln-s /usr/src/kernels/2.6.18-128.el5-i686/ /usr/src/linux

也可以下载rpm安装包,通过rpm方式进行安装:

[root@localhost~]#rpm –ivh ipvsadm-1.24-6.1.i386.rpm

然后执行:

[root@localhost~]# ipvsadm --help

如果看到帮助提示,表明IPVS已经成功安装。

(4)ipvsadm的用法


举例如下:

[root@localhost~]# ipvsadm -A -t 192.168.12.135:80 -s rr -p 600

    以上表示在内核的虚拟服务器列表中添加一条192.168.12.135的虚拟服务器记录,并且指定此虚拟服务器的服务端口为80,然后指定此虚拟服务器的调度策略为轮询调度,并且在每个real server上的持续服务时间为600秒,即10分钟

[root@localhost~]# ipvsadm -A -t 192.168.12.188:21 -s wlc

    以上表示在内核的虚拟服务器列表中又添加了一条192.168.12.188的虚拟服务器,此虚拟服务器的服务端口为21,即FTP服务。使用的调度策略为wlc,即加权最少链接算法。

[root@localhost~]# ipvsadm -a -t 192.168.12.135:80 -r 192.168.12.246:80 –g

[root@localhost~]# ipvsadm -a -t 192.168.12.135:80 -r 192.168.12.237:80 –g

    以上两条设置表示在虚拟服务器192.168.12.135中添加两条新的Real Server记录,两个Real Server的IP分别为192.168.12.246和192.168.12.237,参数“-g”指定了虚拟服务器的工作模式为直接路由模式,即DR模式。

2、 开始配置LVS集群

下面通过搭建www服务的负载均衡实例,讲述基于DR模式的LVS集群配置。

(1) DirectorServer的配置

在Director Server上配置LVS负载均衡集群,有两种方法:

ؠؠ  通过ipvsadm命令行进行配置

Ø          通过Redhat提供的工具piranha来配置LVS

1) 通过ipvsadm命令行方式配置LVS

安装IPVS后,就可以配置LVS集群了,首先在Director Server上绑定一个虚拟IP(也叫VIP),此IP用于对外提供服务,执行如下命令:

2) [root@localhost ~]#ifconfigeth0:0 192.168.12.135 broadcast 192.168.12.135 netmask 255.255.255.255 up

3) 此处在eth0设备上绑定了一个虚拟设备eth0:0,同时设置了一个虚拟IP是192.168.12.135,也就是上面我们规划的IP地址,然后指定广播地址也为192.168.12.135,需要特别注意的是,这里的子网掩码为255.255.255.255。

4) 然后给设备eth0:0指定一条路由,执行如下指令:

5) [root@localhost ~]#route add-host 192.168.12.135 dev eth0:0      

6) [root@localhost ~]#echo"1" >/proc/sys/net/ipv4/ip_forward

7) 指令中,参数值为1时启用ip转发,为0时禁止ip转发。其实在DR模式中,开启系统的包转发功能不是必须的,而在NAT模式下此操作是必须的。

8)  

然后开始配置ipvs,执行如下操作:

[root@localhost~]#ipvsadm -C

[root@localhost~]#ipvsadm -A -t 192.168.12.135:80 -s rr -p 600

[root@localhost~]#ipvsadm -a -t 192.168.12.135:80 -r 192.168.12.246:80 -g

[root@localhost~]#ipvsadm -a -t 192.168.12.135:80 -r 192.168.12.237:80 -g

上面操作中,第一行是清除内核虚拟服务器列表中的所有记录,第二行是添加一条新的虚拟IP记录。这个新的IP是192.168.12.135,同时指定持续服务时间为600秒。第三、四行是在新加虚拟IP记录中添加两条新的Real Server记录,并且指定LVS 的工作模式为直接路由模式。

最后,启动LVS服务,执行如下操作:

[root@localhost~]#ipvsadm

这样,LVS在Director Server上的配置就完成了.

为了管理和配置的方便,可以将上面的操作写成一个脚本文件,脚本内容如下:

#!/bin/sh

#description: Start LVS of Director server

VIP=192.168.12.135

RIP1=192.168.12.246

RIP2=192.168.12.237

. /etc/rc.d/init.d/functions

case"$1" in

    start)

        echo " start LVS of DirectorServer"

# set theVirtual  IP Address and sysctl parameter

 /sbin/ifconfig eth0:0 $VIP broadcast $VIPnetmask 255.255.255.255 up

       echo "1">/proc/sys/net/ipv4/ip_forward

#Clear IPVStable

       /sbin/ipvsadm -C

#set LVS

/sbin/ipvsadm-A -t $VIP:80 -s rr -p 600

/sbin/ipvsadm-a -t $VIP:80 -r $RIP1:80 -g

/sbin/ipvsadm-a -t $VIP:80 -r $RIP2:80 -g

#Run LVS

      /sbin/ipvsadm

       ;;

    stop)

        echo "close LVSDirectorserver"

        echo "0">/proc/sys/net/ipv4/ip_forward

        /sbin/ipvsadm -C

        /sbin/ifconfig eth0:0 down

        ;;

    *)

        echo "Usage: $0 {start|stop}"

        exit 1

esac

将此脚本命名为lvsDR文件,然后把文件放到/etc/init.d下,执行:

[root@localhost~]#chomd 755 /etc/init.d/lvsDR

最后可以通过下面命令启动或停止LVS服务:

servicelvsDR {start|stop}

到此为止,命令行方式配置Director Server完毕。

3、Real server 的配置

    在lvs的DR和TUn模式下,用户的访问请求到达真实服务器后,是直接返回给用户的,而不再经过前端的DirectorServer,因此,就需要在每个Real server节点上增加虚拟的VIP地址,这样数据才能直接返回给用户,增加VIP地址的操作可以通过创建脚本的方式来实现,创建文件/etc/init.d/lvsrs,脚本内容如下:

#!/bin/bash

#desription: start realserver

VIP=10.0.0.110

./etc/rc.d/init.d/functions

case"$1" in

start)

echo"start LVS of REALServer"

/sbin/ifconfiglo:0 $VIP broadcast $VIP netmask 255.255.255.255 up

echo"1" >/proc/sys/net/ipv4/conf/lo/arp_ignore

echo"2" >/proc/sys/net/ipv4/conf/lo/arp_announce

echo"1" >/proc/sys/net/ipv4/conf/all/arp_ignore

echo"2" >/proc/sys/net/ipv4/conf/all/arp_announce

;;

stop)

echo"stop LVS of REALServer"

/sbin/ifconfiglo:0 down

echo"0" >/proc/sys/net/ipv4/conf/lo/arp_ignore

echo"0" >/proc/sys/net/ipv4/conf/lo/arp_announce

echo"0" >/proc/sys/net/ipv4/conf/all/arp_ignore

echo"0" >/proc/sys/net/ipv4/conf/all/arp_announce

;;

*)

echo"Usage: $0 {start|stop}"

exit1

esac

    此操作是在回环设备上绑定了一个虚拟IP地址,并设定其子网掩码为255.255.255.255,与Director Server上的虚拟IP保持互通,然后禁止了本机的ARP请求。

    由于虚拟ip,也就是上面的VIP地址,是Director Server和所有的Real server共享的,如果有ARP请求VIP地址时,DirectorServer与所有Real server都做应答的话,就出现问题了,因此,需要禁止Real server响应ARP请求。而lvsrs脚本的作用就是使Real Server不响应arp请求。

4、在Director上配置冗余策略 Ldirectord

    在heartbeat中,ldirectord其实是作为它的一个插件出现的,所以它默认包含在heartbeat软件包中,Ldirectord的核心作用是监控Real Server节点状态,当Real Server失效时,把它从虚拟服务器列表中删除,恢复时重新添加到列表,同时,它还能调用ipvsadm自动创建LVS路由表,这点从下面要讲述的ldirectord.cf中可以看出,这里需要说明的是,ldirectord和Piranha都具有监控Real Server的功能,如果要通过ldirectord监控节点状态,只需启动ldirectord服务,整个集群系统就可以运行起来,而无需执行上面我们配置的LVS脚本,因为ldirectord会自动调用ipvsadm创建LVS路由表,而我们上面讲述的利用ipvsadm命令行方式配置LVS,是为了让读者能更深入的了解ipvsadm的实现细节和实现机制。

    如果是通过Piranha工具配置LVS,就无需使用ldirectord,Piranha工具对应的系统进程是pluse,此进程也会自动调用ipvsadm创建LVS路由表,同时会利用自身的nanny守护进程监控real server的状态!

    ldirectord的安装非常简单,直接通过yum就可以安装完成:

[root@localhostroot]#yum install  heartbeat-ldirectord

安装完成后,默认的安装路径为/etc/ha.d,同时需要将模板配置文件拷贝到这个目录下,执行如下命令:

[root@localhostroot]# rpm -q heartbeat-ldirectord -d                              

/usr/share/doc/heartbeat-ldirectord-2.1.3/ldirectord.cf

/usr/share/man/man8/ldirectord.8.gz

[root@localhostroot]# cp /usr/share/doc/heartbeat-ldirectord-2.1.3/ldirectord.cf /etc/ha.d

可以通过执行如下命令启动或关闭ldirectord服务

/etc/init.d/ldirectord{start|stop}

Ldirectord的配置文件是/etc/ha.d/ldirectord.cf,下面详述下这个文件每个参数的含义:

下面是需要配置的选项,注意,“#”号后面的内容为注释:

#Global Directives

checktimeout=20           #判定real server出错的时间间隔。

checkinterval=10          #指定ldirectord在两次检查之间的间隔时间。

fallback=127.0.0.1:80     #当所有的real server节点不能工作时,web服务重定向的地址。

autoreload=yes            #是否自动重载配置文件,选yes时,配置文件发生变化,自动载入配置信息。

logfile="/var/log/ldirectord.log"      #设定ldirectord日志输出文件路径。

quiescent=no              #当选择no时,如果一个节点在checktimeout设置的时间周期内没有响应,ldirectord将会从LVS的路由表中直接移除real server,此时,将中断现有的客户端连接,并使LVS丢掉所有的连接跟踪记录和持续连接模板,如果选择为yes,当某个real server失效时,ldirectord将失效节点的权值设置为0,新的连接将不能到达,但是并不从LVS路由表中清除此节点,同时,连接跟踪记录和程序连接模板仍然保留在Director上。

注意:以上几行为ldirectord.cf文件的“全局”设置,它们可以应用到下面多个虚拟主机,下面是每个虚拟主机的配置。

#Sample for an http virtual service

virtual=192.168.12.135:80           #指定虚拟的IP地址和端口号,注意,在virtual行后面的行必

须缩进4个空格或以一个tab字符进行标记。

real=192.168.12.246:80gate      #指定Real Server服务器地址和端口,同时设定LVS工作模式,

用gate表示DR模式,ipip表示TUNL模式,masq表示NAT模式。

real=192.168.12.237:80gate

fallback=127.0.0.1:80gate      

service=http                     #指定服务的类型,这里是对http服务做负载均衡。

request="index.html"             #ldirectord将根据指定的Real Server地址,结合该选项给出

的请求路径,发送访问请求,检查Real Server上的服务是否正常运行,确保这里给出的页面地址是可访问的,不然ldirectord会误认为此节点已经失效,发生错误监控现象。

receive="TestPage"              #指定请求和应答字串。

scheduler=rr                     #指定调度算法,这里是rr(轮叫)算法。

protocol=tcp                     #指定协议的类型,LVS支持TCP和UDP协议。

checktype=negotiate              #指定Ldirectord的检测类型,默认为negotiate。

checkport=80                        #指定监控的端口号。

virtualhost=www.ixdba.net        #虚拟服务器的名称,随便指定。

5、 启动LVS集群服务

         LVS负载均衡管理和使用有两种方式,这里以Piranha工具为主进行介绍。

首先,启动每个real server节点的服务:

[root@localhost~]# /etc/init.d/lvsrs  start

 start LVS of  REALServer

然后,在Director Server启动pulse服务:

[root@DR1~]#/etc/init.d/pulse start

[root@DR1~]#/ ipvsadm -L

IPVirtual Server version 1.2.0 (size=4096)

ProtLocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port          Forward  Weight ActiveConn InActConn

TCP  192.168.12.135:http rr persistent 600

  -> 192.168.12.246:http          Route    1        3          22       

  -> 192.168.12.237:http          Route    1        9          10

此时查看pulse服务的系统日志信息如下:

[root@localhost~]# tail -f /var/log/messages

Nov22 15:52:55 lvs lvs[7031]: starting virtual service www.ixdba.net active: 80

Nov22 15:52:55 lvs lvs[7031]: create_monitor for www.ixdba.net/RS1 running as pid7039

Nov22 15:52:55 lvs nanny[7039]: starting LVS client monitor for 192.168.12.135:80

Nov22 15:52:55 lvs lvs[7031]: create_monitor for www.ixdba.net/RS2 running as pid7040

Nov22 15:52:55 lvs nanny[7039]: making 192.168.12.246:80 available

Nov22 15:52:55 lvs nanny[7040]: starting LVS client monitor for 192.168.12.135:80

Nov22 15:52:55 lvs nanny[7040]: making 192.168.12.237:80 available

从日志可以看出,pulse服务启动了一个www.ixdba.net的虚拟服务,同时加载了RS1和RS2两个节点,然后检测到RS1和RS2两个节点对应的80端口可用,最后启动了虚拟IP的80端口,对外提供服务。

日志中“www.ixdba.net”、“RS1”、“RS2”等标识均在Piranha的配置文件/etc/sysconfig/ha/lvs.cf中定义。

Pulse服务启动完毕,通过“ps –ef”命令可以看到有如下进程在运行:

[root@localhost~]#  ps -ef|grep nanny

/usr/sbin/nanny-c -h 192.168.12.246 -p 80 -s GET / HTTP/1.0\r\n\r\n -x HTTP -a 15 -I /

/usr/sbin/nanny-c -h 192.168.12.237 -p 80 -s GET / HTTP/1.0\r\n\r\n -x HTTP -a 15 -I /

其中,nanny就是Pulse服务的守护进程,用于监控LVS服务节点的运行状态,类似与ldirectord的节点监控功能。

6、 LVS+Keepalived构建拓扑图


7、安装Keepalived

    keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,后来又加入了VRRP的功能,VRRP是Virtual Router Redundancy Protocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由出现的单点故障问题,它能够保证网络的不间断、稳定的运行。所以,keepalived一方面具有服务器健康检测功能,另一方面也具有HA cluster功能。 

    Keepalived的官方站点是http://www.keepalived.org,可以在这里下载到各种版本,我们这里下载的是keepalived-1.1.19.tar.gz,安装步骤如下:

[root@DR1~]#tar zxvf keepalived-1.1.19.tar.gz

[root@DR1~]#cd keepalived-1.1.19

[root@DR1keepalived-1.1.19]#./configure  --sysconf=/etc \

>--with-kernel-dir=/usr/src/kernels/2.6.18-8.el5-i686

[root@DR1keepalived-1.1.19]#make

[root@DR1keepalived-1.1.19]#make install

[root@DR1keepalived-1.1.19]#ln -s /usr/local/sbin/keepalived  /sbin/

    在编译选项中,“--sysconf”指定了Keepalived配置文件的安装路径,即路径为/etc/Keepalived/Keepalived.conf,“--with-kernel-dir”这是个很重要的参数,但这个参数并不是要把Keepalived编译进内核,而是指定使用内核源码里面的头文件,就是include目录。如果要使用LVS时,才需要用到此参数,否则是不需要的。

8、配置Keepalived

    Keepalived的配置非常简单,仅仅需要一个配置文件即可完成HA cluster和lvs服务节点监控功能,Keepalived的安装已经在上面章节进行了介绍,在通过Keepalived搭建高可用的LVS集群实例中,主、备Director Server都需要安装Keepalived软件,安装成功后,默认的配置文件路径为/etc/Keepalived/Keepalived.conf。一个完整的keepalived配置文件,有三个部分组成,分别是全局定义部分、vrrp实例定义部分以及虚拟服务器定义部分,下面详细介绍下这个配置文件中每个选项的详细含义和用法:

#全局定义部分

global_defs{

   notification_email {

     dba.gao@gmail.com      #设置报警邮件地址,可以设置多个,每行一个。注意,如果要开启邮件报警,需要开启本机的sendmail服务。

     ixdba@163.com

   }

   notification_email_fromKeepalived@localhost      #设置邮件的发送地址。

   smtp_server 192.168.200.1    #设置smtp server地址。

   smtp_connect_timeout 30  #设置连接smtp服务器超时时间。

   router_id LVS_MASTER    #运行Keepalived服务器的一个标识。发邮件时显示在邮件标题中的信息

}

c#vrrp实例定义部分

vrrp_instanceVI_1 {

stateMASTER      #指定Keepalived的角色,MASTER表示此主机是主用服务器,BACKUP表示是备用服务器。

    interface eth0                            #指定HA监测网络的接口。

    virtual_router_id 51 #虚拟路由标识,这个标识是一个数字,并且同一个vrrp实例使用唯一的标识,即同一个vrrp_instance下,MASTER和BACKUP必须是一致的。

priority100  #定义优先级,数字越大,优先级越高,在一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级。

    advert_int 1     #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒。

    authentication {                      #设定验证类型和密码。

        auth_type PASS                 #设置验证类型,主要有PASS和AH两种。

        auth_pass 1111   #设置验证密码,在一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信。

    }

    virtual_ipaddress {     #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个。

        192.168.12.135

    }

}

#虚拟服务器定义部分

virtual_server192.168.12.135 80 {       #设置虚拟服务器,需要指定虚拟ip地址和服务端口,ip与端口之间用空格隔开。

    delay_loop 6                   #设置健康检查时间,单位是秒。

    lb_algo rr       #设置负载调度算法,这里设置为rr,即轮询算法。

    lb_kind DR                       #设置LVS实现负载均衡的机制,可以有NAT、TUN和DR三个模式可选。

persistence_timeout50                  #会话保持时间,单位是秒,这个选项对于动态网页是非常有用的,为集群系统中session共享提供了一个很好的解决方案。有了这个会话保持功能,用户的请求会被一直分发到某个服务节点,直到超过这个会话保持时间。需要注意的是,这个会话保持时间,是最大无响应超时时间,也就是说用户在操作动态页面时,如果在50秒内没有执行任何操作,那么接下来的操作会被分发到另外节点,但是如果一直在操作动态页面,则不受50秒的时间限制。

    protocol TCP                   #指定转发协议类型,有tcp和udp两种。

real_server192.168.12.246 80 { #配置服务节点1,需要指定real server的真实IP地址和端口,ip与端口之间用空格隔开。

weight3   #配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,设置权值的大小可以为不同性能的服务器分配不同的负载,可以对性能高的服务器设置较高的权值,而对性能较低的服务器设置相对较低的权值,这样就合理的利用和分配了系统资源。

        TCP_CHECK {         #realserve的状态检测设置部分,单位是秒

            connect_timeout 10     #10秒无响应超时

            nb_get_retry 3      #重试次数

            delay_before_retry 3    #重试间隔

        }

    }

    real_server 192.168.12.237 80 {       #配置服务节点2

        weight 1        

        TCP_CHECK {

            connect_timeout 3   

            nb_get_retry 3           

            delay_before_retry 3

        }

    }

}

    在配置Keepalived.conf时,需要特别注意配置文件的语法格式,因为Keepalived在启动时并不检测配置文件的正确性,即使没有配置文件,Keepalived也照样能启动起来,因而配置文件一定要正确。

    在默认情况下,Keepalived在启动时会查找/etc/Keepalived/Keepalived.conf配置文件,如果你的配置文件放在了其它路径下,可以通过“Keepalived  -f”参数指定你所在的配置文件路径即可。

    Keepalived.conf配置完毕后,将此文件拷贝到备用DirectorServer对应的路径下,然后做两个简单的修改即可:

Ø  将“state MASTER”更改为“state BACKUP”

Ø  将priority 100更改为一个较小的值,这里改为“priority 80”

    最后,还要配置集群的Real server节点,以达到与Director Server相互广播通信并忽略arp的目的,脚本的内容已经在上面进行介绍,这里不做解释。

9、启动Keepalived+lvs集群系统

    在主、备Director Server上分别启动Keepalived服务,可以执行如操下作:

    [root@DR1 ~]#/etc/init.d/Keepalived  start

    接着在两个Real server上执行如下脚本:

    [root@rs1~]#/etc/init.d/lvsrs start

    至此,Keepalived+lvs高可用的LVS集群系统已经运行起来了。


原创粉丝点击