双机热备(linux)邮件系统方案
heartbeat的概念
Linux-HA的全称是High-Availability Linux,它是一个开源项目,这个开源项目的目标是:通过社区开发者的共同努力,提供一个增强linux可靠性(reliability)、可用性 (availability)和可服务性(serviceability)(RAS)的群集解决方案。其 中Heartbeat就是Linux-HA项目中 的一个组件,也是目前开源HA项目中最成功的一个例子,它提供了所有 HA 软件所需要的基本功能,比如心跳检测和资源接管、监测群集中的系统服务、在群集中的节点间转移共享 IP 地址的所有者等,自1999年开始到现在,Heartbeat在行业内得到了广泛的应用,也发行了很多的版本,可以从Linux-HA的官方网站www.linux-ha.org下载到Heartbeat的最新版本。
1、初始化及网络配置
设备 |
配置 |
服务器一 |
系统:Redhat5.6 eth0:192.168.0.117 #常规网络 eth1:10.10.10.1 #heartbeat#心跳专用网络 hostname:node1.turbo.com |
服务器二 |
系统:Redhat5.6 eth0:192.168.0.118 #常规网络 eth1:10.10.10.2 #心跳专用网络 hostname:node2.turbo.com |
共享存储 |
根据需求使用IP SAN或FC SAN,根据产品使用说明与服务器一,二搭建双机结构(这个一般产品代理商会提供技术支持) |
虚拟IP |
Vip:192.168.0.200 |
2、节点(node)
运行heartbeat进程的一个独立主机,称为节点,节点是HA的核心组成部分,每个节点上运行着操作系统和 heartbeat软件服务,在 heartbeat集群中,节点有主次之分,分别称为主节点和备用/备份节点,每个节点拥有唯一的主机名,并且拥有属于自己的一组资源,例如,磁盘、文件 系统、网络地址和应用服务等。主节点上一般运行着一个或多个应用服务。而备用节点一般处于监控状态。
在两台节点服务器node1,node2上安装heartbeat2.1搭建双机环境
#tar -xf heartbeat.tar.gz –C ./ #将下载的软件包解压到当前目录 #cd ./Heartbeat_rpm #rpm -ivh perl-* --force #解决依赖关系基本软件包已经存在,最好配好本地yum源随时补充 #rpm –ivh heartbeat-pils-2.1.3-3.el5.centos.i386.rpm # rpm –ivh heartbeat-stonith-2.1.3-3.el5.centos.i386.rpm #rpm –ivh heartbeat-2.1.3-3.el5.centos.i386.rpm #因为没有hacluster用户报错,重新执行就行 # rpm -qa | grep heartbeat #确认软件包的安装 heartbeat-stonith-2.1.3-3.el5.centos heartbeat-pils-2.1.3-3.el5.centos heartbeat-2.1.3-3.el5.centos #拷贝turbomail的启动的脚步 #cp mailserver /etc/init.d/ #vim /etc/init.d/mailserver #修改turbomail的安装路径详细的修改看 #chmod 600 /etc/init.d/mailserver |
3、配置主节点,以下三个文件是heartbeat的主要配置文件:
# cd /usr/share/doc/heartbeat-2.1.3 #通过模板创建HA配置文件 # cp ha.cf haresources authkeys /etc/ha.d/ ha.cf #HA主配置文件,相当于cman haresources #资源管理配置文件,相当于rgmanager authkeys #通信密钥协商配置文件
|
3.1配置Ha.cf
# vim /etc/ha.d/ha.cf #ha.cf配置说明 #调试日志文件文件 - -搭建完以后要关闭调试 debugfile /var/log/ha-debug #系统运行日志文件 这个很重要记录着heartbeat运行的一切! logfile /var/log/ha-log #日志等级 logfacility local0 #心跳频率 keepalive 2 #节点死亡时间阀值 deadtime 30 #发出警告时间阀值 warntime 10 #指定heartbeat 守护进程启动后等待120 秒再启动资源 initdead 120 #指定心跳信息传递使用的udp 端口 udpport 694 #在eth1 使用广播方式发送心跳 也可以选择组播 bcast eth1 #eth1设置的是10.10.10.0网段的地址 #确保自身网络和网关的通讯正常,一般是ping网关,告诉ipfail网络是否畅通。 ping 192.168.0.1 #允许主节点重启成功后拿回资源(一般这个不打开) auto_failback off #节点名称,与uname -n 保持一致 node node1.turbo.com node node2.turbo.com #守护进程ipfail检查网络故障的 respawn root /usr/lib/heartbeat/ipfail apiauth ipfail gid=haclient uid=hacluster |
Heartbeat模块的功能解析:
*ipfail插件的用途是检测网络故障,并作出合理的反应,如果需要的话使集群资源failover。为了实现这样的功能ipfail使用ping节点或 者ping节点组,这些节点在集群中作为“哑”节点出现。如果HA节点间可以相互通信ipfail便可以可靠地检测到其中一个网络连接失效的情况,并作出 补救。ipfail是在切换时由切换机发一个ARP包,告诉网关我现在的IP-MAC是这样的。要不然网关还会保留着以前VIP和MAC的对应。
*watchdog的模块,watchdog是一个Linux内核模块,它通过定时向/dev /watchdog设备文件执行写操作,从而确定系统是否正常运行,如果watchdog认为内核挂起,就会重新启动系统,进而释放节点资源。
在 linux中完成watchdog功能的软件叫softdog,softdog维护一个内部计时器,此计时器在一个进程写入/dev/watchdog 设备文件时更新,如果softdog没有看到进程写入/dev/watchdog文件,就认为内核可能出了故障。watchdog超时周期默认是一分钟, 可以通过将watchdog集成到Heartbeat中,从而通过Heartbeat来监控系统是否正常运行。
使用关门狗模块来使有故障节点重启的设置:
1)修改ha.cf 使用看门狗重启故障节点
# vim /etc/ha.d/ha.cf 搜索watchdog watchdog /dev/watchdog 把前面的注析“#”去掉 #service heartbeat restart |
2) 加载模块
# modprobe softdog #echo modprobe softdog >> /etc/rc.d/rc.local 下次启动自动加载softdog模块 |
#10秒,heartbeat进程没有对dog发信号,就会导致系统重启(可以按照默认)
# echo "10" > /proc/sys/kernel/panic #这个根据需求按照默认配置就可以了 |
3.2配置认证方式authkeys
# vim /etc/ha.d/authkeys #指定使用认证的方式 auth 1 1 crc #2 sha1 HI! #3 md5 Hello! # chmod 600 authkeys #设置文件只有管理员可读写提高安全,否则heartbeat启动不了! |
3.3资源(resource)
资源是一个节点可以控制的实体,并且当节点发生故障时,这些资源能够被其它节点接管,heartbeat中,可以当做资源的实体有:
磁盘分区、文件系统l
IP地址l
应用程序服务
# vim /etc/ha.d/haresources node1.turbo.com IPaddr:: 192.168.0.200/32/eth0 mailserver #没有共享存储暂时不挂 虚拟ip IPaddr:: 192.168.0.200/eth0 文件系统Filesystem::/dev/sdb::/turbomail::gfs2 Filesystem::设备符::挂载点::系统格式 设备符主要就是共享存储,用于存放邮件用户 # fdisk –l 来查看共享存储在服务器上对应的设备符 服务 mailserver 这个我们系统的启动文件拷贝在/etc/init.d/目录 |
4、将node1配置文件同步至node2:
# rsync -avzlR /etc/ha.d/ node2:/ |
5、在两个节点上依次启动Heartbeat服务:
# /etc/init.d/heartbeat start # chkconfig heartbeat on #开机自动启动设置 |
6、heartbeat2.x无法对自身资源实现健康监控(vip或者mailserver其中一个down掉了,系统是无法完成资源的切换的),下面将用脚本结合heartbeat资源绑定监控
#cat /root/monitor.sh #!/bin/bash #For Turbomail Mail Server #Editor Xming
#监控heartbeat资源的状态(VIP,mailserver) vip=192.168.0.200 port=8080 /bin/ping -c 5 $vip if [ $? -eq 0 ] ;then #vip正常 /usr/bin/links -dump 1 http://$vip:$port &> /dev/null if [ $? -eq 0 ];then echo "The Vip and mailserver is well." #正常结果 else /sbin/ifconfig | /bin/grep $vip #服务不正常时,检测是否主机 rel=$? if [ $rel -eq 0 ] ;then /usr/bin/pkill -9 heartbeat #如果是就异常关闭heartbeat,让watchdog重启 主机让备机接管资源 echo "Some error with the mailserver,need to kill heartbeat:">>/var/lo g/message fi fi else #vip异常 rel=`/sbin/service mailserver status` #查看服务状态 if [ $rel == "Running" ] ;then /usr/bin/pkill -9 heartbeat #如果服务进程还在,异常关闭heartbeat! echo "Some error with the floatIP,need to kill heartbeat:">>/var/log/messa ge else sleep 30s /bin/ping -c 3 $vip #如果vip和服务都有异常,30秒后再ping,如果还有异常关闭heartbeat if [ $? -ne 0 ] ;then /usr/bin/pkill -9 heartbeat fi fi fi |
6.1创建时间任务:
#chmod +x /root/monitor.sh #vim /var/spool/cron/root */2 * * * * /bin/bash /root/monitor.sh & > /dev/null #设置每两分钟监控一次,保存退出! #crontab -l #确认任务 * /2* * * * /bin/bash /root/monitor.sh & > /dev/null |
*一般任务计划执行都会向管理员root发邮件,你也可以用#mutt 查看邮箱确认任务的执行
7、验证:
1)主动让资源给另外一个节点
# /usr/share/heartbeat/hb_standby
2)主动把资源抢过来
# /usr/share/heartbeat/hb_takeover
3)只关闭心跳网络
会出现脑裂现象
4)轮流关闭heartbeat,查看资源是否切换正常
5)在拥有资源的主机上down掉vip或者mailserver,查看主机是否会重启,并且资源是否已经切换
如有建议请浏览,随时候教!谢谢