LVS集群技术
LVS集群技术
作者:FunBSD
最后更新:2005年5月18日
目录
Preface
集群技术主要分为三大类:
- 高可用性(High Available Cluster),例:Linux-HA
- 负载均衡(Load balancing Cluster),例:LVS、MOSIX
- 高性能计算(High Performance Computing),例:Beowulf
我们这里使用RedHat AS 3.x,LVS,Linux-HA,Ldirectord,构造一个高可用的负载均衡集群系统。如图:
各层的作用:
|
各服务器IP分配:
Virtual IP: | 192.168.136.10 |
Load Balancer: | 192.168.136.11 |
Backup: | 192.168.136.12 |
Real Server 1: | 192.168.136.101 |
Real Server 2: | 192.168.136.102 |
Real Server 3: | 192.168.136.103 |
IPVS
IPVS是LVS集群系统的核心软件,它的主要作用是:
|
IPVS的负载均衡机制有三种,这里使用IP Tunneling机制:
|
IPVS的负载调度算法有十种:
- 轮叫(Round Robin)
- 加权轮叫(Weighted Round Robin)
- 最少链接(Least Connections)
- 加权最少链接(Weighted Least Connections)
- 基于局部性的最少链接(Locality-Based Least Connections)
- 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)
- 目标地址散列(Destination Hashing )
- 源地址散列(Source Hashing)
- 最短期望延迟(Shortest Expected Delay)
- 无须队列等待(Never Queue)
IPVS安装主要包括三方面:
|
关于如何编译内核请参考其他文档,这里使用从UltraMonkey下载的已编译好的内核。
在Load Banlancer、Backup和Real Server上使用同一内核,IPVS和ARP hidden都已编译在这个内核里:
在Load Banlancer和Backup上安装IPVS管理软件:
wget http://www.linuxvirtualserver.org/software/kernel-2.4/ipvs-1.0.10.tar.gz tar zxf ipvs-1.0.10.tar.gz chkconfig --del ipvsadm |
配置IPVS(/etc/sysconfig/ipvsadm),添加Real Server:
-A -t 192.168.136.10:80 -s rr -a -t 192.168.136.10:80 -r 192.168.136.11:80 -i -a -t 192.168.136.10:80 -r 192.168.136.12:80 -i -a -t 192.168.136.10:80 -r 192.168.136.101:80 -i |
相关链接:
Kernel:http://www.kernel.org/ IPVS和IPVSadm:http://www.linuxvirtualserver.org/software/ipvs.html ARP hidden:http://www.ssi.bg/~ja/#hidden |
注意事项:
1. Kernel,IPVS,IPVSadm,ARP hidden之间的版本必须对应。 2. 自己编译内核时,从http://www.kernel.org/下载标准内核源文件,不要使用发行版的内核源文件。 3. Kernel 2.4.28和2.6.10及以上版本已内置IPVS,有些Linux发行版也在其内核里编译了IPVS。 4. ARP hidden可以用arp_ignore/arp_announce或者arptables代替 |
HeartBeat
HeartBeat是Linux-HA的高可用性集群软件,它的主要作用是:
|
HeartBeat串口线连接测试方法:
在Load Balancer上:cat 在Backup上:echo hello > /dev/ttyS0 |
修改主机名(/etc/hosts):
127.0.0.1 localhost.localdomain localhost 192.168.136.11 loadbalancer 192.168.136.12 backup |
安装:
groupadd -g 694 haclient useradd -u 694 -g haclient hacluster rpm -ivh /mnt/cdrom/RedHat/RPMS/glib2-devel-* wget http://www.packetfactory.net/libnet/dist/libnet.tar.gz tar zxf libnet.tar.gz cd libnet cd heartbeat-1.99.4 chkconfig --add heartbeat |
主配置文件(/etc/ha.d/ha.cf):
#debugfile /var/log/ha-debug logfile /var/log/ha-log logfacility local0 keepalive 2 deadtime 30 warntime 10 # 当主节点恢复后,是否自动切回 # 输入"grep misc /proc/devices"(应为10),输入"cat /proc/misc | grep watchdog"(应为130)。 node backup respawn root /usr/lib/heartbeat/ipfail #apiauth ping gid=haclient uid=alanr,root |
资源文件(/etc/ha.d/haresources):
loadbalancer lvs IPaddr::192.168.136.10/24/eth0 ipvsadm ldirectord |
认证文件(/etc/ha.d/authkeys),选取一种认证方式,这个文件的权限必须是600:
auth 1 1 crc #2 sha1 sha1_any_password #3 md5 md5_any_password |
相关链接:
Linux-HA:http://www.linux-ha.org |
ldirectord
安装HeartBeat过程中,已经自动安装了Ldirectord,它的作用是:
|
配置(/etc/ha.d/ldirectord.cf):
# Global Directives checktimeout=3 checkinterval=1 # A sample virual with a fallback that will override the gobal setting virtual=192.168.136.10:80 real=192.168.136.103:80 ipip virtualhost=www.funbsd.net |
在每个Real Server的中添加监控页:
echo "Test Page" >> /var/www/html/test.html |
Patch
在启动集群系统之前,我们认为包括Load Balancer和Backup在内的所有服务器都是Real Server。
在服务器上添加以下脚本/etc/init.d/tunl,用来配置tunl端口,应用arp补丁:
#!/bin/sh # chkconfig: 2345 70 10 # description: Config tunl port and apply arp patch VIP=192.168.136.10 . /etc/rc.d/init.d/functions case "$1" in echo 1 > /proc/sys/net/ipv4/ip_forward stop) ;; |
如果有多个Virutal IP,可以使用tunl0:0,tunl0:1...。
chmod 755 /etc/init.d/tunl |
在Load Balancer和Backup上,这个脚本的启动级必须先于heartbeat,关闭级必须后于heartbeat。
Scripts
在HeartBeat资源文件(/etc/ha.d/haresources)中定义了实现集群所需的各个软件的启动脚本。
这些脚本必须放在/etc/init.d或者/etc/ha.d/resource.d目录里,启动顺序不能变:
loadbalancer lvs IPaddr::192.168.136.10/24/eth0 ipvsadm ldirectord |
IPaddr的作用是启动Virutal IP,它是HeartBeart自带的一个脚本。
ipvsadm的作用是在启动的时候把所有Real Server加入群中。
ldirectord的作用是启动ldirectord监控程序。
lvs的作用是为启动Load Balancer做准备,关闭tunl端口,取消arp补丁:
#!/bin/sh # chkconfig: 2345 90 10 # description: Preparing for Load Balancer and Real Server switching VIP=192.168.136.10 . /etc/rc.d/init.d/functions case "$1" in echo 1 > /proc/sys/net/ipv4/ip_forward ifconfig tunl0 $VIP netmask 255.255.255.255 broadcast $VIP up ;; |
chmod 755 /etc/ha.d/resource.d/lvs |
启动集群系统:
/etc/init.d/heartbeat start |
Reference
http://www.linuxvirtualserver.org/
http://www.linuxts.com/modules/sections/index.php?op=viewarticle&artid=375
http://www.yesky.com/SoftChannel/72341302397632512/20040311/1776261.shtml
http://www-900.ibm.com/developerWorks/cn/linux/theme/special/index.shtml#cluster
Comments
Anonymous (没有被验证)
周四, 2006-09-28 01:26
Permalink
兄弟给个联系方式
怎么这么好的帖子没有人顶啊,我先顶了,大家要跟上!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Anonymous (没有被验证)
周三, 2006-10-25 07:50
Permalink
chmod 755 /etc/ha.d/resource.d/lvs
resource.d目录下没有lvs文件,我使用UltraMonkey和CentOS的包装过,
heartbeat-1.2.3.cvs.20050927-1.rh.el.um.3.i386.rpm
heartbeat-2.0.7-1.c4.i386.rpm
都没有这个文件。
编译的方式没有尝试过,因为做完了要给学校演示,不能让我们现场编译啊。
能帮助我吗?
另外,
start)
echo "Preparing for Load Balancer"
ifconfig tunl0 down
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 0 > /proc/sys/net/ipv4/conf/all/hidden
注意最后一行,这个目录下没有"hidden"文件,是不是arp_ignore文件?
Anonymous (没有被验证)
周四, 2007-02-08 09:41
Permalink
默认heartbeat并不检测
默认heartbeat并不检测除本身之外的其他任何服务,也不检测网络状况
网络状况可以通过ipfail插件来完成监测,但是其他服务如何监测呢?比如tomcat,weblogic, websphere等应用服务?
看官方网站上说可以通过CRM来完成服务的监测,但我看了以后,还是不知道该如何配置?不知道大家有没有尝试过呢?
Anonymous (没有被验证)
周五, 2007-07-06 13:52
Permalink
默认heartbeat并不检测
默认heartbeat并不检测除本身之外的其他任何服务,也不检测网络状况
如何检测服务器呢?查找了很多资料,大家的配置都是没有检测服务,这在实际场景下不过不检测服务是没有什么意义的!
Anonymous (没有被验证)
周五, 2007-08-31 07:07
Permalink
顶个屁 啊好多错误。。
顶不定没劲,,,
好多不详细的地方!!!
Anonymous (没有被验证)
周五, 2007-08-31 08:48
Permalink
安装文件下找不到ldirectord.cf
as4kernel2.6.9,heartbeat2.0.rpm安装完后,安装文件下找不到ldirectord.cf
deyongfeng
周六, 2007-09-22 07:06
Permalink
好文章
我来做一下,看能不能实现
yong
周六, 2009-07-11 07:44
Permalink
好文章
请问文章中“在启动集群系统之前,我们认为包括Load Balancer和Backup在内的所有服务器都是Real Server。”配置脚本/etc/init.d/tunl脚本,能说明下作用吗?能不能在启动集群系统前,不包Load Balancer和Bachup包含在内呢?请各位高手指导下!