各位看官之前肯定用过一些HA的软件,诸如heartbeat+lvs,zxtm之流,heartbeat很好很强大,最强大的在于不要钱,缺点在于没法做成AA,zxtm更强大,可以AA,可惜他要钱,接下来我们的主角隆重登场:spread+wackamole ,他既不要钱也能做AA,堪称穷人的劳斯莱斯。
spread 主要实现集群之间机器的健康检查(心跳),wackamole结合spread的检测结果及自身的配置文件来确定对外服务的ip绑定在集群内的哪台服务器上,当然这辆”劳斯莱斯”只是做网络方面的检测和ip的切换,服务层面的监控还是需要外挂的脚本实现。
安装篇:
安装的顺序为先装spread再装wackamole,下载地址如下:
spread:http://www.spread.org/download.html
wackamole:http://www.cnds.jhu.edu/software/
安装前需要在/etc/hosts下添加该集群服务器的ip及主机名,接着编译安装spread,编译参数如下:
tar xzf spread-src-4.0.0.tar.gz cd spread-src-4.0.0 ./configure --prefix=/usr --sysconfdir=/etc make make install
tar xzf wackamole-2.1.4-last.tar.gz cd wackamole-2.1.4 ./configure --prefix=/usr --sysconfdir=/etc --with-perl make make install
搞定收工
配置篇:
spread的配置文件在/etc下面,文件名为spread.conf
Spread_Segment Bcast:4803 { hostname1 ip1 hostname2 ip2 } EventPriority = ERROR EventLogFile = /your/path/spread.log RuntimeDir = /var/run/spread DaemonUser = nobody DaemonGroup = nobody
配置文件超级简单,只需要定义集群内的服务器,启动用户和事件日志文件的位置就行了
按照国际惯例附送启动文件一个:
#!/bin/bash # # spread This starts and stops spread # # chkconfig: 345 90 10 # description: This starts the spread daemon # # processname: spread # config: /etc/spread.conf # pidfile:/var/run/spread.pid DAEMON=/usr/sbin/spread CONFIG=/etc/spread.conf LOG=/your/path/spread.log HOST=`uname -n` NAME="spread" RETVAL=0 #Source function library. . /etc/rc.d/init.d/functions start() { echo -n "Starting $NAME..." daemon $($DAEMON -c $CONFIG -n $HOST 2>&1 > $LOG &)&; RETVAL=$? [ "$RETVAL" = 0 ] && touch /var/lock/subsys/$NAME echo } stop() { echo -n "Stopping $NAME..." killproc $DAEMON [ "$RETVAL" = 0 ] && rm -f /var/lock/subsys/$NAME echo } case "$1" in start) start ;; stop) stop ;; restart) stop start ;; status) status $NAME RETVAL=$? ;; *) echo $"Usage: $0 {start|stop|restart|status}" RETVAL=1 esac exit $RETVAL
接下来是wackamole的配置文件,位置在/etc/wackamole.conf
Spread = 4803@127.0.0.1 SpreadRetryInterval = 5s Group = groupname Control = /var/run/wack.it Prefer { eth0:vip1/nm } VirtualInterfaces { { eth0:vip1/nm } { eth0:vip2/nm } } Arp-Cache = 10s Notify { eth0:network/nm eth0:server{n}ip/nm arp-cache } balance { AcquisitionsPerRound = all interval = 4s } mature = 5s
也很简单,定义了spread的端口,groupname, vip(其中prefer定义了本机优先绑定的vip),notify中定义的是网络地址及集群内的其他服务器地址
启动文件如下:
#!/bin/bash # # wackamole This starts and stops wackamole # # chkconfig: 345 95 05 # description: This starts the wackamole daemon # # requires: spread # processname: wackamole # config: /etc/wackamole.conf # pidfile:/var/run/wackamole.pid DAEMON=/usr/sbin/wackamole CONFIG=/etc/wackamole.conf NAME="wackamole" RETVAL=0 #Source function library. . /etc/rc.d/init.d/functions start() { echo -n "Starting $NAME..." daemon $DAEMON -c $CONFIG RETVAL=$? [ "$RETVAL" = 0 ] && touch /var/lock/subsys/$NAME echo } stop() { echo -n "Stopping $NAME..." killproc $DAEMON [ "$RETVAL" = 0 ] && rm -f /var/lock/subsys/$NAME echo } case "$1" in start) start ;; stop) stop ;; restart) stop start ;; status) status $NAME RETVAL=$? ;; *) echo $"Usage: $0 {start|stop|restart|status}" RETVAL=1 esac exit $RETVAL
剩下的就是开启服务啦,先启动spread,再启动wackamole,至此完成了网络层面的高可用性,剩下的就是写些脚本去监控服务的状态,如有问题,手动调用wackamole的命令来触发vip的切换,这样,一个高可用的服务就全部完成啦
PS:
wackamole下我们常用的命令为wackatrl,用法如下:
wackatrl: invalid option — h
Usage:
-c : use filename instead of wackamole.conf
-f : tell the local instance to simulate failure
-s : tell the local instance to simulate success
-l : display the current VIF assignments
转载请注明:爱开源 » spread+wackamole