免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 28075 | 回复: 59

我也来发个LVS集群的文档 [复制链接]

论坛徽章:
0
发表于 2005-05-19 17:49 |显示全部楼层
希望对各位DDMM有点帮助,没有帮助你也不要拍砖
安装环境:RedHat AS 3.x , LVS , Linux-HA HeartBeat, Ldirectord
主要特点:Load Balancer和 Backup Load Balancer也可以作为Real Server加入群中,以节省资源。其他Real Server可以任意添加,也可以没有
原文可以访问我的个人网站:http://www.funbsd.net

作者:FunBSD
最后更新:2005年5月18日  

目录
Preface
IPVS
HeatBeat
Ldirectord
Patch
Scripts
Reference


#######################################
# Preface
#######################################

系统结构如图:


各层的作用:
  1. Load Balancer(负载均衡器):
  2. Load Balancer是整个集群系统的前端,负责把客户请求转发到Real Server上。
  3. Backup是备份Load Balancer,当Load Balancer不可用时接替它,成为实际的Load Balancer。
  4. Load Balancer通过Ldirectord监测各Real Server的健康状况。在Real Server不可用时把它从群中剔除,恢复时重新加入。

  5. Server Array(服务器群):
  6. Server Array是一组运行实际应用服务的机器,比如WEB, Mail, FTP, DNS, Media等等。
  7. 在实际应用中,Load Balancer和Backup也可以兼任Real Server的角色。

  8. Shared Storage(共享存储):
  9. Shared Storage为所有Real Server提供共享存储空间和一致的数据内容。这一部分在这里不涉及
复制代码


各服务器IP分配:
  1. Virtual IP:         192.168.136.10
  2. Load Balancer: 192.168.136.11
  3. Backup:            192.168.136.12
  4. Real Server 1:  192.168.136.101
  5. Real Server 2:  192.168.136.102
  6. Real Server 3:  192.168.136.103
复制代码


#######################################
# IPVS
#######################################

IPVS是LVS集群系统的核心软件,它的主要作用是:
安装在Load Balancer上,把发往Virtual IP的请求转发到Real Server上。

IPVS安装主要包括三方面:
在Load Banlancer上安装IPVS内核补丁
在Load Banlancer上安装IPVS管理软件
在Real Server上安装ARP hidden内核补丁


关于如何编译内核请参考其他文档,这里使用从UltraMonkey下载的已编译好的内核。
在Load Banlancer、Backup和Real Server上使用同一内核,IPVS和ARP hidden都已编译在这个内核里:
  1. wget http://www.ultramonkey.org/download/2.0.1/rh.el.3.0/RPMS/mkinitrd-3.5.13-1.um.1.i386.rpm
  2. wget http://www.ultramonkey.org/download/2.0.1/rh.el.3.0/RPMS/kernel-2.4.21-27.0.2.EL.um.1.i686.rpm
  3. #wget http://www.ultramonkey.org/download/2.0.1/rh.el.3.0/RPMS/kernel-smp-2.4.21-27.0.2.EL.um.1.i686.rpm
  4. rpm -Fhv mkinitrd-3.5.13-1.um.1.i386.rpm
  5. rpm -Fhv kernel-2.4.21-27.0.2.EL.um.1.i686.rpm
复制代码


在Load Banlancer和Backup上安装IPVS管理软件:
  1. wget http://www.linuxvirtualserver.org/software/kernel-2.4/ipvs-1.0.10.tar.gz
  2. tar zxf ipvs-1.0.10.tar.gz
  3. cd ipvs-1.0.10/ipvs/ipvsadm
  4. make install
  5. chkconfig --del ipvsadm
复制代码


配置IPVS(/etc/sysconfig/ipvsadm),添加Real Server:
  1. -A -t 192.168.136.10:80 -s rr
  2. -a -t 192.168.136.10:80 -r 192.168.136.11:80 -i
  3. -a -t 192.168.136.10:80 -r 192.168.136.12:80 -i
  4. -a -t 192.168.136.10:80 -r 192.168.136.101:80 -i
  5. -a -t 192.168.136.10:80 -r 192.168.136.102:80 -i
  6. -a -t 192.168.136.10:80 -r 192.168.136.103: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_jf代替  

#######################################
# HeatBeat
#######################################

