Mail Server高可用解决方案

当我们在企业中都会需要建立自己的邮件系统,建好以后,安全性成了管理员必须考虑的问题,本篇博文志在解决这个问题。

我们需要实现的效果就是服务器为一主一备,当master宕机后,slave自动接管,继续为用户提供服务。

本文以开源团队开发的EMOS微型邮件系统为例:

首先上图:

Mail Server高可用解决方案

大概解释下:

1.用keepalived来做健康检查,再用脚本的形式来检测我们需要的服务器状态,一旦宕机,备机自动接管vip

2.用rsync来做数据同步,大概可以5分钟一次,本来想用rsync+inotify做实时同步的,但考虑到数据变动频率较大,容易丢失数据,故只采用rsync来做。

具体部署:

第一部分:高可用keepalived

1.首先安装keepalived并配置:

#wget   #tar -zxf keepalived-1.2.2.tar.gz  #cd keepalived  #./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.18-308.8.2.el5-x86_64/  #make && make install 

2.贴出配置文件并有相应注释:

! Configuration File for keepalived   global_defs {     notification_email {          test@sina.com                       #设置邮件报警地址,可以设置多个,每行一个     }     notification_email_from root@localhost   #设置邮件的发送地址     smtp_server 127.0.0.1                    #邮件发送的服务器ip     smtp_connect_timeout 30                  #设置连接smtp server的超时时间     router_id Mail1                          #表示运行keepalived服务器的一个标示,发邮件时显示在邮件主题中的信息  }   vrrp_instance VI_1 {                        #定义vrrp实例      state MASTER                            #类型为主服务器      interface eth0                          #指定HA检测网络的端口      virtual_router_id 50                    #虚拟路由表示,这个表示是一个数字,同一个vrrp实例使用唯一的标示      priority 100                            #定义优先级,数字越大,优先级越大,在同一个vrrp里,MASTER的优先级必须高于SLAVE      advert_int 1                            #设定MASTER和SLAVE服务器之间的健康检查的时间间隔,单位是秒      authentication {          auth_type PASS                      #设定验证类型,主要有PASS和AH两种          auth_pass 1111                      #设置密码,在同一个vrrp里,MASTER和SLAVE必须使用相同的密码才能正常通信      }      virtual_ipaddress {          192.168.1.100                       #设置虚拟ip(VIP)      }  }   virtual_server 192.168.1.100 80 {           #虚拟服务器地址(VIP)、端口      delay_loop 6                            #健康检查的间隔时间(秒),每隔 6 秒查询 realserver状态      lb_algo rr                              #lvs 调度算法,这里使用轮询      lb_kind DR                              #lvs 负载均衡机制,这里使用直连路由      persistence_timeout 60                  #同一 IP 的连接 60 秒内被分配到同一台 realserver      protocol TCP                            #用 TCP 协议检查 realserver 状态       real_server 192.168.1.1 80 {            #第一个web节点的地址以及端口          weight 1                            #节点的权重          TCP_CHECK {                         #健康检查的方式              connect_port 80                 #检查的目标端口              connect_timeout 3               #故障重试秒数(即连接超时)              nb_get_retry 3                  #重试延迟(即重试次数)              delay_before_retry 4            #重试间隔(秒)          }      }      real_server 192.168.1.2 80 {            #同上!          weight 1          TCP_CHECK {              connect_port 80              connect_timeout 3              nb_get_retry 3              delay_before_retry 4          }      }  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/038ec04bdb50175550da07958063fb9e.html