Rsync 数据自动同步系统

1. Rsync

Rsync命令是一个远程数据同步的工具,可以通过LAN/WAN快速同步多台主机之间的文件。

同时也是一个快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份、保持链接和权限,且采用优化的同步算法,传输前执行压缩。适用于异地备份,镜像服务器。

2. rsync功能

  • 作为命令,实现本地-远程文件同步
  • 作为服务,实现本地-远程文件同步

3. rsync特点

  • 可以镜像保存整个目录树和文件系统

  • 可以保留原有的权限、时间、软硬连接、文件acl、文件属性等信息

  • 传输效率高、使用同步算法、只是比较变化

  • 支持匿名传输、方便网站镜像、也可以做验证,加强安全

4. rsync同类服务

  • Sync同步:刷新文件系统缓存,强制将修改过的数据块写入磁盘,并且更新超级快
  • Async异步:将数据先放到缓冲区,再周期性的同步到磁盘
  • Rsync远程同步:remote synchronous

5. rsync使用

1)本地使用

格式: rsync 选项 复制源 目标位置

2)通过远程 shell使用

  • 拉 :rsync 选项 user@hostIP地址:复制源 目标位置

将远程主机的内容复制到本地主机

  • 推:rsync 选项 复制源 user@hostip地址:目标位置

将本地的内容复制到远程主机目标位置

3)访问rsync服务器

  • 拉 : rsync 选项 user@hostIP地址::共享模块/复制源 目标位置

将远程主机的内容复制到本地主机的目标位置

  • 推 : rsync 选项 复制源 user@hostIP地址::共享模块/目标位置

将本地主机的内容复制到远程主机的目标位置

6. rsync常用选项

-a : 归档模式,以递归方式传输文件,并保持所有属性、时间等,包含 -rtplgoD;

-r : 同步目录是使用,

-v : 同步时显示实时信息(详细信息)

-l : 保留软链接

-L : 同步软链接时会把源文件给同步了

-p : 保持文件的权限属性

-o : 保持文件的属主

-g : 保持文件的属组

-D : 保持设备文件信息

-t : 保持文件的时间属性

--delete:删除目标位置中有而原位置没有的文件

--exclude : 过滤指定文件,例如: --exclude “logs”会把文件名包含logs文件或目录过滤掉,不同步

-p : 显示同步过程,比-v更加详细

-u : 加上该选项后,如果目标文件比复制源的内容新,则不同步

-z : 传输时压缩

7. 配置文件详解

  • 配置文件位于: /etc/rsyncd.conf

全局配置

uid = nobody 				##同步源中创建和修改文件的用户

gid = nobody 				##同步源中创建和修改文件的用户组

use chroot = yes 			##锁定用户目录

max connections = 4 			##发起端的最大连接数,

pid file = /var/run/rsyncd.pid 		##指定rsync进程号管理文件

port 873 							##监听端口号,默认是873

address = 1.1.1.1 					##监听IP地址

log file = /var/log/rsyncd.log 		##指定日志文件

pid file = /var/run/rsyncd.pid 		##指定pid文件

host allow = 1.1.1.0/24 			##指定可以访问rsync服务器的客户机IP地址

dont compress  = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2

\##不需要压缩的文件扩展名

[share] ##共享名称

​    path = /home/ftp 					##源目录的实际路径write only = yes 					 ##是否允许写入 only表示仅仅

	read only = no 							##是否允许只读

	auth users = cjk 						##授权用户

	Secrets file = /etc/rsyncd_users.db		 ##存放账户信息的数据文件

Ps: 如果使用匿名用户进行操作,只需要将 auth users 和 secrets file选项去掉即可

8. 部署 Rsync 服务

  • 系统默认已经安装 Rsync,不需要重新安装
    • 如果没有使用 yum -y install rsync 安装即可

实验环境:

HostIP
Rsync1.1.1.1
Client1.1.1.2

1) 修改配置文件

[root@localhost ~]# vim /etc/rsyncd.conf
 
uid = nobody
gid = nobody
use chroot = yes
max connections = 4
pid file = /var/run/rsyncd.pid
port 873
address = 1.1.1.1
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
# exclude = lost+found/
# transfer logging = yes
# timeout = 900
# ignore nonreadable = yes
# dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
 
[share]
        path = /tmp/www
#       comment = ftp export area
        writable =  yes
        read only = no
        auth users = cjk
        secrets file = /etc/rsyncd_users.db

2) 创建目录

  • 创建一个实验的目录
