Qmail双机热容错实现--skymail邮件系统

http://www.skymailer.com.cn

 


本文转自金星工作室
介绍
作为服务器 需要提供一定的24X7的安全保证 这样可以防止关键节点的宕机引起系统的全面崩溃 在这里我们用 lvs 和 DRBD 实现了一个真实环境下的双机热容错集群。这里的关键技术是 如何实现ip代换, mon/heartbeat检测, 文件同步。同样这一方法稍加改动就可以实现oracle热备份 ldap热备份 如果你不理解FOS 可以参看我写的
\"自己动手安装Red Hat High Availability Server 《前篇》\"

方案描述
将真实服务地址帮定到一个虚拟网卡(eth0:1)上通过检测程序(heartbeat)来将主机或是备份主机的虚拟网卡(eth0:1)激活。从而实现热备份。使用网络硬盘RAID来同步文件。检测程序通过内网进行监控

拓扑结构



工作模式

正常状态:




备份激活:



主机就绪:



切换回正常模式:

需要手动停止备份服务器的服务,系统会自动切换回正常模式


软硬件需求
两台双网卡主机完全安装 redhat6.2

主机IP 10.0.0.126 备份主机IP 10.0.0.250

实际服务即浮动IP 202.93.204.68


下载需要的软件

ftp://ha.redhat.com/pub/ha/piranha-docs-0.4.17-2.i386.rpm
ftp://ha.redhat.com/pub/ha/piranha-gui-0.4.17-2.i386.rpm
ftp://ha.redhat.com/pub/ha/piranha-0.4.17-2.i386.rpm
ftp://ha.redhat.com/pub/ha/ipvsadm-1.11-4.i386.rpm




安装软件
fos 安装
rpm –Uvh ipvsadm* piranha*两台主机都要装
qmaild脚本安装
DRBD 安装
Tar zvxf tar -zvxf drbd-0.5.8.1.tar.gz
cd drbd
make
make install


有如下相关文件
/usr/sbin/drbdsetup
/lib/modules/2.2.18pre11-va2.1/block/drbd.o
/etc/ha.d/resource.d
/etc/rc.d/init.d/drbd
/sbin/insmod drbd进行测试
应返回”Using /lib/modules/2.2.18pre11-va2.1/block/drbd.o”


设置
编辑/etc/lvs.cf文件
#Example of /etc/lvs.cf
#还需要smtpd popd这两个启动脚本

service =fos                      # 采用fos模式
primary =10.0.0.126               # 主ip地址(qmail)
backup =10.0.0.250                # 备份主机ip地址(Backup)
backup_active =1                  # 激活备份
heartbeat =1                      # 激活Heartbeat
heartbeat_port =1050              # Heartbeat端口
keepalive =2                      # heartbeat间隔 单位秒
deadtime =10                      # 判定死机间隔

rsh_command =ssh                  # 文件同步方案 选ssh
#failoverqmail服务
failover pop {
    active =1                                 # 激活监听服务
    address =202.93.204.68 eth0:1            #
    port =110                                #pop 端口
    send =\"\\n\"                               #pop 连接特征串
    expect =\"+OK\"                            #pop 反馈特征串
    timeout =10                              
    start_cmd =\"/etc/rc.d/init.d/popd start\" #pop 启动命令
    stop_cmd =\"/etc/rc.d/init.d/popd stop\"   #pop关闭命令
}

failover smtp {
    active =1                                 #激活监听服务
    address =202.93.204.68 eth0:1            #
    port =25                                  #smtp端口
    send =\"\\n\"                                #smtp 连接特征串
    expect =\"220\"                             #smtp 反馈特征串
    timeout =10                              
    start_cmd =\"/etc/rc.d/init.d/smtpd start\" # smtp启动命令
    stop_cmd =\"/etc/rc.d/init.d/smtpd stop\"   # smtp关闭命令
}

failover mirror {
    active =1
    timeout =10
    start_cmd =\"/etc/ha.d/resource.d/datadisk start\"   # DRBD启动命令
    stop_cmd =\"/etc/ha.d/resource.d/datadisk stop\"     # DRBD 关闭命令
}



同步LVS文件
scp /etc/lvs.cf 10.0.0.112:/etc/lvs.cf



编辑/etc/fstab加入 (两台都要加)
/dev/nb0         /var/qmail  ext2    noauto          0 0  #FOS RAID



如下



/dev/sda1        /boot        ext2    defaults        1 1
/dev/sda2        /            ext2    defaults        1 1
/dev/nb0         /var/qmail   ext2    noauto          0 0  #FOS RAID
/dev/sda4        swap         swap    defaults        0 0
/dev/cdrom       /mnt/cdrom   iso9660 noauto,owner,ro 0 0
/dev/fd0         /mnt/floppy  auto    noauto,owner    0 0
none             /proc        proc    defaults        0 0
none             /dev/pts     devpts  gid=5,mode=620  0 0



编辑/etc/drbd.conf


resource drbd0 {

 protocol=B

 fsck-cmd=fsck.ext2 -p -y



 on thost1 {

   device=/dev/nb0

   disk=/dev/hda7

   address=10.0.0.126

   port=7789

 }



 on thost2 {

   device=/dev/nb0

   disk=/dev/hda7

   address=10.0.0.250

   port=7789

 }

}

检查两台主机drbd是否载入
#/sbin/lsmod

Module                  Size  Used by

drbd                   37792   0  (unused)

3c59x                  20880   1  (autoclean)



如果drbd没有载入用如下命令载入

/sbin/insmod /lib/modules/2.2.18pre11-va2.1/block/drbd.o


在备份主机上挂接镜像盘
/usr/sbin/drbdsetup /dev/nb0 disk /dev/sda2
/usr/sbin/drbdsetup /dev/nb0 net 10.0.0.250 10.0.0.126 B



在主机上挂接镜像盘
/usr/sbin/drbdsetup /dev/nb0 disk /dev/sda2
/usr/sbin/drbdsetup /dev/nb0 net 10.0.0.126 10.0.0.250 B

/usr/sbin/drbdsetup /dev/nb0 primary



两台主机安装文件卷
/sbin/mkfs -b 4096 /dev/nb0

mount /dev/nb0 /var/qmail

启动
启动主机的drbd

/etc/rc.d/init.d/brdb start



启动备份主机的drbd



将qmail 安装到 /var/qmail

并将maillog vpopmail(如果装的话)也移到/var/qmail 原处做个链接



启动主机的qmaild

/etc/rc.d/init.d/qmaild start



启动主机的pulse



/etc/rc.d/init.d/pulse start



启动备份主机的drbd

访问主机的smtp pop服务 查看是否正常(这点很重要)

然后才能启动备份主机的 pules

以上顺序不能弄错



测试
连接qmail测试是否正常工作

使用ifconfig 查看虚拟网卡是否工作



停止 主机的 qmaild服务

/etc/rc.d/init.d/qmaild stop

连接smtp pop 测试是否正常工作



使用 ifconfig 查看备份主机的网卡是否工作



正常的话应该将202.93.204.68绑定到这台主机上了



然后在停止备份主机的qmail服务 202.93.204.68应该被绑回到主机上了



参考文献
http://www.slackworks.com/~dkrovich/DRBD/

http://ha.redhat.com

http://linux-ha.org

http://www.linuxvirtualserver.org
发布于:2008-8-28 已被阅读: 次