pl1*_*1nk 5 email-server synchronization copying
场景如下:
复制,然后通过网络(仅)从实时邮件服务器同步到另一台服务器。
邮件服务器是实时的,这意味着许多文件(邮件)正在被更改、删除和创建。我试过 rsync 但它非常慢,一段时间后我得到:
警告:一些文件在 main.c(1040) [sender=3.0.5] 传输之前就消失了(代码 24)
由于服务器处于活动状态,我不希望显着增加服务器上的负载。
哪个是最好的选择,最好是每种方法的优缺点。
重要事实:
更新
目的:迁移到新服务器
预计到达时间:尽快
更新 2
服务器限制: 实时邮件服务器在旧的软件和硬件中运行,我不会冒险在那里安装任何东西。
更新 3
我更喜欢开源解决方案。
这个食谱对我来说效果很好:
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 分钟,具体取决于服务器的负载。