LVS-DR+Ldirectord+FreeNas实现负载均衡群集

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第1张图片

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

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


服务器名

IP地址

网关

虚拟设备名

虚拟IP

Directory Server

192.168.30.2

192.168.30.1

eth0:0

192.168.30.100

Real Server1

192.168.30.3

192.168.30.1

lo:0

192.168.30.100

Real Server2

192.168.30.4

192.168.30.1

lo:0

192.168.30.100

安装前准备:

Redhat Enterprise Linux 5.4内核默认支持lvs,为了方便编译安装IPVS管理软件,在安装操作系统时,建议选择如下这些安装包:

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

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

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

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第2张图片

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

一、安装Lvs软件

1、在Director Serve上安装IPVS管理软件

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

[root@localhost~]#tar zxvf ipvsadm-1.24.tar.gz -C /usr/local/src/

[[email protected]]# cd /usr/local/src/ipvsadm-1.24/

[[email protected]]# make

[[email protected]]# make install

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

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

//创建以个系统内核的软链接到/usr/src/linux中

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

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

//rpm包安装会比较方便,网上也有rpm格式的。

安装完成之后,执行命令:

[root@localhost~]# ipvsadm --help |less

//分页查看ipvsadm的命令帮助手册,如果无法执行,说明安装失败。

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第3张图片

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第4张图片

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第5张图片

使用举例如下:

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

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

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

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

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

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

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

二、配置LVS群集

本次试验基于DR模型的LVS集群来搭建www服务,实现负载均衡。

以下是Director Server的配置:

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

通过ipvsadm命令行进行配置

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

放法1、 通过ipvsadm命令行方式配置LVS

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

[root@localhost~]#ifconfig eth0:0 192.168.30.100 netmask255.255.255.255 up

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

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第6张图片

以上的命令是临时添加IP,如果系统重启就会消失,所以最好再使用“setup”命令来永久添加,因为eth0:0是虚拟网卡,所以在配置时要注意。

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第7张图片

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第8张图片

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

[root@localhost~]#route add -host 192.168.30.100 dev eth0:0

//添加一条到192.168.30.100/32网络的路由

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

//开启Linux的路由转发功能

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

203423261.jpg

③ 配置ipvs,命令如下:

[root@localhost~]#ipvsadm –C

//清除内核虚拟服务器列表中的所有记录

[root@localhost~]#ipvsadm -A -t 192.168.30.100:80 -s rr

//添加一条新的虚拟IP记录,192.168.30.100

[root@localhost ~]#ipvsadm -a -t 192.168.30.100:80-r 192.168.30.3:80 -g

[root@localhost~]#ipvsadm -a -t 192.168.30.100:80 -r 192.168.30.4:80 -g

//新加虚拟IP记录中添加两条新的Real Server记录,并且指定LVS 的工作模式为直接路由模式。(-g表示dr模型,默认的模式,-I表示tunel模型,-m表示nat模型)

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

[root@localhost~]#ipvsadm

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

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第9张图片

方法2、 通过Redhat提供的工具piranha来配置LVS

Piranha是REDHAT提供的一个基于Web的LVS配置软件,可以省去手工配置LVS的繁琐工作,同时,也可单独提供cluster功能,例如,可以通过Piranha激活Director Server的后备主机,也就是配置Director Server的双机热备功能。

① Piranha工具的安装非常简单,下载Piranha的rpm包,进行安装即可:

[root@localhost ~]#rpm –ivh piranha-0.8.2-1.i386.rpm

Piranha安装完毕后,会产生/etc/sysconfig/ha/lvs.cf文件,默认此文件是空的,可以通过Piranha提供的web界面配置此文件,也可以直接手动编辑此文件,编辑好的lvs.cf文件内容类似如下:

[root@localhost~]# more /etc/sysconfig/ha/lvs.cf

serial_no= 18 #序号。