HeartBeat是Linux-HA的高可用性集群软件,它的主要作用是:
安装在Load Balancer和Backup上,运行于active/standby模式。
当Load Balancer失效时,Backup自动激活,成为实际的Load Balancer。
切换到active模式时,按顺序启动Virtual IP、IPVS和Ldirectord。
切换到standby模式时,按顺序关闭Ldirectord、IPVS和Virtual IP。

HeartBeat串口线连接测试方法:
在Load Balancer上:cat < /dev/ttyS0
在Backup上:echo hello >; /dev/ttyS0
在VMWare上设置串口的时候一端做server,一端做client即可

修改主机名(/etc/hosts):
  1. 127.0.0.1         localhost.localdomain localhost
  2. 192.168.136.11    loadbalancer
  3. 192.168.136.12    backup
复制代码


安装:
  1. groupadd -g 694 haclient
  2. useradd -u 694 -g haclient hacluster

  3. rpm -ivh /mnt/cdrom/RedHat/RPMS/glib2-devel-*

  4. wget http://www.packetfactory.net/libnet/dist/libnet.tar.gz
  5. tar zxf libnet.tar.gz
  6. cd libnet
  7. ./configure
  8. make
  9. make install

  10. wget http://www.linux-ha.org/download/heartbeat-1.99.4-tar.gz
  11. tar zxf heartbeat-1.99.4.tar.gz
  12. cd heartbeat-1.99.4
  13. ./ConfigureMe configure --disable-swig --disable-snmp-subagent
  14. make
  15. make install
  16. cp doc/ha.cf doc/haresources doc/authkeys /etc/ha.d/
  17. cp ldirectord/ldirectord.cf /etc/ha.d/

  18. chkconfig --add heartbeat
  19. chkconfig --del ldirectord  
复制代码


主配置文件(/etc/ha.d/ha.cf):
  1. #debugfile /var/log/ha-debug
  2. logfile /var/log/ha-log
  3. logfacility local0
  4. keepalive 2
  5. deadtime 30
  6. warntime 10
  7. initdead 120
  8. udpport 694
  9. baud 19200
  10. serial /dev/ttyS0
  11. mcast eth0 225.0.0.1 694 1 0

  12. # 当主节点恢复后,是否自动切回
  13. auto_failback on

  14. # stonith用来保证共享存储环境中的数据完整性
  15. #stonith baytech /etc/ha.d/conf/stonith.baytech

  16. # watchdog能让系统在出现故障1分钟后重启该机器。这个功能可以帮助服务器在确实停止心跳后能够重新恢复心跳。
  17. # 如果使用该特性,则在内核中装入"softdog"内核模块,用来生成实际的设备文件,输入"insmod softdog"加载模块。
  18. # 输入"grep misc /proc/devices"(应为10),输入"cat /proc/misc | grep watchdog"(应为130)。
  19. # 生成设备文件:"mknod /dev/watchdog c 10 130" 。
  20. #watchdog /dev/watchdog

  21. node loadbalancer
  22. node backup

  23. # 默认heartbeat并不检测除本身之外的其他任何服务,也不检测网络状况。
  24. # 所以当网络中断时,并不会进行Load Balancer和Backup之间的切换。
  25. # 可以通过ipfail插件,设置'ping nodes'来解决这一问题。详细说明参考hearbeat文档。
  26. #ping 192.168.136.1 172.16.0.1
  27. ping_group group1 192.168.136.1 192.168.136.2
  28. respawn root /usr/lib/heartbeat/ipfail
  29. apiauth ipfail gid=root uid=root

  30. # 其他一些插件可以在/usr/lib/heartbeat下找到
  31. #apiauth ipfail uid=hacluster
  32. #apiauth ccm uid=hacluster
  33. #apiauth cms uid=hacluster
  34. #apiauth ping gid=haclient uid=alanr,root
  35. #apiauth default gid=haclient
复制代码


资源文件(/etc/ha.d/haresources):
  1. loadbalancer lvs IPaddr::192.168.136.10/24/eth0 ipvsadm ldirectord
复制代码


认证文件(/etc/ha.d/authkeys),选取一种认证方式,这个文件的权限必须是600:
  1. auth 1
  2. 1 crc
  3. #2 sha1 sha1_any_password
  4. #3 md5 md5_any_password
复制代码


相关链接:
Linux-HA:http://www.linux-ha.org  

#######################################
# Ldirectord
#######################################