# 备份用户要对该目录拥有读取权限,所以将权限改为777,为了验证
[root@localhost ~]# mkdir  /tmp/www
[root@localhost ~]# chmod 777 /tmp/www
[root@localhost ~]# ll /tmp | grep www
drwxrwxrwx. 2 root root    6 9月   9 10:22 www

3)为备份用户创建数据文件(用户目录)

  • 根据上一步的设置,创建账号数据文件,添加一行用户记录,以冒号分开,

    因为是明文存放用户和密码,需要调整权限,必须为600

[root@localhost ~]# vim /etc/rsyncd_users.db
cjk:123 		##无需建立同名的系统用户,对应用户名与密码


[root@localhost ~]# chmod 600 /etc/rsyncd_users.db
[root@localhost ~]# ll /etc/rsyncd_users.db
-rw-------. 1 root root 8 9月   9 10:24 /etc/rsyncd_users.db

4)启动rsync服务程序

[root@localhost ~]# rsync --daemon
[root@localhost ~]# netstat -anpt | grep rsync
tcp        0      0 1.1.1.1:873             0.0.0.0:*               LISTEN      61511/rsync   
  • 关闭服务
kill $(cat /var/run/rsync.pid)

5) 编写rsync启动脚本

  • 为了方便的管理rsync服务,所以编写一个脚本

    为了使用systemctl命令进行管理

  [root@localhost ~]# vim /etc/rc.d/init.d/rsyncd
 
#! /bin/bash
#chkconfig:35 25 23
case $1 in
start)
rsync --daemon
;;
stop)
kill $(cat /var/run/rsyncd.pid)
;;
restart)
kill $(cat /var/run/rsyncd.pid)
rsync --daemon
 
;;
*)
        echo "(start / stop  / restart )"
esac
  • 添加至系统管理服务
[root@localhost ~]# chkconfig --add rsyncd
  • 使用 systemctl 进行管理
[root@localhost ~]# netstat -anpt | grep rsync
tcp        0      0 1.1.1.1:873             0.0.0.0:*               LISTEN      61857/rsync  

6) 同步数据

  • Client 创建同步的目录
[root@localhost ~]# mkdir /aaa
  • Client 向上同步文件(上传)
[root@localhost ~]# rsync -avz /etc/passwd cjk@1.1.1.1::share
Password:
sending incremental file list
发送增量文件列表
passwd
rsync: chgrp "/.passwd.yQMm4Q" (in share) failed: Operation not permitted (1)
 
sent 958 bytes  received 117 bytes  716.67 bytes/sec
total size is 2,231  speedup is 2.08
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]
  • 将 Rsync 数据向下同步
[root@localhost ~]# rsync -avz cjk@1.1.1.1::share/passwd /aaa/
Password:
receiving incremental file list
passwd
 
sent 43 bytes  received 959 bytes  400.80 bytes/sec
total size is 2,231  speedup is 2.23
##将服务器的passwd文件向下同步;针对于单个文件

  • rsync -avz cjk@1.1.1.1::share /aaa/ ##默认向下传输所有

  • 其余选项同步时,要注意,只有两端都有的属主属组太能够保持原有的属性

7) 同步链接文件
  • 创建软连接文件

    [root@localhost test1]# ln -s /etc/init.d/network /test1/network
    
  • 如果使用 之前的命令,则无法同步链接文件

    [root@localhost test1]# rsync -rv /test1/* root@1.1.1.102:/test2
    
  • B 主机查看(没有同步 链接文件)

    [root@localhost test2]# ls
    
    e  f  g  q  s  sf  w
    
  • 使用 选项 -l 同步链接文件

    [root@localhost test1]# rsync -lv /test1/* root@1.1.1.102:/test2
    
  • 这个时候 再 去 B 主机目录查看

[root@localhost test2]# ls

e  f  g  network  q  s  sf  w
8) 选项 -L 的使用
  • 我们会在以下实验中发现, 使用 -L 将链接文件同步过去之后不再 是链接文件而是 链接文件的源文件
[root@localhost test1]# ln -s /etc/init.d/network /test1/network
[root@localhost test1]# ll
lrwxrwxrwx 1 root root 19 2月   8 22:58 network -> /etc/init.d/network
  • 推, 向下同步

    [root@localhost test1]# rsync -aLv /test1/network root@1.1.1.102:/test2/
    
  • 在 主机 B 中 查看

    [root@localhost test2]# ll
    
    总用量 8
    
    -rwxr-xr-x. 1 root root 7293 1月   3 2018 network
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值