EMOS 1.5 利用sersync2.5 beta1 进行热备份
在Extmail的论坛上有大大小小一堆的备份脚本和方法,有人用压缩整个邮件目录然后归档,有人按照时间进行压缩归档,有的用rsync定时同步目录。
之前有留意过新核心上可以使用inotify这模块来记录一些文件改变的状态,更加有外国友人写了inotify-tools
来触发脚本。这种备份方式的确节省管理成本、配置比较容易相比起使用DRBD+HA的方法。
为什么要使用sersync2.4进行热备份呢?
大家到这里先看看作者johntech的介绍 code.google.com/p/sersync/
废话不多说了,现在马上开始。
先准备了两台机器安装上EMOS 1.5 x86_64 [i386 可以按照本方案实现的]
hostname R1 Private IP 192.168.1.122
hostname R2 Private IP 192.168.1.123
1. 同步MySQL 数据库 [如果你只是需要备份用户邮箱数据跳过这一步,我练功而已]
R1 设定数据库配置档 my.cnf
server-id=1
log-bin=mysql-bin
然后添加用户
MYSQL>grant all privileges on *.* to mysql_rsync@'%' identified by '123456#';
记得需要MySQL网络端口3306进行同步通信.
R2 设定数据库配置档 my.cnf
server-id = 2
relay-log = s2-relay-bin
master-host = 192.168.1.122
master-user = mysql_rsync
master-password = 123456#
查看日志看看是否同步成功
100418 8:16:33 [Note] Slave SQL thread initialized, starting replication in log 'FIRST' at position 0, relay log './s2-relay-bin.000001' position: 98
100418 8:16:33 [Note] Slave I/O thread: connected to master 'mysql_rsync@192.168.1.122:3306', replication started in log 'FIRST' at position 4
这里看官会想为何不用sersync同步数据呢?是这样的Mysql的数据不是立即写入MYD/MYI文件内的,所以使用sersync是不可能同步数据的。
2. 使用sersync同步邮箱数据
R1 是数据源 R2 是备份源
R1 与 R2 安装 rsync-3.0.7-1.el5.rf.x86_64.rpm
R2 备份源 设定同步目录
# vi /etc/rsyncd.conf
max connections=36000
uid = root
gid = root
[domains]
path = /home/domains
read only = no
hosts allow = 192.168.1.0/24
hosts deny = *
*注 目前sersync2.4对于rsync用户认证有 -r 参数 bug,所以不采用认证。
如果用认证方式是以下的配置
max connections=36000
uid = root
gid = root
[domains]
path = /home/domains
auth users = domains
secrets file = /etc/rsync.secrets
read only = no
# chmod 600 /etc/rsync.secrets
# vi /etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp -s 192.168.1.0/24 --dport 873 -j ACCEPT
R1 数据源
# vi /etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp -s 192.168.1.0/24 --dport 873 -j ACCEPT# echo '123456#' >> /etc/rsync.pas
# mkdir /usr/local/sersync2.5b1/
# 下载 code.google.com/p/sersync/downloads/list
然后解压
看见 2个文件
配置档案 confxml.xml
启动档案 sersync2
第一步复制配置档
# cp -a confxml.xml domains.xml
修改内容
<?xml version="1.0" encoding="ISO-8859-1"?><head version="2.4">
<host hostip="192.168.1.122" port="8008"></host> R1 数据源服务器
<filter start="false"> 可以指定那些文件不同步
<exclude expression="(.*)\.gz"></exclude>
<exclude expression="^info/*"></exclude>
</filter>
<inotify>
<delete start="true"/>
</inotify>
<sersync>
<localpath watch="/home/domains" debug="false">
<remote ip="192.168.1.123" name="domains"/> R2 备份服务器,可以多个备份副本.
</localpath>
<rsync>
<auth start="true" users="domains" passwordfile="/etc/rsync.pas"/> 开启认证方式
</rsync>
<crontab start="false" schedule="600">
<crontabfilter start="false">
<exclude expression="*.php"></exclude>
<exclude expression="info/*"></exclude>
</crontabfilter>
</crontab>
<plugin start="false" name="refreshCDN"/>
</sersync>
<plugin name="refreshCDN">
<localpath watch="/data0/htdocs/cms.xoyo.com/site/">
<cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>
<sendurl base="http://pic.xoyo.com/cms"/>
<regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/>
</localpath>
</plugin>
<plugin name="socket">
<localpath watch="/opt/tongbu">
<deshost ip="192.168.138.20" port="8009"/>
</localpath>
</plugin>
</head>
启动服务
./sersync2 -d -r -n 4 -o ./domains.xml
* 如果服务器是8核开启 -n 20 ,如果像我这台牛机服务器当然是 -n 4 因为sersync 十分吃cpu负载。
测试
建立了 1万用户,每个用户邮箱大小为1GB。然后向R1 服务器不停掉10MB - 1MB 随机邮件
最后发现机器实在太难了,测试没有结果。
但一些可以预知的东西,sersync 占用CPU资源十分高,管理员需要考虑pop3 收取信件 与 SMTP 发送信件的密度来判断使用sersync是否应付到数据频密的改变。