集群技术主要分为三大类:
我们这里使用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是LVS集群系统的核心软件,它的主要作用是:
|
IPVS的负载均衡机制有三种,这里使用IP Tunneling机制:
|
IPVS的负载调度算法有十种:
IPVS安装主要包括三方面:
|
关于如何编译内核请参考其他文档,这里使用从UltraMonkey下载的已编译好的内核。
在Load Banlancer、Backup和Real Server上使用同一内核,IPVS和ARP hidden都已编译在这个内核里:
wget http://www.ultramonkey.org/download/2.0.1/rh.el.3.0/RPMS/mkinitrd-3.5.13-1.um.1.i386.rpm
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
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
rpm -Fhv mkinitrd-3.5.13-1.um.1.i386.rpm
rpm -Fhv kernel-2.4.21-27.0.2.EL.um.1.i686.rpm
在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是Linux-HA的高可用性集群软件,它的主要作用是:
|
HeartBeat串口线连接测试方法:
在Load Balancer上:cat < /dev/ttyS0 在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
|
安装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 |
在启动集群系统之前,我们认为包括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。
在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 |