rsync 做文件同步

来源:互联网 发布:淘宝虚假代理 编辑:程序博客网 时间:2024/05/16 15:28



rsync 是一个远程同步工具,可以用来备份数据库,或者图片服务器的图片

修改文件内容也会同步

注意:这里设置的账户密码和 系统账户密码没有任何关系,时rsync 账户密码,需要确定开启873端口,默认使用873端口


系统:centos6.4

主服务器IP:192.168.1.136

备份服务器IP:192.168.1.137

一、安装

查看是否安装,没有安装就yum 安装一下

[plain] view plain copy
 print?
  1. rpm -qa | grep rsync  

[plain] view plain copy
 print?
  1. yum install rsync  

二、服务器端配置


为方便统一管理,将rsync 相关文件放在一个文件夹下【 rsyncd 】

[plain] view plain copy
 print?
  1. mkdir /etc/rsyncd  

创建 服务器端 配置文件

[plain] view plain copy
 print?
  1. vim /etc/rsyncd/rsyncd.conf  
内容/参数注释如下

[plain] view plain copy
 print?
  1. # 用户和用户组  
  2. uid = root  
  3. gid = root  
  4.   
  5. # 允许访问的客户机  
  6. hosts allow = 192.168.1.137  
  7. #拒绝访问的  
  8. #hosts deny = 0.0.0.0/32  
  9.   
  10. # 能否切换目录  
  11. use chroot = no  
  12. # 最大链接数  
  13. max connections = 10  
  14.   
  15. # pid文件的存放  
  16. pid file = /etc/rsyncd/rsyncd.pid  
  17. # max connections 参数的锁文件的存放位置  
  18. lock file = /etc/rsyncd/rsync.lock  
  19. # 使 rsync 服务器将传输操作记录到传输日志文件  
  20. transfer logging = true  
  21. log format = "%o %h [%a] %m (%u) %f %l"  
  22. ##########################################################  
  23. #   可以使用的日志格式定义符如下所示:  
  24. #   %a - 远程IP地址  
  25. #   %h - 远程主机名  
  26. #   %l - 文件长度字符数  
  27. #   %p - 该次 rsync 会话的 PID  
  28. #   %o - 操作类型:”send” 或 “recv”  
  29. #   %f - 文件名  
  30. #   %P - 模块路径  
  31. #   %m - 模块名  
  32. #   %t - 当前时间  
  33. #   %u - 认证的用户名(匿名时是 null)  
  34. #   %b - 实际传输的字节数  
  35. #   %c - 当发送文件时,记录该文件的校验码  
  36. ##########################################################  
  37. # 日志记录文件的存放  
  38. log file = /etc/rsyncd/rsyncd.log  
  39. # 欢迎信息  
  40. # motd file = /etc/rsyncd/rsyncd.motd  
  41.   
  42. ## 模块  
  43. # 模块名 自定义  
  44. [rsyncd]  
  45. # 指定文件目录所在位置 [必须]  
  46. path = /home/wwwroot/attachments  
  47. # 注释  
  48. comment = rsync files  
  49. # 指定在 rsync 服务器上运行 delete 操作时是否忽略 I/O 错误。  
  50. # 一般来说 rsync 在出现 I/O 错误时将跳过 –delete 操作,以防止因为暂时的资源不足或其它 I/O 错误导致的严重问题  
  51. ignore errors = true  
  52. # 指定是否允许客户上传文件。若为 true 则不允许上传;若为 false 并且服务器目录也具有读写权限则允许上传  
  53. read only = true   
  54. # 指定当客户请求列出可以使用的模块列表时,该模块是否应该被列出  
  55. list = no   
  56. # 同步验证时用的账号,这里的用户和系统用户没有任何关系。  
  57. # 用户名和口令以明文方式存放在 secrets file 参数指定的文件中  
  58. auth users = rsync   
  59. # 指定认证文件  
  60. secrets file = /etc/rsyncd/rsyncd.secrets  
  61. # 指定是否监测口令文件的权限,若为 true 则口令文件只能被 rsync 服务器运行身份的用户访问,其他任何用户不可以访问该文件  
  62. strict modes = true  

配置文件默认要在 /etc下

[plain] view plain copy
 print?
  1. ln -s /etc/rsyncd/rsyncd.conf /etc/rsyncd.conf  

创建认证文件 格式 验证名:验证密码 一行一个,不必是系统用户

[plain] view plain copy
 print?
  1. vim /etc/rsyncd/rsyncd.secrets  

内容为  账户:密码

[plain] view plain copy
 print?
  1. rsync:rsync123456  