primary= 192.168.30.2 #指定主Director Server的真实IP地址,是相对与有备用的Director Server而言的,也就是给Director Server做HA Cluster。

service= lvs #指定双机的服务名。

backup_active= 0 #是否激活备用Director Server。“0”表示不激活,“1”表示激活。

backup= 0.0.0.0 #这里指定备用Director Server的真实IP地址,如果没有备用Director Server,可以用“0.0.0.0”代替。

heartbeat= 0 #是否开启心跳,1表示开启,0表示不开启。

heartbeat_port= 539 #指定心跳的UDP通信端口。

keepalive= 5 #心跳间隔时间,单位是秒。

deadtime= 10 #如果主Director Server在deadtime(秒)后没有响应,那么备份Director

Server就会接管主Director Server的服务。

network= direct #指定LVS的工作模式,direct表示DR模式,nat表示NAT模式,tunnel表示TUNL模式。

debug_level= NONE #定义debug调试信息级别。

virtualwww.ixdba.net{ #指定虚拟服务的名称。

active= 1 #是否激活此服务。

address= 192.168.30.100 eth0:0 #虚拟服务绑定的虚拟IP以及网络设备名。

port= 80 #虚拟服务的端口。

send= "GET / HTTP/1.0\r\n\r\n" #给real server发送的验证字符串。

expect= "HTTP" #服务器正常运行时应该返回的文本应答信息,用来判断real server是否工作正常。

use_regex= 0 # expect选项中是否使用正则表达式,0表示不使用,1表示使用。

load_monitor= none #LVS中的Director Server能够使用 rup 或 ruptime 来监视各个realserver的负载状态。该选项有3个可选值,rup、ruptime和none,如果选择rup,每个real server就必须运行rstatd服务。如果选择了ruptime,每个real server就必须运行 rwhod 服务。

scheduler= rr #指定LVS的调度算法。

protocol= tcp #虚拟服务使用的协议类型。

timeout= 6 #real server失效后从lvs路由列表中移除失效real server所必须经过的时间,以秒为单位。

reentry= 15 #某个real server被移除后,重新加入lvs路由列表中所必须经过的时间,以秒为单位。

quiesce_server= 0 #如果此选项为1.那么当某个新的节点加入集群时,最少连接数会被重设

为零,因此LVS会发送大量请求到此服务节点,造成新的节点服务阻塞,

建议设置为0。

serverRS1 { #指定real server服务名。

address= 192.168.30.3 #指定real server的IP地址。

active= 1 #是否激活此real server服务。

weight= 1 #指定此real server的权值,是个整数值,权值是相对于所有real server节点而言的,权值高的real server处理负载的性能相对较强。

}

serverRS2 {

address= 192.168.30.4

active= 1

weight= 1

}

}

② 编辑完成,然后启动pulse服务,即启动lvs服务

[root@localhost~]#service pulse start

同理,此种方式下也要启用系统的包转发功能:

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

到此为止,Piranha工具方式配置Director Server完毕。

三、配置Real Server

在lvs的DR和TUn模式下,用户的访问请求到达真实服务器后,是直接返回给用户的,而不再经过前端的Director Server,因此,就需要在每个Real server节点上增加虚拟的VIP地址,这样数据才能直接返回给用户。

由于Real Server中的配置相同,这里只以Server1为例:

1、禁止本地的arp响应,由于虚拟ip,也就是上面的VIP地址,是Director

Server和所有的Real server共享的,如果有ARP请求VIP地址时,DirectorServer与所有Real server都做应答的话,就出现问题了,因此,需要禁止Real server响应ARP请求。修改系统配置文件:

vim /etc/sysctl.conf

# net.ipv4.conf.all.arp_announce = 2

# net.ipv4.conf.all.arp_ignore = 1

//防止响应arp包

[root@Server1~]# sysctl -p

//重新加载配置文件

203706514.jpg

1、修改IP地址

[root@Server1~]# ifconfig eth0 192.168.30.3

