最新消息:

spread+wackamole

未分类 admin 3090浏览 0评论

各位看官之前肯定用过一些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
完成之后需要ldconfig下,让其lib库生效,否则编译wackamole时将无法通过
接着上wackamole
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

您必须 登录 才能发表评论!