一、什么是rsync

  rsync,remote synchronize顾名思意就知道它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限、时间、软硬链接等附加信息。 rsync是用 “rsync 算法”提供了一个客户机和远程文件服务器的文件同步的快速方法,而且可以通过ssh方式来传输文件,这样其保密性也非常好,另外它还是免费的软件。

  rsync 包括如下的一些特性:

  能更新整个目录和树和文件系统;
  有选择性的保持符号链链、硬链接、文件属于、权限、设备以及时间等;
  对于安装来说,无任何特殊权限要求;
  对于多个文件来说,内部流水线减少文件等待的延时;
  能用rsh、ssh 或直接端口做为传输入端口;
  支持匿名rsync 同步文件,是理想的镜像工具;

 rsync实现网站的备份,文件的同步,不同系统的文件的同步,如果是windows的话,需要windows版本cwrsync 

二、rsync工作方式

    1.本地数据传输,类似cp命令

            rsync [option] src dest

            命令介绍: rsync [同步时的参数选项 ]  [待拷贝的文件,目录,分区等] [目的文件,目录,分区等]

    2.rcp,ssh等通道传输

            rsync [option]   'ssh -p port '  user@host:src  dest  #把远程主机数据拉取到本地

            rsync [option]      'ssh -p port ' dest  user@host:src   #将本地数据推送到远程服务器

           例: rsync -vzrtop --progress -e 'ssh -p 22' /tmp user1@192.168.1.100:/data

    3. 以守护进程的方式传输

        1)拉取: 

                rsync [option]     user@host::src     dest

                rsync [option]     rsync://user@host:port/src      dest

         2)推送:

                rsync [option]     src     user@host::dest

                rsync [option]     src     rsync://user@host:port/dest



*******************现在以守护进程的方式正式部署rsync服务端 *****************************

服务端的IP地址为: 192.168.1.104

1.配置rsyncd.conf

  该配置默认是没有的,因此需要我们手动的去创建。rsyncd.conf是rsync服务的默认配置文件

 

 [root@rsync ~]# vi /etc/rsyncd.conf
    #添加以下配置内容    
    #rsync config file
    uid=root
    gid=root
    max connections=200
    use chroot=no
    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=192.168.1.10/24
        hosts deny=0.0.0.0/32
        auth users=rsyncUser
        secrets file=/etc/rsync.password
    [data]
    path=/data/
    
    #详细参数介绍请参见本文最后
    #如果需要多个目录进行数据同步的操作,则可以直接添加一个模块即可
    [backup]
    path =/backup


2.模块目录的创建

       根据上面配置中path=/data/目录,首页确定当前根目录下是否存在data目录,如果不存在,则手动创建,并查看当前目录的权限是否为第1步配置文件中uid对应的用户具有可读写权限,不然的话,数据是无法进行读写操作的。

[root@rsync data]# mkdir /data
[root@rsync data]# ls -ld /data
drwxr-xr-x 2 root root 4096 Nov  7 13:32 /data


3.配置密码文件

 需要将第1步配置中,secrets file=/etc/rsync.password 的密码文件生成出来。

[root@rsync ~]# echo 'rsyncUser:123456' >/etc/rsync.password
#rsyncUser 是auth users=rsyncUser已经配置好的帐号,123456为密码

#将/etc/rsync.password文件的权限设置为600
[root@rsync ~]# ll /etc/rsync.password 
-rw------- 1 root root 17 Nov  7 13:39 /etc/rsync.password



4.启动rsync服务

[root@rsync ~]# rsync --daemon 
#--daemon 表示以守护进程的方式启动服务
#--address 绑定IP地址提供服务
#--config 更改配置文件的路径,而不是默认的/etc/rsyncd.conf
#--port 更改其他的端口提供服务,而不是缺省的873端口

5.设置rsync服务开机自启动

[root@rsync ~]# echo '/usr/bin/rsync --daemon' >>/etc/rc.local