安装HeartBeat过程中,已经自动安装了Ldirectord,它的作用是:
监测Real Server,当Real Server失效时,把它从Load Balancer列表中删除,恢复时重新添加。

配置(/etc/ha.d/ldirectord.cf):
  1. # Global Directives
  2. checktimeout=3
  3. checkinterval=1
  4. fallback=127.0.0.1:80
  5. autoreload=yes
  6. logfile="/var/log/ldirectord.log"
  7. quiescent=yes

  8. # A sample virual with a fallback that will override the gobal setting
  9. virtual=192.168.136.10:80
  10.         real=192.168.136.11:80  ipip
  11.         real=192.168.136.12:80  ipip
  12.         real=192.168.136.101:80 ipip
  13.         real=192.168.136.102:80 ipip
  14.         real=192.168.136.103:80 ipip
  15.         fallback=127.0.0.1:80   gate
  16.         service=http
  17.         request="test.html"
  18.         receive="Test Page"
  19.         virtualhost=www.funbsd.net
  20.         scheduler=rr
  21.         #persistent=600
  22.         #netmask=255.255.255.255
  23.         protocol=tcp
复制代码


在每个Real Server的中添加监控页:
echo "Test Page" >;>; /var/www/html/test.html  

#######################################
# Patch
#######################################

在启动集群系统之前,我们认为包括Load Balancer和Backup在内的所有服务器都是Real Server。
在服务器上添加以下脚本/etc/init.d/tunl,用来配置tunl端口,应用arp补丁:
  1. #!/bin/sh
  2. # chkconfig: 2345 70 10
  3. # description: Config tunl port and apply arp patch
  4. VIP=192.168.136.10

  5. . /etc/rc.d/init.d/functions

  6. case "$1" in
  7.     start)
  8.         echo "Tunl port starting"
  9.         ifconfig tunl0 $VIP netmask 255.255.255.255 broadcast $VIP up
  10.         echo 1 >; /proc/sys/net/ipv4/ip_forward
  11.         echo 1 >; /proc/sys/net/ipv4/conf/all/hidden
  12.         echo 1 >; /proc/sys/net/ipv4/conf/tunl0/hidden
  13.         ;;
  14.     stop)
  15.         echo "Tunl port closing"
  16.         ifconfig tunl0 down
  17.         echo 1 >; /proc/sys/net/ipv4/ip_forward
  18.         echo 0 >; /proc/sys/net/ipv4/conf/all/hidden
  19.         ;;
  20.     *)
  21.         echo "Usage: $0 {start|stop}"
  22.         exit 1
  23. esac
复制代码

如果有多个Virutal IP,可以使用tunl0:0,tunl0:1...。

  1. chmod 755 /etc/init.d/tunl
  2. chkconfig --add tunl  
复制代码

在Load Balancer和Backup上,这个脚本的启动级必须先于heartbeat,关闭级必须后于heartbeat。

#######################################
# Scripts
#######################################

在HeartBeat资源文件(/etc/ha.d/haresources)中定义了实现集群所需的各个软件的启动脚本。
这些脚本必须放在/etc/init.d或者/etc/ha.d/resource.d目录里,启动顺序不能变:
  1. 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补丁:
  1. #!/bin/sh
  2. # chkconfig: 2345 90 10
  3. # description: Preparing for Load Balancer and Real Server switching
  4. VIP=192.168.136.10

  5. . /etc/rc.d/init.d/functions

  6. case "$1" in
  7.     start)
  8.         echo "Preparing for Load Balancer"
  9.         ifconfig tunl0 down
  10.         echo 1 >; /proc/sys/net/ipv4/ip_forward
  11.         echo 0 >; /proc/sys/net/ipv4/conf/all/hidden
  12.         ;;
  13.     stop)
  14.         echo "Preparing for Real Server"
  15.         ifconfig tunl0 $VIP netmask 255.255.255.255 broadcast $VIP up
  16.         echo 1 >; /proc/sys/net/ipv4/ip_forward
  17.         echo 1 >; /proc/sys/net/ipv4/conf/all/hidden
  18.         echo 1 >; /proc/sys/net/ipv4/conf/tunl0/hidden
  19.         ;;
  20.     *)
  21.         echo "Usage: lvs {start|stop}"
  22.         exit 1
  23. esac
