假设邮件服务器已经搭建完毕(参考:企业级开源邮件系统搭建的全过程 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
*********************************
主服务器配置文件模板:
uid = root
gid = root
use chroot = no
max connections = 4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
[home]
path = /home/vmail
ignore errors
read only = true
list = false
hosts allow = 192.168.10.247
auth users = root
secrets file = /etc/rsyncd.secrets