在RHEL4系统中配置LVS负载均衡群集
在RHEL4系统中配置LVS负载均衡群集
2007-07-13 kenthy#qingdaonews.com
################################################################
系统环境:RHEL4 [ 2.6.9-5.EL ]
软件环境:
linux-2.6.22.1.tar.bz2 [http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.22.1.tar.bz2]
ipvsadm-1.24.tar.gz [http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz]
网络结构:
Linux Virtual Server:
eth0: 173.17.17.1/24
eth1: 192.168.1.254/24
Real Servers:
RServer1: eth0: 192.168.1.1/24 Gateway: 192.168.1.254
RServer2: eth0: 192.168.1.2/24 Gateway: 192.168.1.254
RServer3: eth0: 192.168.1.3/24 Gateway: 192.168.1.254
RServer4: eth0: 192.168.1.4/24 Gateway: 192.168.1.254
Internet
|
-------+---------
| 173.17.17.1 |
| LVS Server |
| 192.168.1.254 |
-------+---------
|
+-----------------+---------+-------+-----------------+
| | | |
-------+------- -------+------- -------+------- -------+-------
| Rserver1 | | Rserver2 | | Rserver3 | | Rserver4 |
| 192.168.1.1 | | 192.168.1.2 | | 192.168.1.3 | | 192.168.1.4 |
--------------- --------------- --------------- ---------------
目标功能:
当外部访问173.17.17.1:80时,基于nat的方式将负载分流至内部的4台真实web服务器上。
################################################################
1、配置Linux Virtual Server
1> 重新编译内核,增加对IP vs的支持,使用新内核启动系统
[ 注:如果有编译好的ip_vs_rr模块,也可以直接使用模块文件,跳过后续内核编译步骤。
如: insmod /lib/modules/2.6.9-5.EL/kernel/net/ipv4/ipvs/ip_vs_rr.ko ]
# tar jxvf linux-2.6.22.1.tar.bz2 -C /usr/src/
# ln -s /usr/src/linux-2.6.22.1 /usr/src/linux
# cd /usr/src/linux
# cp /boot/config-2.6.9-5.EL ./.config
# make menuconfig //增加对IP:Virtual Server Configuration的支持,编进内核
# make bzImage && make modules && make modules_install
# make install
# reboot
2> ipvsadm 安装:
# tar zxvf ipvsadm-1.24.tar.gz -C /usr/src/
# cd /usr/src/ipvsadm-1.24
# make all
# make install
# ipvsadm --version
3> 创建LVS配置脚本
# vi /opt/lvs-up.sh
#!/bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth1/send_redirects
LVSADM='/sbin/ipvsadm'
$LVSADM -C
$LVSADM -A -t 173.17.17.1:80 -s rr
$LVSADM -a -t 173.17.17.1:80 -r 192.168.1.1:80 -m -w 1 //-m表示使用nat方式,如果是-g则表示dr方式
$LVSADM -a -t 173.17.17.1:80 -r 192.168.1.2:80 -m -w 1 //-w 1表示服务器的权重
$LVSADM -a -t 173.17.17.1:80 -r 192.168.1.3:80 -m -w 1 //-w 0将该rserver设置为静止状态,以便于维护
$LVSADM -a -t 173.17.17.1:80 -r 192.168.1.4:80 -m -w 1
# chmod a+x /opt/lvs-up.sh
# echo '/opt/lvs-up.sh' >> /etc/rc.d/rc.local
# /opt/lvs-up.sh
2、配置Real Servers
配置并启动Web服务[过程略],网关均指向192.168.1.254。[网站内容同步可以简单的采用NFS共享或者使用rsync]
3、验证LVS的实现
使用外部客户端浏览器多次访问
http://173.17.17.1
,并检查4台真实web服务器的访问日志
或在173.17.17.1服务器上执行不带参数的ipvsadm命令,应能看到如下内容:
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP redhat.com:http rr
-> 192.168.1.1:http Masq 1 0 0
-> 192.168.1.2:http Masq 1 0 0
-> 192.168.1.3:http Masq 1 0 0
-> 192.168.1.4:http Masq 1 0 0
################################################################
附: 基于直接路由(DR)的方式实现负载均衡
系统及软件环境:
同上。LVS服务器和Real Servers均需要配置内核对IPVS的支持
网络结构:
Linux Virtual Server:
eth0: 173.17.17.1/24
Real Servers:
RServer1: eth0: 173.17.17.5/24
RServer2: eth0: 173.17.17.6/24
RServer3: eth0: 173.17.17.7/24
RServer4: eth0: 173.17.17.8/24
Internet
|
-------+---------
| 173.17.17.1 |
| LVS Server |
-------+---------
|
+-----------------+---------+-------+-----------------+
| | | |
-------+------- -------+------- -------+------- -------+-------
| Rserver1 | | Rserver2 | | Rserver3 | | Rserver4 |
| 173.17.17.5 | | 173.17.17.6 | | 173.17.17.7 | | 173.17.17.8 |
--------------- --------------- --------------- ---------------
********************************************
1、配置Linux Virtual Server
1> 重新编译内核,增加对IP vs的支持,使用新内核启动系统[参考前例]
2> ipvsadm 安装[参考前例]
3> 创建LVS配置脚本
# vi /opt/lvs-up.sh
#!/bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth1/send_redirects
LVSADM='/sbin/ipvsadm'
$LVSADM -C
$LVSADM -A -t 173.17.17.1:80 -s rr
$LVSADM -a -t 173.17.17.1:80 -r 173.17.17.5:80 -g -w 1
$LVSADM -a -t 173.17.17.1:80 -r 173.17.17.6:80 -g -w 1
$LVSADM -a -t 173.17.17.1:80 -r 173.17.17.7:80 -g -w 1
$LVSADM -a -t 173.17.17.1:80 -r 173.17.17.8:80 -g -w 1
# chmod a+x /opt/lvs-up.sh
# echo '/opt/lvs-up.sh' >> /etc/rc.d/rc.local
# /opt/lvs-up.sh
2、配置Real Servers
1> 重新编译内核,增加对IP vs的支持,使用新内核启动系统[参考前例]
2> 创建RS配置脚本
# vi /opt/rs-up.sh
#!/bin/bash
ifconfig lo:0 173.17.17.1 netmask 255.255.255.255 //添加虚拟地址
route add -host 173.17.17.1 dev lo:0 //添加路由设置
echo 0 > /proc/sys/net/ipv4/ip_forward
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
# chmod a+x /opt/rs-up.sh
# /opt/rs-up.sh
3> 配置并启动Web服务[过程略]
3、验证LVS的实现[参考前例]
原文地址
http://blog.chinaunix.net/u1/40349/showart_338533.html
关于负载均衡,有很多种方法实现。
1、在网络设备层实现,CISCO很早期的产品有基于路由导由器实现的方法,你可以参看相关资料,实现起来成本很高。
2、用DNS方法实现负载均衡,简单,性能一般。
3、UNIX LINUX是在操作系统下实现高可用、集群化和负载均衡的。
4、也有一些大型数据库系统(ORACLE)提供负载均衡功能的。
不知你需要哪一个级别的负载均衡。请详细说明。
http://www.linuxvirtualserver.org/
inux下Apache服务器怎么实现负载均衡:Apache服务器自己也可以做,前端口安装一个Apache,专门用来做转发,应用服务器安装在后端。 alteon F5 Foundry效率高点 简单的DNS轮询 NAT方式实现
看了精华区的文章,用ipvs的比较多,用haproxy的也有。
不知道有没有用于生产环境用的,稳定性如何。
预计带宽开始在100M以上,未来一两年内可能会达到400M的能力。
试试用carp+ipvs
LVS的话,感觉还是Linux好些吧.BSD上我没用过.
最近新购了些设备,准备做改造:前端用硬件负载均衡设备(F5),中间用多台squid做加速服务器,后端用多台apache做原始服务器。squid的负载均衡依靠f5的策略,apache的负载均衡依靠在squid上hosts里主机名解析多个ip。
这个方案主要是加速静态网页。
F5的功能:
1、链路选择,在f5上接入了电信和网通2个,这样链路的选择在f5上做DNS引导
2、本地服务器选择,为多台squid服务器提供负载均衡功能
squid的功能:
静态网页的缓存,多个虚拟站点的配置
apache的功能:
提供原始网页的服务
——请指点一下呢,这种结构行不行啊?
bind+LVS+squid+apache就能满足你的要求了
第一,系统集成商不会这样做,没卖设备没钱赠!
第二,企业不会这样做,方案没有案例,稳定性不够,风险过高,没有专业的技术支持队伍
第三,F5对企业来说也不怎么贵,我们一个公司内部上网的代理就用两台F5做主备
电信和网通的线也是拉到本地机房,所以只是购买了f5的LTM,没有使用GTM设备。
实现的方法确实很多,f5也有加速模块,但这次没有用,我现在主要用f5的链路选择功能和squid服务器轮询功能。
然后每台squid服务又可以选择多台原始服务器。
软件:dns轮询,lvs,cdn(应该也算一种),集群
硬件:F5
现在手头上有一校园网的集群项目,主要是实现WEB服务器的负载均衡。
可是我看了好多网上的关于LVS的及本论坛的LVS文章,大都是说高可用性的LVS,在存储方面与负载均衡LVS有好大的差别~
就我听说的就有GFS,lustre等集群文件系统,它们应该可以使用SAN,及NAS或iSCSI作存储方案吧~
那对于简单的校园网负载均衡,使用什么样的存储方案比较好一点呢?
WEB服务有静态数据也有动态数据,不需要数据库服务器~
FreeBSD6.1 +CARP+IPVS双机热备份负载均衡 (花了不少精力,希望可以加為精華!) ,如果有朋友需要轉載請注明出處,謝謝!
经过一个星期的找资料….测试….找资料….再测试……,终于测试成功Freebsd6.1+IPVS+CARP,实现双机热备份和负载均衡功能。其中:
IPVS: 实现负载均衡功能
CARP: 实现双机热备份
一 系统环境
FreeBSD 6.1 Release 最小化安装(完全安装也可以) + Kernel Source (ALL).............(经过测试,FreeBSD6.2也完全适用)
SRV01 192.168.2.133 255.255.255.0 (双机热备 主)
SRV02 192.168.2.130 255.255.255.0 (双机热备 辅)
Share IP 192.168.2.144 255.255.255.0 (主辅机器共享)
二 安装过程
a.在核心配置文件中添加对CARP的支持和options NF_SOCKOPT(ipvs需要) 选项
Srv01# cd /usr/src/sys/i386/conf/
Srv01# cp GENERIC LVS
Srv01# vi LVS
添加以下选项:
options NF_SOCKOPT
device carp
[ 本帖最后由 @kang 于 2007-7-21 15:10 编辑 ]
2006-11-29 08:52
下载次数: 463
IPVS_CARP.pdf
(128.54 KB)
PDF Download
LVS_wrGJvRIU2Vrj.jpg
(39.26 KB) 2006-11-29 09:29
网络拓扑
b. Freebsd6.1 的uipc_socket.c中没有#include "opt_nfsockopt.h" ,需手动添加否则编译将出错。
vi /usr/src/sys/kern/uipc_socket.c
找到#include "opt_compat.h"这一行,在下面加上 #include "opt_nfsockopt.h"
c. 打ipvs for freebsd6.1补丁(patch)。
Srv01# cd /usr/ports/net/ipvs
Srv01# make patch-system #具体说明可以查看当前目录下的Makefile
d. 编译核心
Srv01# cd /usr/src/sys/i386/conf
Srv01# config LVS
Srv01# cd ../compile/LVS
Srv01# make depend
Srv01# make
Srv01# make install
Srv01# reboot
以上操作在srv02上同样做一遍
三 具体配置
CARP 部分 (如果只需双机备份功能只配这部分就可以了)
SRV01
srv01# sysctl net.inet.carp.preempt=1
srv01# ifconfig carp0 create
srv01# ifconfig carp0 vhid 1 pass password 192.168.2.144/24 up #password随便输入,但srv01和srv02必需一致。
SRV02
srv02# sysctl net.inet.carp.preempt=1
srv02# ifconfig carp0 create
srv02# ifconfig carp0 vhid 1 advskew 100 pass yourpassword 192.168.2.144/24 up
IPVS 部分
srv01# kldload /boot/modules/ipvs.ko
srv01# kldload /boot/modules/rr/ip_vs_rr.ko
srv01# ipvsadm –A –t 192.168.2.144:80 -s rr
srv01# ipvsadm -a -t 192.168.2.144:80 -r 192.168.2.133:80 -g
srv01# ipvsadm -a -t 192.168.2.144:80 -r 192.168.1.130:80 –g
srv01# ipvsadm –A –t 192.168.2.144:22 -s rr
srv01# ipvsadm -a -t 192.168.2.144:22 -r 192.168.2.133:22 -g
srv01# ipvsadm -a -t 192.168.2.144:22 -r 192.168.1.130:22 -g
这里我只测试了http(80)和ssh(22)服务,其它的服务配置方法一样。
以上操作在srv02上同样做一遍
清除 IPVS配置命令如下:
srv01# ./ipvsadm -C
srv01# kldunload ip_vs_rr
srv01# kldunload ipvs
四 测试
Srv01# ifconfig
sk0: flags=8943 mtu 1500
options=8
inet6 fe80::217:31ff:fe62:be1b%sk0 prefixlen 64 scopeid 0x1
inet 192.168.2.133 netmask 0xffffff00 broadcast 192.168.2.255
ether 00:17:31:62:be:1b
media: Ethernet autoselect (100baseTX )
status: active
plip0: flags=108810 mtu 1500
lo0: flags=8049 mtu 16384
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
inet 127.0.0.1 netmask 0xff000000
carp0: flags=49 mtu 1500
inet 192.168.2.144 netmask 0xffffff00
carp: MASTER vhid 1 advbase 1 advskew 0
Srv02# ifconfig
rl0: flags=8943 mtu 1500
options=8
inet6 fe80::217:31ff:fe62:be1b%sk0 prefixlen 64 scopeid 0x1
inet 192.168.2.130 netmask 0xffffff00 broadcast 192.168.2.255
ether 00:17:31:62:be:1b
media: Ethernet autoselect (100baseTX )
status: active
plip0: flags=108810 mtu 1500
lo0: flags=8049 mtu 16384
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
inet 127.0.0.1 netmask 0xff000000
carp0: flags=49 mtu 1500
inet 192.168.2.144 netmask 0xffffff00
carp: BACKUP vhid 1 advbase 1 advskew 100
从ifconfig结果可以看到srv01 为master,srv02为backup.
IPVS 测试
客户端访问
http://192.168.2.144
,不停刷新web页面时,web页面会在srv01,srv02上切换(为使切换效果明显srv01,srv02用内容不同的主页),说明负载均衡功能已成功。
客户端访问 192.168.2.144:22 (ssh) 每次连接一台不同Server(srv01,srv02)。
CARP 测试
用ssh 到 192.168.2.144 可以看到主机名应为 srv01 。
在客户端上ping 192.168.2.144 –t 拔除 srv01 的网线,在丢失1个包后重新连通。
再次ssh 到 192.168.2.144 可以看到主机名应为 srv02,并且srv02自动提升为Master。
当重新连上srv02的网线时,srv02自动降为Backup。
这时说明双机热备份功能已经成功。
基于DNS的多机均衡负载的实现
基于DNS的多机均衡负载的实现-
前二天为一个客户添加了一台服务器。共同承担一个论坛的运作。但是。要实现负载均衡。的确是件难事。
之前有试过几个方法,
一、DNS轮值。。优点:简单实现。缺点:无法检测各个服务器的负荷。难控制访客的访问地址(一般DNS服务器都有缓存,所以。效果不明显)
二、前台程序。。使用了一个类似Zeus Load Balancer的服务程序。在前台接受访问请求。再分流到各个实际的服务器。
但以上二个方法都不太适用我的情况。。
第一种。无法正确分配访客流量。。。常发生一台服务器的负荷很大。而另一台就很低。。。
第二种。会占用更多的流量。资源也占用较大。
最好。我还是采用了一个DNS均衡负载的方法---lbname。
它的主要效果介绍:
一、基于perl的dns服务端。应用简单。
二、自动检测各个服务器的负荷。然后再按结果优先分配DNS解析。
三、DNS解析实时生效。不会被DNS服务器缓存。
四、安装方法简单。。。
lbname网页介绍
http://www.stanford.edu/~schemers/docs/lbnamed/lbnamed.html
http://www.stanford.edu/~riepel/lbnamed/
。
。
下载:
http://www.stanford.edu/~riepel/lbnamed/lbnamed-1.2.1.tar.gz
http://www.stanford.edu/~schemers/dist/lb.tar
.
.
下载包说明:
内存数个目录
1)lbcd的源代码。。。。lbcd是lbnamed所用到的服务器端检测服务器负荷程序。。每个需要均衡负荷的服务器都需要安装、运行它的。。。
建议下载使用最新的lbcd编译包。
http://www.stanford.edu/~riepel/lbnamed/lbcd-3.1.0.tar.gz
之前的常有编译错误的。(这个也有的。嘻。)
编译这个包时。常会出错的。如何成功安装。就看你的本事了。(编辑util.c第123行。在前面加上//)
编译lbcd成功后。将它复制到/usr/sbin。那你就可以运行它了。。不用加什么参数了。(运行后要停止它就是lbcd -s)
2)lbnamed的服务器程序perl..分有二个版本。一个是perl4.另一个是perl5.我是使用perl5的。所以用它来说明。
进入perl5目录。。。。。先要配置好lbnamed和poller程序。
说明一下:
lbnamed程序是主程序。提供dns动态解析。严格来说。它已是一个dns服务器端程序了。
poller是为lbnamed提供各个均衡服务器的负荷情况。(配合我们之前安装的lbcd程序使用)
但二个程序可能都需要更改,请看程序第一行的perl程序地址。。改为你的perl地址。
然后就需要更改程序的配置文件了。
1,lbnamed.conf 要更改的地方有几个
一、$hostmaster = "schemers.leland.stanford.edu"; 将schemers.leland.stanford.edu改为你服务器的域名。。比如host.abc.com 这个无太大关系
二、将所有stanford改为你域名的中段(比如bendy.com,就改为bendy),将所有edu改为域名的后缀(比如bendy.com,就改为com)。。这个很重要。。我建议不要更改best。当然你也可以改
2,sweet.config 这个文件可以是用其它文件名的,具体在lbnamed.conf有设置。我建议大家先清空这文件。再重新建立新的。
这个文件的配置方法是
负荷服务器host 负重 组
比如。我自己的情况。有二台服务器。分别是bbs1.bendy.com和bendy2.bendy.com那我的配置文件就是
bbs1 1 bbs
bbs2 1 bbs
配置好这个文件后。你需要一个能对bbs1这个域名进行解析的方法。就是修改/etc/hosts文件。我的情况就是
192.168.1.1 bbs1
192.168.1.2 bbs2
这样的话。poller程序就会检测111.222.333.001、111.222.333.002的负荷情况了
至此,DNS服务器和均衡负载的服务器的程序已完成。可能我的说明不太清楚。现在我就一一列表说明
bbs1服务器 lbserver1 192.168.1.1 编译运行lbcd
bbs2服务器 lbserver2 192.168.1.2 编译运行lbcd
dns服务器 dnsserver 10.0.0.1 配置lbnamed 在/etc/hosts配置bbs1、bbs2域名解析
这样的情况下。。在dns服务器运行lbnamed程序。系统就开始动作了。。lbnamed的启动参数主要是 -l logfile和-d(debug)
./lbnamed -l lb.log -d
查看记录(类似)
cat lb.log
-=====
05/30 00:59 21442 lbnamed starting poller
05/30 00:59 21442 lbnamed load_config
loading 1452 bbs2 192.168.1.2 bbs
loading 837 bbs1 192.168.1.1 bbs
05/30 00:59 21442 lbnamed ready to answer requests
05/30 00:59 21442 lbnamed do_maint
05/30 00:59 21442 lbnamed reloading config
05/30 00:59 21442 lbnamed load_config
loading 1671 bbs2 192.168.1.2 bbs
loading 1086 bbs1 192.168.1.1 bbs
如果你没有那些记录。看文件sweet.config.unreach这是代表poller程序无法接收到对方服务器的负荷信息。。请检查lbcd程序是否运行。。
如果程序运行正常。那你的DNS服务器就正常运行了。
如果检查程序是否正常。。。用我们的nslookup就可以了。。。
C:\Documents and Settings\Administrator.XINGKONG-SERVER>nslookup
Default Server: ns.guangzhou.gd.cn
Address: 202.96.128.143
> server 10.0.0.1 //直接使用dns服务器
Default Server: [10.0.0.1]
Address: 10.0.0.1
> set type=all //设置查询类型
> bbs.best.bendy.com //bbs是sweet.config设置的组名,best.bendy.com是在lbnamed.conf设置的
Server: [10.0.0.1]
Address: 10.0.0.1
bbs.best.bendy.com canonical name = bbs2.bendy.com //返回的信息。是DNS系统分配了bbs2给你这次的查询(按二台服务器返回的负荷情况来分配的,并非随便分配的)
bbs2.bendy.com internet address = 192.168.1.2 //而bbs.bendy.com在该在DNS系统的A记录是192.168.1.2//最后结果bbs.best.bendy.com得到的IP 地址是192.168.1.2
====
自此。。服务器方面的配置已经完成。
跟着是我们配置具体域名的dns解析。。。
方法也是很简单,以bendy.com为例,在bendy.com的DNS管理加上以下记录
一、加上二个best.bendy.com的ns记录为ns1.bendy.com和ns2.bendy.com(也可以不止二个的.取决你有多少台服务器运行lbnamed
二、加上第一条添加的ns记录的实际指向iP,分别指向各个运行lbnamed的服务器,比如ns1.bendy.com address 10.0.0.1/ns2.bendy.com address 10.0.0.2等。
三、添加bbs1.bendy.com和bbs2.bendy.com等的实际ip地址。。。正如刚才所说...bbs.best.bendy.com只 将DNS记录转移为bbs1.bendy.com或者bbs2.bendy.com。而lbnamed是没权对bbs1.bendy.com和 bbs2.bendy.com进行解析的。。。所以。需要bendy.com的NAMESERER对它进行解析。
(ps:bbs1.bendy.com的记录并不一定要求与lbnamed程序的相同。。。)
四、最后。。添加bbs.bendy.com cname to bbs.best.bendy.com。。。哈哈。。。大功告成。。。
DNS解析完成后,我们就完成本次任务了。。。。
小弟的表达能力有限。如有什么不明白的地方。请到
http://www.discuz.net/forumdisplay.php?fid=34&page=1
这里发表意见
讲到负载均衡,几乎所有地方都必须要讲一下基于DNS的方式,因为这实在是最基本、最简单的方式了。当然,也几乎所有地方都说到这种方式的种种缺点,不过,既然很基本,就还是要说明一下。
下面这段讲得很清楚:
最早的负载均衡技术是通过DNS来实现的,在DNS中为多个地址配置同一个名字,因而查询这个名字的客户机将得到其中一个地址,从而使得不同的客户访问不同的服务器,达到负载均衡的目的。
DNS负载均衡是一种简单而有效的方法,但是它不能区分服务器的差异,也不能反映服务器的当前运行状态。当使用DNS负载均衡的时候,必须尽量保证不同的 客户计算机能均匀获得不同的地址。由于DNS数据具备刷新时间标志,一旦超过这个时间限制,其他DNS服务器就需要和这个服务器交互,以重新获得地址数 据,就有可能获得不同IP地址。因此为了使地址能随机分配,就应使刷新时间尽量短,不同地方的DNS服务器能更新对应的地址,达到随机获得地址,然而将过 期时间设置得过短,将使DNS流量大增,而造成额外的网络问题。DNS负载均衡的另一个问题是,一旦某个服务器出现故障,即使及时修改了DNS设置,还是 要等待足够的时间(刷新时间)才能发挥作用,在此期间,保存了故障服务器地址的客户计算机将不能正常访问服务器。
尽管存在多种问题,但它还是一种非常有效的做法,包括Yahoo在内的很多大型网站都使用DNS。
引自:
负载均衡技术研究
原文:
http://www.ha999.com/loadbalance/lb_tech.htm
比较一下DNS方式与专业的负载均衡软件如
PCL负载均衡软件
,会发现DNS的问题在于,一是往往不能根据系统与服务的状态来判断负载,二是往往不能建立较复杂的负载均衡算法,而最主要的是DNS往往有缓存,简单分配负载问题不大,如果是应用集群这个就是无法接受的。
那么,为什么象Yahoo在内的大型网站都使用DNS方式呢?因为对于门户网站来讲,应用形态单一且简单,重要的是服务器数量与分布,而如果出现短时 间对于少量用户的服务中断问题并不大(比如有100台服务器,有一台不行了,即使DNS有缓存,也关系不大,用户重新刷一下,就很可能又分配到其他机器上 了)。
但是,对于应用系统而言,比如两三台服务器,跑着比较复杂的应用,DNS方式就完全不适合了,这个时候,就要用专业的负载均衡软件了。
我们可以看一个实例,这样会对专业化负载均衡软件应该支持什么样的应用有更多的理解:
36000人同时应用的负载均衡实例
先看看什么是URL重定向:
"简单的说,如果一个网站有正规的URL和别名URL,对别名URL进行重定向到正规URL,访问同一个网址,或者网站改换成了新的域名则把旧的域名重定向到新的域名,都叫URL重定向"
http://www.focuschina.com/service/host_faq.php
"很多网络协议都支持“重定向”功能,例如在HTTP协议中支持Location指令,接收到这个指令的浏览器将自动重定向到Location指明的另一个URL上。"
http://sysapp.51cto.com/art/200604/25388.htm
这种方式,对于简单的网站,如果网站是自己开发的,也在一定程度上可行.但是它存在着较多的问题:
1、“例如一台服务器如何能保证它重定向过的服务器是比较空闲的,并且不会再次发送Location指令,Location指令和浏览器都没有这方面的支持能力,这样很容易在浏览器上形成一种死循环。”
2、在哪里放LOCATION,也是一个问题。很有可能用户会访问系统的很多个不同URL,这个时候做起来会非常麻烦。并且,对URL的访问,有的时候是直接过来的,可以被重定向,有的时候是带着SESSION之类的,重定向就可能会出问题。并且,这种做法,将负载均衡这个系统级的问题放到了应用层,结果可能是麻烦多多。
3、这种方式一般只适用于HTTP方式,但是实际上有太多情况不仅仅是HTTP方式了,特别是用户如果在应用里面插一点流媒体之类的。
4、重定向的方式,效率远低于IP隧道。
5、这种方式,有的时候会伴以对服务器状态的检测,但往往也是在应用层面实现,从而实时性大打折扣。
实际上,这种方式是一种“对付”的解决方法,并不能真正用于企业级的负载均衡应用(这里企业级是指稍微复杂一点的应用系统)
可以看一下专业的负载均衡软件是如何来实现的:
http://www.ha999.com/pcl/pcl_sis_theory.htm
对比一下可以发现,专业的负载均衡软件要更适用于正规应用,而重定向方式则比较适用于一些简单的网站应用。
实际上,实现负载均衡,使用象F5这样的专业设备是一种方式,而使用软件方式是另外一种方式.
现在比较一下两种方式.
基于硬件的方式,能够直接通过智能交换机实现,处理能力更强,而且与系统无关,这就是其存在的理由.但其缺点也很明显:
首先是贵,这个贵不仅是体现在一台设备上,而且体现在冗余配置上.很难想象后面服务器做一个集群,但最关键的负载均衡设备却是单点配置,一旦出了问题就全趴了.
第二是对服务器及应用状态的掌握:硬件负载均衡,一般都不管实际系统与应用的状态,而只是从网络层来判断,所以有时候系统处理能力已经不行了,但网络可能还来得及反应(这种情况非常典型,比如应用服务器后面内存已经占用很多,但还没有彻底不行,如果网络传输量不大就未必在网络层能反映出来)。
所以硬件方式更适用于一大堆设备、大访问量、简单应用。
软件方式,其实也分多种情况,这里只讲一下典型的专业负载均衡软件。看了硬件方式的不足就比较容易理解专业负载均衡软件的优点了:
首先是基于系统与应用的负载均衡,能够更好地根据系统与应用的状况来分配负载。这对于复杂应用是很重要的。
第二是性价比,实际上如果几台服务器,用F5之类的绝对是杀鸡用牛刀(而且得用两把牛刀),而用软件就要合算得多,因为服务器同时还可以跑应用。
因此,象比如几台应用服务器的情况(而不是简单的网页应用),显然基于软件方式要合理得多。
大概是以前这种专业的负载均衡软件很难找到,所以大家不太关注这方面吧,不过现在应该已经有这方面的产品了,比如:
PCL负载均衡软件
看一下专业的负载均衡软件是什么样的:
PCL负载均衡软件
详细内容,大家可以自己去看。简单讲,专业负载均衡软件大概有以下特点:
1、它是基于IP隧道的,而不是象URL重定向方式那样。所以,它是独立于应用的
2、它支持不同平台,即应用可以是基于LINUX,WINDOWS或SOLARIS的,而不是象LVS只能在LINUX上
3、它是实时的,这点与DNS方式有极大的差别。
4、它能够根据系统、应用的情况来决定负载,这一点与硬件负载均衡设备有很大差别。
5、专业负载均衡软件,适用于企业级应用,无论从其可靠性,还是从其服务保障上,都不是象LVS那样的开源软件可比的。
总结一下,如果是象YAHOO那样的网站应用,可以考虑DNS方式,参见:
负载均衡软件实现方式之二 - 基于DNS
如果是特别简单的应用,可以考虑URL重定向方式,参见:
负载均衡软件实现方式之一 - URL重定向方式
如果是不太重要的纯LINUX应用,可以考虑LVS,参见:
负载均衡软件实现方式之三 - LVS
如果是重要、流量大、应用简单、预算充足的情况,可以考虑硬件方式(比如用F5)(一定要做双机啊!),参见:
软件与硬件负载均衡的比较
而如果是重要的企业应用,两台或几十台服务器,应用比较复杂,包括有可能跨平台,则应该考虑专业的负载均衡软件。参见:
PCL负载均衡软件-应用集群的理想选择