假设邮件服务器已经搭建完毕(参考:企业级开源邮件系统搭建的全过程 http://www.linuxidc.com/Linux/2012-06/62285.htm),另一个问题来了,如何保证服务器的安全性及高可用?同步?Rsync?一个很好的同步软件,今天就分享下如何利用Rsync实现EMOS的双机热备,说的双机热备,其实不然,原则上还是冷备。因为当主服务器down了,需要手动切换下,这个其实无所谓,因为服务器嘛,都会做监控报警的,当有报警时,立即更换备服务器的ip即可继续提供服务了。


要想真正意义上实现双机热备,提供思路:


1、首先搭建一台一样的邮件服务器,利用rsync+inotify实现/home目录的实时同步(保证邮件的安全)

2、利用keepalived实现两台mysql双机热备(保证帐号及别名的安全)

3、前台做lvs调度器,来实现负载均衡


好了,言归正传~开始实现把。。


假设我们邮件服务器主机名为mail (192.168.0.1),备份主机名为mailbak(192.168.0.2),则需要做的工作如下:

默认情况Ubuntu安装了rsync服务,但在/etc下没有配置文件,一般情况可以copy示例文件到/etc下

#cp /usr/share/doc/rsync/examples/rsyncd.conf /etc

1. 在两台服务器上分别装上rsync(yum -y install rsync),再一个就是确保提供邮件服务功能;

2. 在主机192.168.0.1上配置rsync服务(服务包系统已经自带,只需配置两个文件 rsyncd.conf 和 rsyncd.secrets 即可(需要在/etc/下手工创建))

#vim /etc/rsyncd.conf

uid = root  //如果是Ubuntu,则必须为root,不能为nobody,否则会提示一些目录无法传输,没有权限

gid = root  //同上

use chroot = no

max connections = 4

strict modes =yes

port = 873

[mailbak-update-mysql-extmail]

path = /var/lib/mysql/

comment = This is a test

ignore errors

read only = no

list = no

auth users = test  //如果没有auth users和secrets file 两个记录,则客户端不用密码文件直接可以传输(rsync -vzrtopg --progress export@192.168.1.250::home /home/vmail)

secrets file = /etc/rsyncd.secrets

hosts allow = 192.168.0.2

[home]   //模块名

path = /home/vmail

comment = This is a test

ignore errors

read only = no

list = no

auth users = test  //客户端同步使用的用户名

secrets file = /etc/rsyncd.secrets   //客户端和服务器端使用的密码、路径、密码文件名,要一致

hosts allow = 192.168.0.2

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /var/log/rsyncd.log


上述文件的作用是将备份服务器本地的/home/vmail目录及/var/lib/mysql/extmail/目录作为同步操作的对象供邮件主服务器实时写入更新的资料


#vim rsyncd.secrets

root:123456                 #认证信息,随意即可,但两端要保持一致

密码文件权限为:600


3. 在邮件备份服务器上将服务开启:

/usr/bin/rsync --daemon

service rsync restart(centos)

sudo /etc/init.d/rsync restart(ubuntu)


这样,主服务器上的工作完成,然后我们登陆到邮件备份服务器192.168.0.2上来操作(0.1服务器---->0.2服务器):

1. 创建一个同步数据的脚本/root/rsync-to-mailbak.sh内容如下(两行):

rsync -rlptgoDvHS --progress --delete --force --password-file=/etc/rsyncd.secrets /home/ root@192.168.0.1::mailbak-update-home

rsync -rlptgoDvHS --progress --delete --force --password-file=/etc/rsyncd.secrets /var/lib/mysql/ root@192.168.0.1::mailbak-update-mysql-extmail


2. 将这个新建的脚本权限变为可执行744或755:

chmod 744 /root/rsync-to-mailbak.sh


3. 在主服务器上手工创建密码文件/etc/rsyncd.secrets,使其内容和备份服务器上的密码一致。


文件权限:600


vim /etc/rsyncd.secrets    //与主服务器配置文件中(secrets file = /etc/rsyncd.secrets)定义的路径和文件名一致。

123456

现在可以试运行一下这个脚本看看效果了,如果是第一次,正常情况你会看到很多数据在拷贝。第二次则很少了,因为所做的是差异对比同步,相同的文件不会再次拷贝。

在0.2上测试:

/usr/bin/rsync -vzrtopg --progress --delete --password-file=/etc/rsyncd.secrets test@192.168.0.1::home  /home/vmail   //test—主服务器配置文件中定义的用户;192.168.0.1—主服务器ip地址;::—后面指定模块名称,在主服务器配置文件中说明;/home/vmail—要同步到本地的目录。

4. 将这个脚本放到计划任务中,设定每5分钟执行一次:

crontab -e

添加一行命令如下:

0,5 * * * * /root/rsync-to-mailbak.sh

保存,退出即可立即生效。

现在如果你的邮件主服务器192.168.0.1突然发生硬件故障当机,所需要做的只是立即将备份主机的IP地址192.168.0.2改为主服务器192.168.0.1后运行一下/sbin/service network restart或重新启动一下即可,用户丢失的信件仅仅是在最近5分钟内的内容(<=5分钟)。


原文地址:http://www.linuxidc.com/Linux/2012-06/62286.htm

注意:

1、Ubuntu系统需要开启端口,否则客户端连接时会报错time out

rsync默认端口号是:873

在主服务器(rsync服务器)上开启端口:sudo ufw allow 873

redhat下iptables开启端口

iptables -A INPUT -p tcp -m state --state NEW  -m tcp --dport 873 -j ACCEPT

*********************************

主服务器配置文件模板:

  1. uid = root

  2. gid = root

  3. use chroot = no

  4. max connections = 4

  5. pid file = /var/run/rsyncd.pid

  6. lock file = /var/run/rsyncd.lock

  7. log file = /var/log/rsyncd.log

  8. [home]

  9. path = /home/vmail

  10. ignore errors

  11. read only = true

  12. list = false

  13. hosts allow = 192.168.10.247

  14. auth users = root

  15. secrets file = /etc/rsyncd.secrets