通过网络从实时服务器复制/同步电子邮件

pl1*_*1nk 5 email-server synchronization copying

场景如下:

复制,然后通过网络(仅)从实时邮件服务器同步到另一台服务器。

邮件服务器是实时的,这意味着许多文件(邮件)正在被更改、删除和创建。我试过 rsync 但它非常慢,一段时间后我得到:

警告:一些文件在 main.c(1040) [sender=3.0.5] 传输之前就消失了(代码 24)

由于服务器处于活动状态,我不希望显着增加服务器上的负载。

哪个是最好的选择,最好是每种方法的优缺点。

重要事实:

  • 1500 万个电子邮件文件(大部分是小文件)
  • 1,45 TB 数据

更新

目的:迁移到新服务器

预计到达时间:尽快

更新 2

服务器限制: 实时邮件服务器在旧的软件和硬件中运行,我不会冒险在那里安装任何东西。

更新 3

我更喜欢开源解决方案。

pl1*_*1nk 0

这个食谱对我来说效果很好:

1.复制第一组文件示例:

tar c dir/* |gzip - | ssh user@host 'cd /dir/ && tar xz'
Run Code Online (Sandbox Code Playgroud)

在 gzip 中,您可以有不同的压缩级别,其中 -1 表示最快的压缩方法(较少压缩),-9 或 --best 表示最慢的压缩方法(最佳压缩)。默认压缩级别为-6(即偏向于高压缩,但会牺牲速度)。- gzip手册页。

2.使用rsync守护进程

复制数据后,rsync 作业更容易,并且通过使用 rsync 守护进程(假设您处于受控环境中,因为数据未加密),总体性能要好得多。

由于我必须处理大量小文件,因此我禁用了 rsync 压缩,因此在不压缩的情况下,进程速度提高了约 40%。

3. 每 x 小时创建一个 cronjob,以便在远程服务器上始终更新版本。

0 */03 * * * flock -n /Any_Dir/rsync.lock -c "nice -n 19 rsync --password-file=/rsync.passwd --delete-during -ra /source_dir/ user@rsync_server::ModuleName > /var/log rsync_cgp.log" 2>&1
Run Code Online (Sandbox Code Playgroud)

在我的示例中,我每 3 小时启动一个 rsync 进程,使用集群创建一个锁定文件,并注意如果第一个 rsync cronjob 未完成,则不会启动第二个 rsync cronjob。另外,由于我不想破坏服务器,因此我将 rsync 的调度优先级修改为 19 - 最不有利。最后,我重定向 rsync 输出并覆盖日志文件(以保持较小的大小)。注意:在 rsync 中使用 -v 可能会导致巨大的日志文件。

每个 rsync 进程持续时间大约需要 16-30 分钟,具体取决于服务器的负载。