设置认证文件的权限,不然会报错

[plain] view plain copy
 print?
  1. chown root:root /etc/rsyncd/rsyncd.secrets  
  2. chmod 600 /etc/rsyncd/rsyncd.secrets  

打开默认端口 873

[plain] view plain copy
 print?
  1. vim /etc/sysconfig/iptables  

加入

[plain] view plain copy
 print?
  1. -A INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT  

重启生效

[plain] view plain copy
 print?
  1. service iptables restart  

启动 rsync

[plain] view plain copy
 print?
  1. rsync --daemon  

查看是否启动

[plain] view plain copy
 print?
  1. lsof -i:873  

看见这样的信息就是成功启动了

[plain] view plain copy
 print?
  1. COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME  
  2. rsync   17978 root    4u  IPv4  93140      0t0  TCP *:rsync (LISTEN)  
  3. rsync   17978 root    5u  IPv6  93141      0t0  TCP *:rsync (LISTEN)  

三、客户器端配置

按上述步骤安装好rsync

无须启动,直接运行语句 ,会把服务器端的内容更新到本地,如果本地有多的文件,会自动删除

谁执行这个命令,谁就相当于客户端。每台机器配置都一样。

rsync@192.168.1.136::rsyncd 中 ::后面的rsyncd为对方服务器rsyncd.conf 中配置的 

## 模块  # 模块名 自定义  [rsyncd]  


[plain] view plain copy
 print?
  1. rsync -avz --progress --delete rsync@192.168.1.136::rsyncd /home/wwwroot/attachments --password-file=/etc/rsyncd.pwd  

--password-file 指定密码文件,存放密码

rsyncd.pwd 内容为 (只需要密码,此帐号密码和系统账户密码没有关系)


[plain] view plain copy
 print?
  1. rsync123456  

更改rsyncd.pwd 的权限,不然会报错


chmod 600 /etc/rsyncd/rsyncd.secrets 


-a archive mode; equals -rlptgoD,归档模式,相当于-rlptgoD,保证文件的属性,创建时间,用户组等信息

-v 进度信息

-z 压缩传输

--delete 保证客户端和服务器端的数据完全一致,若服务器文件被删除了,客户端也会删除

详细的参数列表执行 rsync -h 查看,一般来说 -avz 和 --delete 就可以满足需求了


四、定时备份/同步

在客户端设置定时执行同步

利用crontab 

若没安装 crontab 执行如下命令安装

[plain] view plain copy
 print?
  1. yum install crontabs  


添加自启动
[plain] view plain copy
 print?
  1. chkconfig crond on  

启动

[plain] view plain copy
 print?
  1. service crond start  
添加定时任务
[plain] view plain copy
 print?
  1. crontab -e  

加入(一分钟执行一次同步)

[plain] view plain copy
 print?
  1. */1 * * * * rsync -avz --progress --delete rsync@192.168.1.136::rsyncd /home/wwwroot/attachments --password-file=/etc/rsyncd.pass  

具体时间根据自己要求更改,比如每天凌晨1点执行一次同步,0 1 * * *

下图是136 和137服务器同步前和同步后的对比

192.168.1.136

192.168.1.137


在137 上执行同步后


images 文件已被删除,t6-6.jpg已同步下来


附:rsync 常用参数的具体解释如下:

-v, --verbose 详细模式输出
-q, --quiet 精简输出模式
-c, --checksum 打开校验开关,强制对文件传输进行校验
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-r, --recursive 对子目录以递归模式处理
-b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。
-suffix=SUFFIX 定义备份文件前缀
-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)
-l, --links 保留软链结
-p, --perms 保持文件权限
-o, --owner 保持文件属主信息
-g, --group 保持文件属组信息
-t, --times 保持文件时间信息
-e, --rsh=COMMAND 指定使用rsh、ssh方式进行数据同步
--delete 删除那些DST中SRC没有的文件
--delete-excluded 同样删除接收端那些被该选项指定排除的文件
--delete-after 传输结束以后再删除
--ignore-errors 及时出现IO错误也进行删除
--force 强制删除目录,即使不为空
--timeout=TIME IP超时时间,单位为秒
--progress 显示备份过程
-z, --compress 对备份的文件在传输时进行压缩处理
--exclude=PATTERN 指定排除不需要传输的文件模式
--include=PATTERN 指定不排除而需要传输的文件模式
--exclude-from=FILE 排除FILE中指定模式的文件
--include-from=FILE 不排除FILE指定模式匹配的文件

原文:http://blog.csdn.net/jam00/article/details/50923671
原创粉丝点击