1. 关于rsync

rsync是常用的一个文件同步备份软件。该软件不仅在Linux上可以部署使用,同样在windows系统中也可安装。
本文主要是举一个最基本的部署例子,适用于没接触过的朋友,急于寻找一款用于同步备份的软件。
大概也普及以下rsync的作用:

  • rsync可以当做cp命令,用于本地文件的备份:
[root@backup ~]# rsync /etc/hosts /tmp/
[root@backup ~]# ll /tmp/hosts
-rw-r--r-- 1 root root 349 Nov 26 17:03 /tmp/hosts
  • 同样可以当做scp命令,用于局域网内文件的备份同步:
[root@backup ~]# rsync /etc/hosts 172.16.1.31:/tmp/
root@172.16.1.31's password:
  • 另外,在删除大量文件或单一大文件时也可以使用:
[root@backup tmp]# mkdir /null
[root@backup tmp]# rsync -avz --delete /null/ /tmp/oldboy_dir/
  • 最后,为凑个数,还能当ls命令来用:
[root@backup tmp]# rsync /tmp/

2. 部署前需要知道的

  • rsync适用于数据量不是特别大的环境。
  • rsync可以实现全量备份和增量备份。
  • 默认使用的端口是tcp 873,所以如果网络管理严格的话,需要放行一下。
  • 推荐部署的是通过守护进程来启动,所以下文也是介绍这种方式。
  • 远程备份同步有Pull和Push两种方式,推荐从客户端Push到服务端的方式。

3. 部署步骤

A)服务端的部署
step1.先确认一下服务器上有没有安装吧。。。

[root@backup ~]# rpm -qa|grep rsync
rsync-3.0.6-12.el6.x86_64

显然已经安装了,没有的话就yum。
step2.编写rsync配置文件
这个文件原本是不存在,需要自己创建一下。
vim /etc/rsyncd.conf以下是配置文件内容,可以直接拷贝:

uid = rsync                                                      #进程使用的用户名
gid = rsync                                                      #进程使用的组名
use chroot = no                         
max connections = 200                               #最大连接数
timeout = 300                                                  #超时断开时间(秒)
pid file = /var/run/rsyncd.pid                  #进程号文件
lock file = /var/run/rsync.lock                 #锁文件
log file = /var/log/rsyncd.log                  #运行日志文件
ignore errors                                                   #忽略错误
read only = false                                           #是否只读,建议不要开
list = false                                                      #是否支持列表显示
hosts allow = 172.16.1.0/24                  #允许连接的白名单
hosts deny = 0.0.0.0/32                             #禁止连接的黑名单,建议只开白名单,这行注释掉
auth users = rsync_backup                       #认证用户名,连接的时候用
secrets file = /etc/rsync.password     #连接使用的密码,写在那个文件里了
[bak_pics]                                                       #以下两个是模块的信息,用来分别备份不同内容
comment = "backup pics"                         #这只是一个备注
path = /bak_pics                                           #备份的服务端路径
[bak_codes]
comment = "backup codes"
path = /bak_codes

step3.创建rsync服务管理用户

[root@backup ~]# useradd rsync -s /sbin/nologin -M

step4.创建备份目录并修改目录权限

[root@backup ~]# mkdir /bak_pics
[root@backup ~]# chown rsync:rsync /bak_pics

step5.创建rsync用户认证文件

echo "rsync_backup:P@ssw0rd" >/etc/rsync.password
chmod 600 /etc/rsync.password

文件里的内容很简单,rsync_backup就是配置文件里的那个认证用户名,冒号后面的就是密码了。
step6.以守护进程的方式启动rsync服务

[root@backup tmp]# rsync --daemon
[root@backup tmp]# netstat -lntup|grep rsync
tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      1593/rsync

B)客户端部署
step1.创建认证文件
echo 'P@ssw0rd' >> /etc/rsync.password
chmod 600 /etc/rsync.password
step2.进行客户端免交互传输数据测试
rsync -avz /etc/hosts rsync_backup@172.16.1.2::bak_pics --password-file=/etc/rsync.password

这就都部署完了,剩下的就是善后优化工作。这些另写一篇吧,已经12点了,准备睡觉。

几点注意的地方

  1. 关于使用的命令格式
    对于本文的部署方式,其实使用时有两种命令格式:
    rsync [OPTION...] SRC... [USER@]HOST::DEST
    rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
    !!!要注意一下,这点切记
    如果SRC路径最后有/,比如/tmp/只会拷贝/tmp下的内容,而tmp这个目录不会跟着一起过去;
    如果SRC路径最后没有/,比如/tmp,则会连同tmp这个目录本身一起拷贝过去。
  2. 关于守护进程方式
    有些文章中提到了使用xinetd这种超级守护进程的方式管理。个人并不推荐,有兴趣的可以研究下。
  3. 关于实际应用
    一般应用的时候,要不就是配合定时任务使用,实现定期的同步;要不就是配合inotify或者sersync,实现实时同步。
    另外,还有个排除的参数--exclude 和 --exclude-from值得使用(类似tar命令的排除)
  4. 关于清空文件的问题
    为了避免不必要的麻烦,请操作谨慎再谨慎!!!尤其是在使用--delete命令来进行完全同步的时候。
    (就是想要实现客户端删了文件,服务端内也同步删除文件那种)
    因为,如果搞错了,可能会用空目录覆盖了一个还有用的目录,导致文件全部丢失。
  5. 推荐多看man手册,里面的具体操作命令比较全。

真的睡了。话说,我觉着这个文件编辑器不是很好用啊,排版上有些不智能。