复制代码

  1. chmod 755 /etc/ha.d/resource.d/lvs
复制代码


启动集群系统:
  1. /etc/init.d/heartbeat start
复制代码


#######################################
# Reference
#######################################

http://www.linuxvirtualserver.org/

http://www.linux-ha.org/

http://www.ultramonkey.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

论坛徽章:
0
发表于 2005-05-20 21:50 |显示全部楼层

我也来发个LVS集群的文档

这么好的东东没人顶.
同志们都在忙什么呢??

论坛徽章:
0
发表于 2005-05-21 02:28 |显示全部楼层

我也来发个LVS集群的文档

好文,收藏了。

论坛徽章:
0
发表于 2005-05-21 04:57 |显示全部楼层

我也来发个LVS集群的文档

楼主,我又仔细看了一下你的文章,我觉得内核还是用自己编译的好,对于以后troubleshooting比较容易一些。

OK,我把内核编译打patch部分写上来。

需要的软体:①linux-2.4.21.tar.bz2
            ②linux-2.4.21-ipvs-1.0.10.patch.gz
            ③ipvs-1.0.10.tar.gz

这里我还是要说一下,咱们用LVS/NAT方式就可以了,您公司的服务器不会超过20台吧?如果有百十多台,我估计您也不会选择LVS。呵呵。

# cp linux-2.4.21.tar.bz2 /usr/src/
# cp linux-2.4.21-ipvs-1.0.10.patch.gz /usr/src/
# cp ipvs-1.0.10.tar.gz /usr/src/
# cd /usr/src/
# tar jxvfp linux-2.4.21.tar.bz2
# gunzip linux-2.4.21-ipvs-1.0.10.patch.gz
# cd linux-2.4.21
# patch -p1 < ../linux-2.4.21-ipvs-1.0.10.patch
# vi Makefile
  1. EXTRAVERSION=-LVS
复制代码

# make mrproper
# startx
# make xconfig



# 保存退出。
# make dep
# make clean
# make bzImage
# make modules
# make modules_install
# depmod -a
# cp System.map  /boot/System.map-2.4.21-LVS
# rm /boot/System.map
# ln -s /boot/System.map-2.4.21-LVS /boot/System.map
# cp arch/i386/boot/bzImage /boot/vmlinuz-2.4.21-LVS
# rm /boot/vmlinuz
# ln -s /boot/vmlinuz-2.4.21-LVS /boot/vmlinuz
# new-kernel-pkg --mkinitrd --depmod --install 2.4.21-LVS
# 执行最后一步时,它会自动修改你的/etc/grub.conf,把LABEL=/改成/dev/sda1,可用df -h查看。
# shutdown -r now

论坛徽章:
0
发表于 2005-05-21 09:19 |显示全部楼层

我也来发个LVS集群的文档

能写出这好文章,支持你.收藏验证

论坛徽章:
0
发表于 2005-05-21 10:03 |显示全部楼层

我也来发个LVS集群的文档

希望FunBSD再接再厉!^_^

论坛徽章:
0
发表于 2005-05-21 10:26 |显示全部楼层

我也来发个LVS集群的文档

收藏,谢谢FunBSD

论坛徽章:
0
发表于 2005-05-21 13:21 |显示全部楼层

我也来发个LVS集群的文档

写的不错了
收藏

论坛徽章:
0
发表于 2005-05-23 16:28 |显示全部楼层

我也来发个LVS集群的文档

原帖由 "squall1" 发表:

楼主,我又仔细看了一下你的文章,我觉得内核还是用自己编译的好,对于以后troubleshooting比较容易一些。


ultramokey是专门针对redhat做的lvs内核,不会有问题,尤其对于象我这样的懒人,最适合不过了

原帖由 "squall1" 发表:

这里我还是要说一下,咱们用LVS/NAT方式就可以了,您公司的服务器不会超过20台吧?如果有百十多台,我估计您也不会选择LVS。呵呵。


每种方式适用的情况不一样,根据自己需要而定,我更喜欢tunl方式。
20台服务器是NAT的限制,不是TUNL和DR的

BTW,我们公司不用LVS,本文纯属娱乐节目   

论坛徽章:
0
发表于 2005-05-23 20:11 |显示全部楼层

我也来发个LVS集群的文档

LVS/NAT模式比较灵活,它的client可以是任意OS,而隧道和DR模式的client需是Redhat。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP