RedHat5实现负载均衡全程实录.docx
《RedHat5实现负载均衡全程实录.docx》由会员分享,可在线阅读,更多相关《RedHat5实现负载均衡全程实录.docx(12页珍藏版)》请在冰豆网上搜索。
RedHat5实现负载均衡全程实录
RedHat5实现负载均衡(LVS--DR方法实现)
LVS试验时录的视频,有兴趣的可以看看:
点击打开下载页
一、LinuxVirtualServer概述
LinuxVirtualServer(LVS)是一套完整的基于IP的负载均衡的集群软件。
LVS运行在一对有相似配置的计算机上:
一个作为活动LVSRouter(ActiveLVSRouter),一个作为备份LVSRouter(BackupLVSRouter)。
活动LVSRouter服务有两个角色:
*均衡负载到真实服务器上。
*检查真实服务器提供的服务是否正常。
备份LVSRouter用来监控活动的LVSRouter,以备活动的LVSRouter失败时由备份LVSRouter接管。
Pulse进程运行在活动LVSRouter和备份LVSRouter上。
在备份LVSRouter上,pulse发送一个心跳(heartbeat)到活动LVSRouter的公网接口上以检查活动LVSRouter是否正常。
在活动LVSRouter上,pulse启动lvs进程并响应来自于备份LVSRouter的心跳。
lvs进程调用ipvsadm工具去配置和维护IPVS路由表,并为每一个在真实服务器上的虚拟服务启动一个nanny进程。
每一个nanny进程去检查真实服务器上的虚拟服务状态,并将故障情况通知lvs进程。
假如一个故障被发现,lvs进程通知ipvsadm在IPVS路由表中将此节点删除。
如果备份LVSRouter未收到来自于活动LVSRouter的响应,它将调用send_arp将虚拟IP地址再分配到备份LVSRouter的公网接口上。
并在公网接口和局域网接口上分别发送一个命令去关掉活动LVSRouter上的lvs进程。
同时启动自己的lvs进程来调度客户端请求。
下面是一个两层结构的LVS架构:
下面是一个三层结构的LVS架构:
两层结构的LVS架构适合于RealServer上的数据变化不是很频繁的情况,如果RealServer上的数据变化很频繁应该考虑使用三层结构的LVS架构,将数据放到一个共享文件系统(GFS)上供所有的RealServer同时读写。
你可以使用VS/NAT、VS/TUN和VS/DR来实现IP负载均衡:
*使用VS/NAT方法:
客户通过VirtualIPAddress(虚拟服务的IP地址)访问网络服务时,请求报文到达调度器,调度器根据连接调度算法从一组真实服务器中选出一台服务器,将报文的目标地址VirtualIPAddress改写成选定服务器的地址,报文的目标端口改写成选定服务器的相应端口,最后将修改后的报文发送给选出的服务器。
同时,调度器在连接Hash表中记录这个连接,当这个连接的下一个报文到达时,从连接Hash表中可以得到原选定服务器的地址和端口,进行同样的改写操作,并将报文传给原选定的服务器。
当来自真实服务器的响应报文经过调度器时,调度器将报文的源地址和源端口改为VirtualIPAddress和相应的端口,再把报文发给用户。
当使用VS/NAT方法时,如果有大量的响应数据经过调度器,调度器将成为整个集群的瓶颈。
*使用VS/TUN方法:
VS/TUN的连接调度和管理与VS/NAT中的一样,只是它的报文转发方法不同。
调度器根据各个服务器的负载情况,动态地选择一台服务器,将请求报文封装在另一个IP报文中,再将封装后的IP报文转发给选出的服务器;服务器收到报文后,先将报文解封获得原来目标地址为VIP的报文,服务器发现VIP地址被配置在本地的IP隧道设备上,所以就处理这个请求,然后根据路由表将响应报文直接返回给客户。
*使用VS/DR方法:
调度器和服务器组都必须在物理上有一个网卡通过不分断的局域网相连,如通过交换机或者高速的HUB相连。
VIP地址为调度器和服务器组共享,调度器配置的VIP地址是对外可见的,用于接收虚拟服务的请求报文;所有的服务器把VIP地址配置在各自的Non-ARP网络设备上,它对外面是不可见的,只是用于处理目标地址为VIP的网络请求。
在VS/DR中,调度器根据各个服务器的负载情况,动态地选择一台服务器,不修改也不封装IP报文,而是将数据帧的MAC地址改为选出服务器的MAC地址,再将修改后的数据帧在与服务器组的局域网上发送。
因为数据帧的MAC地址是选出的服务器,所以服务器肯定可以收到这个数据帧,从中可以获得该IP报文。
当服务器发现报文的目标地址VIP是在本地的网络设备上,服务器处理这个报文,然后根据路由表将响应报文直接返回给客户。
二、本实验拓扑图
在实际环境中可修改192.168.0.200、192.168.0.10、192.168.0.11为真IP。
三、LVS在RedHat5上的安装
1、需要的安装包:
操作系统:
RedHat5
LVS安装包:
php-common-5.1.6-5.el5.i386.rpm
php-cli-5.1.6-5.el5.i386.rpm
php-5.1.6-5.el5.i386.rpm
ipvsadm-1.24-8.1-i386.rpm
piranha-0.8.4-7.el5.i386.rpm
如果系统中没有安装Apache还需要Apache的安装包。
2、在ActiveLVSRouter上安装PHP
Shell#rpm-ivhphp-common-5.1.6-5.el5.i386.rpm
Shell#rpm-ivhphp-cli-5.1.6-5.el5.i386.rpm
Shell#rpm-ivhphp-5.1.6-5.el5.i386.rpm
Shell#vi/etc/httpd/conf/httpd.conf
查找AddTypeapplication/x-compress.Z
AddTypeapplication/x-gzip.gz.tgz
在其下加入:
AddTypeapplication/x-tar.tgz
AddTypeapplication/x-httpd-php.php
AddTypeimage/x-icon.ico
修改DirectoryIndex行,添加index.php
修改为DirectoryIndexindex.phpindex.htmlindex.html.var
#vi/var/www/html/test.php
添加以下行:
//php标记(用<代替[)
[?
php
phpinfo();
?
]
wq保存退出。
Shell#/etc/init.d/httpdrestart//重新启动Apache
打开浏览器进行测试,输入http:
//localhost/test.php,如果能够成功显示PHP变量则说明PHP安装成功。
3、在ActiveLVSRouter上安装LVS所需要的包
Shell#rpm-ivhipvsadm-1.24-8.1-i386.rpm
Shell#rpm-ivhpiranha-0.8.4-7.el5.i386.rpm
4、在ActiveLVSRouter上打开数据转发
Shell#vi/etc/sysctl.conf
找到下面行:
net.ipv4.ip_forward=0
将0改成1,
net.ipv4.ip_forward=1
执行如下命令来应用:
sysctl-p
5、在BackupLVSRouter上重复2、3、4步。
6、在ActiveLVSRouter上初始化piranha的密码
Shell#piranha-passwd
输入两遍密码即可。
在ActiveLVSRouter上启动需要的服务
Shell#/etc/init.d/piranha-guistart
在ActiveLVSRouter上配置LVS
首先在浏览器中输入http:
//localhost:
3636打开piranha,输入用户名:
piranha,密码:
上面设置的密码。
登录后将看到监视屏幕。
配置GlobalSettings(是对ActiveLVSRouter的配置),点击DirectRouting,然后输入公网IP,和局域网IP。
点击ACCEPT按钮保存设置。
配置Redundancy(是对BackupLVSRouter的配置),输入公网IP,和局域网IP。
点击ACCEPT按钮保存设置。
点击ADD按钮添加一个服务。
按下面配置添加的服务。
配置完成后不要忘记点击ACCEPT按钮保存设置。
点击REALSERVER连接,配置RealServer。
点击ADD按钮添加一个节点,点击EDIT按钮编辑节点,点击(DE)ACTIVATE按钮激活节点。
点击MONITORINGSCRIPTS连接修改监控设置,在此保持默认。
点击VIRTUALSERVERS连接,然后点击(DE)ACTIVATE按钮激活上面设置的服务。
7、在ActiveLVSRouter上启动pulse进程
Shell#/etc/init.d/pulsestart
Shell#chkconfig--level2345piranha-guion
Shell#chkconfig--level2345pulseon
拷贝配置文件到BackupLVSRouter。
Shell#scp/etc/sysconfig/ha/lvs.cfgroot@192.168.0.21:
/etc/sysconfig/ha/
8、在BackupLVSRouter上启动pulse进程
Shell#/etc/init.d/pulsestart
Shell#chkconfig--level2345pulseon
9、配置RealServer
在RealServer上创建一个脚本:
Shell#vi/root/lvsRealServer.sh
#!
/bin/bash
#Description:
RealServerStart!
#Writeby:
iStone
#LastModefiy:
2007.12.15
VIP=192.168.0.200
/sbin/ifconfiglo:
0$VIPbroadcast$VIPnetmask255.255.255.255up
/sbin/routeadd-host$VIPdevlo:
0
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
sysctl-p
#end
保存退出,并给执行权限。
Shell#chmodu+x/root/lvsRealServer.sh
Shell#./root/lvsRealServer.sh
将脚本加入/etc/rc.d/rc.local
Shell#vi/etc/rc.d/rc.local
/root/lvsRealServer.sh
在每个RealServer上重复本步。
10、测试,在其它机器上访问虚拟IP
回到ActiveLVSRouter上,输入ipvsadm命令
如果看到以上输出,说明LVS配置成功。