[root@Server1~]# ifconfig lo:0 192.168.30.100 netmask 255.255.255.255

[root@Server1~]# route add –host 192.168.2.100/32 dev lo:0

2、安装httpd

因为本次试验只是利用www来进行负载均衡测试,所以使用rpm来安装web服务。

[root@Server1~]# rpm -ivh httpd-2.2.3-31.el5.i386.rpm

[root@Server1~]# echo “Server1” > /var/www/html/index.html

[root@Server1~]# server httpd start

说明:在Server2上做同样的配置

四、测试负载均衡

在Director上安装httpd服务,只需开启服务即可。

使用一台客户机来访问http:192.168.30.100,每刷新一次,就会访问不同的站点。

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第10张图片

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第11张图片

此时说明已经实现了负载均衡。以上为了试验的效果,所以将数据分别存放在两台服务器中,但是在实际中,用户访问同一个IP应该得到相同的信息。为了让数据统一,我们应该使用共享存储。

五、Ldirectord监控Real Server

1、以上是通过轮询机制来实现负载均衡,但是如果某一台Real Server宕掉后,

Director依然在LVS路由表中记录着后方的每一台Real Server,将请求轮流发送给后方的Real Server,这样就会降低服务的效率。所以应该在Director中监控后方的Real Server的健康状况,当某个服务器宕掉后,应该立即做出处理。

在heartbeat中,ldirectord其实是作为它的一个插件出现的,所以它默认包含在heartbeat软件包中,Ldirectord的核心作用是监控Real Server节点状态,当Real Server失效时,把它从虚拟服务器列表中删除,恢复时重新添加到列表,同时,它还能调用ipvsadm自动创建LVS路由表。要通过ldirectord监控节点状态,只需启动ldirectord服务,整个集群系统就可以运行起来。在前面我们是通过命令添加虚拟服务以及后方的Real Server,如果使用ldirectory的话,类似的命令是写在配置文件中的。所以如果使用ldirectory服务的话,可以不使用前面的命令添加虚拟服务。需要说明的是,ldirectord和Piranha都具有监控Real Server的功能,如果是通过Piranha工具配置LVS,就无需使用ldirectord,Piranha工具对应的系统进程是pluse,此进程也会自动调用ipvsadm创建LVS路由表,同时会利用自身的nanny守护进程监控real server的状态

2、安装heartbeat-ldirector服务。

如果直接使用rpm来安装的话,会有许多的依赖关系,安装会失败。

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第12张图片

最好使用yum来进行安装,我这里使用的是本地yum来,安装heartbeat的所有rpm包

软件包:

heartbeat-2.1.4-9.el5.i386.rpm

heartbeat-devel-2.1.4-9.el5.i386.rpm

heartbeat-gui-2.1.4-9.el5.i386.rpm

heartbeat-ldirectord-2.1.4-9.el5.i386.rpm

heartbeat-pils-2.1.4-10.el5.i386.rpm

heartbeat-stonith-2.1.4-10.el5.i386.rpm

libnet-1.1.4-3.el5.i386.rpm

perl-MailTools-1.77-1.el5.noarch.rpm

//下载地址:http://yunpan.cn/QbFZ4REqCjP8w


[root@localhostHeartbeat]# yum localinstall *.rpm

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第13张图片

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第14张图片

3、修改ldirectord配置文件

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

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

/usr/share/doc/heartbeat-ldirectord-2.1.4/COPYING

/usr/share/doc/heartbeat-ldirectord-2.1.4/README

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

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

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

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

[root@localhostroot]# /etc/init.d/ldirectord {start|stop}

或者使用命令:

[root@localhostroot]# serveice ldirectord start | stop

[root@localhostroot]# chkconfig ldirectord on

//将ldirectord服务添加到开机启动

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

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第15张图片

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

checkinterval=1 #指定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文件的“全局”设置,它们可以应用到下面多个虚拟主机,下面是每个虚拟主机的配置。

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第16张图片

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

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

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

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

