最近有客户需要一个负载均衡方案,笔者对各种软硬件的负载均衡方案进行了调查和比较,从IBM sServer Cluster、Sun Cluster PlatForm等硬件集群,到中软、红旗、TurboLinux的软件集群,发现无论采用哪个厂商的负载均衡产品其价格都是该客户目前所不能接受的。于是笔者想到了开放源项目Linux Virtual Server(简称LVS)。经过对LVS的研究和实验,终于在Red Hat 9.0上用LVS成功地构架了一组负载均衡的集群系统。整个实现过程整理收录如下,供读者参考。
选用的LVS实际上是一种Linux操作系统上基于IP层的负载均衡调度技术,它在操作系统核心层上,将来自IP层的TCP/UDP请求均衡地转移到不同的服务器,从而将一组服务器构成一个高性能、高可用的虚拟服务器。使用三台机器就可以用LVS实现最简单的集群,如图1所示。
图1显示一台名为Director的机器在集群前端做负载分配工作;后端两台机器称之为Real Server,专门负责处理Director分配来的外界请求。该集群的核心是前端的Director机器,LVS就是安装在这台机器上,它必须安装Linux。Real Server则要根据其选用的负载分配方式而定,通常Real Server上的设置比较少。接下来介绍Director机器上LVS的安装过程。
点击在新窗口中浏览此图片

图1 LVS实现集群系统结构简图
安装
LVS的安装主要是在Director机器上进行,Real Server只需针对不同的转发方式做简单的设定即可。特别是对LVS的NAT方式,Real Server惟一要做的就是设一下缺省的网关。所以构架集群的第一步从安装Director机器开始。
首先要在Director机器上安装一个Linux操作系统。虽然早期的一些Red Hat版本,如6.2、7.2、8.0等自带Red Hat自己的集群软件,或者是在内核中已经支持LVS,但是为了更清楚地了解LVS的机制,笔者还是选择自行将LVS编入Linux内核的方式进行安装,Linux版本采用Red Hat 9.0。
如果用户对Red Hat的安装比较了解,可以选择定制安装,并只安装必要的软件包。安装中请选择GRUB做为启动引导管理软件。因为GRUB在系统引导方面的功能远比LILO强大,在编译Linux内核时可以体会它的方便之处。
LVS是在Linux内核中实现的,所以要对原有的Linux内核打上支持LVS的内核补丁,然后重新编译内核。支持LVS的内核补丁可以从LVS的官方网站http://www.linuxvirtualserver.org下载,下载时请注意使用的Linux核心版本,必须下载和使用的Linux内核版本相一致的LVS内核补丁才行。对于Red Hat 9.0,其Linux内核版本是2.4.20,所以对应内核补丁应该是http://www.linuxvirtualserver.org/software/kernel-2.4/linux-2.4.20-ipvs-1.0.9.patch.gz。笔者经过多次实验,使用Red Hat 9.0自带的Linux源代码无法成功编译LVS的相关模组。由于时间关系笔者没有仔细研究,而是另外从kernel.org上下载了一个tar包格式的2.4.20内核来进行安装,顺利完成所有编译。下面是整个内核的编译过程:
1.删除Red Hat自带的Linux源代码
# cd /usr/src
# rm -rf linux*
2.下载2.4.20内核
# cd /usr/src
# wget ftp://ftp.kernel.org/pub/linux/kernel/v2.4/linux-2.4.20.tar.bz2
3.解压到当前目录/usr/src
# cd /usr/src
# tar -xjpvf linux-2.4.20.tar.bz2
4.建立链接文件
# cd /usr/src # ln -s linux-2.4.20 linux-2.4 # ln -s linux-2.4.20 linux
5.打上LVS的内核补丁
# cd /usr/src
# wget http://www.linuxvirtualserver.org/software/kernel-2.4/linux-2.4.20-ipvs-1.0.9.patch.gz
# gzip -cd linux-2.4.20-ipvs-1.0.9.patch.gz
# cd /usr/src/linux
# patch -p1
在打补丁时,注意命令执行后的信息,不能有任何错误信息,否则核心或模组很可能无法成功编译。
6.打上修正ARP问题的内核补丁
# cd /usr/src
# wget http://www.ssi.bg/~ja/hidden-2.4.20pre10-1.diff
# cd /usr/src/linux
# patch -p1
这一步在Director机器上可以不做,但是在使用LVS/TUN和LVS/DR方式的Real Server上必须做。
7.为新核心命名
打开/usr/src/linux/Makefile。注意,在开始部分有一个变量EXTRAVERSION可以自行定义。修改这个变量,比如改成“EXTRAVERSION=-LVS”后,编译出的核心版本号就会显示成2.4.20-LVS。这样给出有含义的名称将有助于管理多个Linux核心。
8.检查源代码
# make mrproper
这一步是为确保源代码目录下没有不正确的.o文件及文件的互相依赖。因为是新下载的内核,所以在第一次编译时,这一步实际可以省略。
9.配置核心选项
# make menuconfig
命令执行后会进入一个图形化的配置界面,可以通过这个友好的图形界面对内核进行定制。此过程中,要注意对硬件驱动的选择。Linux支持丰富的硬件,但对于服务器而言,用不到的硬件驱动都可以删除。另外,像Multimedia devices、Sound、Bluetooth support、Amateur Radio support等项也可以删除。
注意,以下几项配置对LVS非常重要,请确保作出正确的选择:
(1)Code maturity level options项
对此项只有以下一个子选项,请选中为*,即编译到内核中去。
[*]Prompt for development and/or incomplete code/drivers
(2)Networking options项
对此项的选择可以参考以下的配置,如果不清楚含义可以查看帮助:
Packet socket
[ ]   Packet socket: mmapped IO
Netlink device emulation
[*] Network packet filtering (replaces ipchains)
[ ]   Network packet filtering debugging
[*] Socket Filtering
Unix domain sockets
[*] TCP/IP networking
[*]   IP: multicasting
[*]   IP: advanced router
[*]     IP: policy routing
[ ]       IP: use netfilter MARK value as routing key
[ ]       IP: fast network address translation
  IP: tunneling
