首页 > 代码库 > 使用heartbeat+monit实现主备双热备份系统

使用heartbeat+monit实现主备双热备份系统

技术分享技术分享


一、使用背景

项目须要实现主备双热自己主动切换的功能,保证系统7*24小时不间断执行;现已有两台双网卡的IBM的server,为了不再添加成本採购独立外部存储设备和双机热备软件。採用了linux下开源的HA软件进行部署,即heartbeat+monit方式。

1、使用heartbeat来进行心跳监測和资源接管,心跳监測能够通过网络链路和串口进行,此处使用网络链路。并且支持 冗 余链路,它们之间相互发送报文来告诉对方自己当前的状态,假设在指定的时间内未收到对方发送的报文。那么就觉得对方失效,这时需启动资源接管模块来接管运 行在对方主机上的资源或者服务。

2、使用monit相应用服务进程监控、重新启动。Monit是一款功能很丰富的进程、文件、文件夹和设备的监測软件,用于Unix平台。 它能够自己主动修复那些已经停止运作的程序,特使适合处理那些因为多种原因导致的软件错误。

3、改进点:因为没有共享存储设备来存储数据和应用服务,须要採用DRBD的方式进行两台server间的数据同步,也就是数据镜像。

因时间紧迫没有时间研究DRBD这样的镜像技术。兴许考虑加进来。

4、项目的应用程序分三个独立的进程:数据採集进程、数据处理进程、数据通信服务进程。将这三个进程做成linux的服务方式进行管理,即:servicemyprocess start这样的方式

3、系统拓扑图及表述(如上图)

两个server中的eth0网卡用来外部通信,eth1网卡用来心跳检測。

OSubunt12.04

VIP 虚拟IP192.168.134

主节点:

Eth0IP(外网):192.168.1.132

Eth1IP(内网):192.168.2.2

备节点:

Eth0IP(外网):192.168.1.133

Eth1IP(内网):192.168.2.3

二、安装monit

1、由于heartbeat仅仅负责心跳和两台server通信的功能,可是在自己的服务进程挂掉时,不能实现自己主动重新启动。

由于对monit比較熟悉,便採用了monit来监控服务进程,和heartbeat结合使用。

事实上也能够採用其它方式。如mon等。

Sudo apt-getinstall monit

2、编辑monit启动脚本。位置:/etc/init.d/monit,加入自己的进程(红色字体部分)其作用是在heartbeat在进行切换的时候,能够停止当前server上的应用服务。待切换完毕后启动备用server上的应用服务程序(由于没有做软镜像也没有共享存储,应用服务和数据在两台server上各有一份。在我的使用场景中能够这样做)

………

  stop)

    log_daemon_msg "Stopping $DESC""$NAME"

    if start-stop-daemon --retry TERM/5/KILL/5--oknodo --stop --quiet \

                         --pidfile $PID --exec$DAEMON

        

    then

      log_end_msg 0

    else

      log_end_msg 1

    fi

#################################

#此处加入要监控的服务进程   

     service DataCollection stop

     service DataProcss stop

     service RsServer stop      

################################

    ;;

  reload)

…………….

3、编辑/etc/monit/monitrc配置文件,网上这方面的资料比較多能够參考。在当中增加自己须要监控的进程。最后将编辑好的monitrc文件权限改动为700

………………

#须要监控的进程配置

#########Start checkDataCollection##########################

    check process DataCollection with pidfile/tmp/kd_data_collection_filename.pid

     start program ="/etc/init.d/DataCollection start"

     stop program ="/etc/init.d/DataCollection stop"

#########End checkDataCollection##########################

 

#########Start checkDataProcss##########################

    check process DataProcss with pidfile/tmp/kd_data_process_filename.pid

     start program ="/etc/init.d/DataProcss start"

     stop program ="/etc/init.d/DataProcss stop"

#########End checkDataProcss##########################

 

#########Start checkRsServer##########################

    check process RsServer with pidfile/tmp/kd_data_server_filename.pid

     start program = "/etc/init.d/RsServerstart"

     stop program = "/etc/init.d/RsServerstop"

#########End checkRsServer##########################

 

################Startcheck heartbeat######################

    check process heartbeat with pidfile/var/run/heartbeat.pid

     start program ="/etc/init.d/heartbeat start"

     stop program = "/etc/init.d/heartbeatstop"

################Endcheck heartbeat##############################

###############################################################################

## Includes

###############################################################################

##

## It is possibleto include additional configuration parts from other files or

## directories.

#

   include /etc/monit/conf.d/*

#.

………………

安装好的monit通过web方法管理进程截图:

 技术分享

三、安装heartbeat

Sudo apt-get install heartbeat

编辑以下三个文件:

         ha.cf                         基本的配置文件。大部分配置信息在该文件里

         haresources     资源配置文件

         authkeys        权限配置】

 

1、  ha.cf配置

logfile       /var/log/ha-log

logfacility local0

keepalive 2

deadtime 30

warntime 10

initdead 120

udpport     694

bcast         eth1           #Linux

auto_failback on

node        ubuntuA

node        ubuntuB

ping 192.168.1.1  

2、  haresources

…………

ubuntuA192.168.1.134 monit

#node-nameresource1 resource2 ... resourceN

…………

3、  authkeys

auth 1

1 crc

#2 sha1 HI!

#3 md5 Hello!

将上面的三个配置文件分别复制到主、备server上的/etc/ha.d文件夹下,并将authkeys权限改为600

在主、备服server上分别启动heartbeat,能够在通过tail  -f /var/log/ha-log查看日志。进行測试









使用heartbeat+monit实现主备双热备份系统