###关于重启rsync的组合操作命令

[root@rsync ~]# pkill rsync #关闭rsync服务

[root@rsync ~]# rsync --daemon #启动rsync服务

[root@rsync ~]# ps -ef | grep rsync|grep -v grep #检查rsync是否启动成功

root      2169     1  0 13:53 ?        00:00:00 rsync --daemon


*******************现在以守护进程的方式正式部署rsync客户端 *****************************

客户端的IP地址为: 192.168.1.107
[root@rsync-client ~]# echo '123456' >/etc/rsync.password #在客户端只需要配置密码即可,密码是服务端/etc/rsync.password指定用户对应的密码
[root@rsync-client ~]# cat /etc/rsync.password 
123456
[root@rsync-client ~]# ll /etc/rsync.password #检查/etc/rsync.password文件的权限,设置为600
-rw-r--r-- 1 root root 7 Nov  7 13:59 /etc/rsync.password
[root@rsync-client ~]# chmod 600 /etc/rsync.password 
[root@rsync-client ~]# ll /etc/rsync.password 
-rw------- 1 root root 7 Nov  7 13:59 /etc/rsync.password

至此,客户端配置成功:)


*******************测试数据同步之推送数据与拉取数据 *****************************

1) 将客户端/tmp/www目录推送到服务端

[root@rsync-client ~]# rsync -avz -P /tmp/www rsyncUser@192.168.1.104::data --password-file=/etc/rsync.password 
sending incremental file list
www/
www/index.html
           0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=0/2)
sent 92 bytes  received 31 bytes  246.00 bytes/sec
total size is 0  speedup is 0.00

 2) 检查服务端是否有客户端推送过来的www整个目录数据

[root@rsync ~]# tree /data

/data

└── www

    └── index.html


客户端推送成功:)


2)将服务端的/data数据拉取到客户端 

#在服务端/data目录下创建一个testdir测试目录
[root@rsync data]# mkdir testdir
[root@rsync data]# ls
testdir  www
#在客户端进行拉取数据操作
[root@rsync-client www]# rsync -avz -P  rsyncUser@192.168.1.104::data /tmp/www --password-file=/etc/rsync.password 
receiving incremental file list
./
testdir/
www/
www/about.html
           0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=1/5)
www/index.html
           0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=0/5)
sent 108 bytes  received 262 bytes  740.00 bytes/sec
total size is 0  speedup is 0.00
[root@rsync-client www]# ls
testdir  www


此时testdir目录也被同步在客户端了。。。


*******************rsync中推送数据时--delete参数的使用*****************************

 如果我们在执行 rsync -avz -P --delete rsyncUser@192.168.1.104::data /tmp/www --password-file=/etc/rsync.password命令的时候,加上--delete会是什么结果呢?


首页我们把www测试目录里的数据清空,然后执行:

[root@rsync-client www]# rsync -zva -P --delete /tmp/www rsyncUser@192.168.1.104::data/ --password-file=/etc/rsync.password 
#查看服务端的/data/www/目录下:
[root@rsync www]# ll
total 0

数据也被清空了,跟客户端的一样。。这是什么情况造成的?

这个主要是--delete参数的作用,它可以使本地的目录和rsync服务端的目录实现完全的同步,也就是说,本地有什么数据远端就有什么数据,本地没有什么数据,远端就必须删除。以确保两者间数据完全一致性。加上该参数会使远端丢失数据的现象,因此这个参数需要谨慎使用。

同样的,在拉取远端数据时加上了--delete参数,即远端有什么数据客户端就会有什么数据,远端没有的数据,在客户端就必须要删除这些数据。如果本地的目录是根目录,那么删除了根目录下的其他目录与文件可就非常危险了。。。





 配置文件的参数介绍Rsyn部署实现数据同步备份_Rsyn部署实现数据同步备份Rsyn部署实现数据同步备份_Rsyn部署实现数据同步备份_02