[*]     IP: broadcast GRE over IP
[ ]   IP: multicast routing
[ ]   IP: ARP daemon support (EXPERIMENTAL)
[ ]   IP: TCP Explicit Congestion Notification support
[ ]   IP: TCP syncookie support (disabled per default)
    IP: Netfilter Configuration  --->
    IP: Virtual Server Configuration  --->
(3)Networking options项中的IP: Virtual Server Configuration项
如果打好了LVS的内核补丁,就会出现此选项。进入Virtual Server Configuration选项,有以下子选项:
virtual server support (EXPERIMENTAL)      
[*]   IP virtual server debugging
(12)   IPVS connection table size (the Nth power of 2)  
--- IPVS scheduler    
  round-robin scheduling        
  weighted round-robin scheduling            
  least-connection scheduling scheduling            
  weighted least-connection scheduling            
  locality-based least-connection scheduling                  
  locality-based least-connection with replication scheduling    
  destination hashing scheduling          
  source hashing scheduling      
  shortest expected delay scheduling    
  never queue scheduling  
--- IPVS application helper        
  FTP protocol helper
以上所有项建议全部选择。
(4)Networking options项中的IP: Netfilter Configuration项
对于2.4版本以上的Linux Kernel来说,iptables是取代早期ipfwadm和ipchains的更好选择,所以除非有特殊情况需要用到对ipchains和ipfwadm的支持,否则就不要选它。本文在LVS/NAT方式中,使用的就是iptables,故这里不选择对ipchains和ipfwadm的支持:
ipchains (2.2-style) support                
ipfwadm (2.0-style) support
内文分页: [1] [2] [3]
评论(0) | 引用(0) | 阅读(3667)
发表评论
昵称 [注册]
密码 游客无需密码
网址
电邮
打开HTML 打开UBB 打开表情 隐藏 记住我