real=192.168.30.4:80gate

fallback=127.0.0.1:80gate

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

request="index1.html" #ldirectord将根据指定的Real Server地址,结合该选项给出的请求路径,发送访问请求,检查Real Server上的服务是否正常运行,确保这里给出的页面地址是可访问的,不然ldirectord会误认为此节点已经失效,发生错误监控现象。

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

//在后方的Real Server的web站点下,要有一个index.html的页面,内容是“Test Page”,用来检测其服务是否正常。

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

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

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

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

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

1、创建测试页面。

[root@Server1~]# echo “Test Page” >/var/www/html/index1.html

[root@Server2~]# echo “Test Page” >/var/www/html/index1.html

2、测试ldirectord服务

[root@localhost~]# ipvsadm -l

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第17张图片

当某个服务器宕掉后,LVS中的表就会删除该服务器的记录,当该服务器恢复后,就自动添加该服务器的记录。

204433526.jpg

如果ldirectord配置文件中的“quiescent=yes”,那么在LVS表中不会删除该服务器的记录,只是Director Server不会将用户的请求转发给它。

六、FreeNas共享存储

在实际生活中,用户访问同一个web服务器时,响应的内容应该一样。这里为了试验效果,所以将两个服务器中的网页内容设为不同。为了能够实现用户访问的一致性,最好的方法是在后方实现共享存储。这里使用的Freenas来实现共享存储。FreeNAS是网络附加存储(NAS)服务专用操作系统(FreeBSD的简化版)。基于

m0n0wall防火墙,该系统通过提供磁盘管理及RAID软件,可让用户将PC转换为NAS服务器。支持FTP/NFS/RSYNC/CIFS/AFP/UNISON/SSH协议。

1、新建一个虚拟机

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第18张图片

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第19张图片

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第20张图片

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第21张图片

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第22张图片

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第23张图片

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第24张图片

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第25张图片

2、启动虚拟机

接下来就是安装FreeNas,和安装Linux系统差不多。

Step1Install/Upgrade

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第26张图片

Step2:选择安装到哪块硬盘,因为只有一块硬盘所以这里只显示一个,如果有多个,可以自由选择。

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第27张图片

Step3:格式化硬盘的警告信息。

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第28张图片

Step4:取出光驱中的镜像,重启系统。

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第29张图片

Step5:配置FressNas的IP

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第30张图片

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第31张图片

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第32张图片

如果FreeNas服务器和Real Server不在同一个网段,需要配置FreeNas的网关即默认路由。

Step6:通过web来进行管理FreeNas

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第33张图片

登录后,为了安全起见最好修改一些你的管理员密码,为了使用方便,可以将页面的语言改为中文。

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第34张图片

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第35张图片

Step7:创建NFS服务

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第36张图片

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第37张图片

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第38张图片

Step8:创建一个共享文件夹

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第39张图片

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第40张图片

查看192.168.30.5上的共享文件

[root@Server1~]# showmount -e 192.168.30.5

//查看共享文件

[root@Server1~]# mount 192.168.30.5:/mnt/webroot /var/www/html/

//临时挂载192.168.30.5上的共享文件到/var/www/html目录中

210033473.jpg

[root@Server1~]# vim /etc/fstab

[root@Server1~]# mount –a

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第41张图片

[root@Server1~]# mount

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第42张图片

//永久挂载

挂载成功之后,你就可以在Real Server中操作后方FreeNas中NFS服务中共享的文件。将web页面放到/mnt/webroot目录中,以后用户不论通过哪个Real Server都是访问和操作同一个web页面。这种方式文件级别的共享,缺点是效率比较低,优点是有锁机制(同一时间只能有一个用户编辑)和推送机制(用户看到的内容是一样的)

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第43张图片

LVS-DR+Ldirectord+FreeNas实现负载均衡群集_第44张图片


说明:FreeNas镜像下载--》http://www.freenas.org/