Rsync: 是一款开源的,快速的,多功能的,可实现全量及增量备份的本地或远程的数据同步备份的工具。

一. rsync 的特点:

  1. 支持拷贝特殊文件:如 连接文件,设备等。
  2. 可以有排除指定文件或目录的功能,相当于打包命令tar 的排除功能
  3. 可以做到保持原文件或目录的权限,时间,软硬连接,属主,属组等所有属性均不改变。
  4. 可实现增量同步,,即只同步变化的根据因此数据传输使用效率很高
  5. 可以rcp ,rsh,ssh等方式来配合传输文件(rsync本身不对数据加密)
  6. 支持匿名或认证(无需系统用户)的进程模式传输,可实现方便安全的进行数据备份及镜像。

二. rsync 的工作方式:

  1. 作为客户端命令
    拷贝文件或目录,相当于cp
    参数:
    -v 显示详细信息
    -z传输时进行压缩
    -r 递归模式
    -t 保持文件的时间信息
    -o:保持文件的属性信息
    -g:属组信息
    -p:保持文件的权限

例子:
rsync 服务  总结

  1. rsync结合ssh进行数据同步
    例子:
    rsync 服务 总结_第1张图片

  2. rsync服务的部署:
    rsync daemon (守护进程方式)

1)环境检查:
[root@backup ~]# cat /etc/centos-release ###查看系统版本
CentOS release 6.6 (Final)
[root@backup ~]# uname -m #查看版本信息
x86_64
[root@backup ~]# uname -r ###查看内核版本
2.6.32-504.el6.x86_64
[root@backup ~]# rsync --version ####查看rsync版本信息
rsync version 3.0.6 protocol version 30
[root@backup ~]# rpm -qa rsync ###查看rsync 安装包
rsync-3.0.6-12.el6.x86_64

服务器端配置:
第一步:生成rsyncd.conf配置文件:
配置文件参数说明:
#rsync_config__start
#created by danny 17:01 20181011
#QQ 1596023034 youxiang:[email protected]
##rsyncd.conf start##
uid = rsync #用户 远端的命令使用rsync访问共享目录
gid = rsync #用户组gid
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 #日志文件
[backup] #模块
path = /backup #服务器端提供访问的目录 (共享的目录)
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 #虚拟用户的账号密码文件
#rsync_config_____end

第二步 :
[root@backup ~]# useradd rsync -s /sbin/nologin -M ###添加用户
[root@backup ~]# tail -1 /etc/passwd ####查看
rsync:x:502:502::/home/rsync:/sbin/nologin

[root@backup ~]# mkdir /backup ####创建共享目录

[root@backup ~]# chown -R rsync.rsync /backup/ ####授权目录
[root@backup ~]# ls -ld /backup/
drwxr-xr-x 2 rsync rsync 4096 Aug 21 12:53 /backup/
[root@backup ~]# rsync --daemon ###开启rsync服务并检查
[root@backup ~]# ps -ef |grep rsync |grep -v grep
root 1626 1523 0 12:20 pts/0 00:00:00 vim /etc/rsyncd.conf
root 1641 1523 0 12:24 pts/0 00:00:00 vim /etc/rsyncd.conf
root 1747 1 0 12:52 ? 00:00:00 rsync --daemon
[root@backup ~]# vi /etc/rsync.password ####虚拟用户创建密码
rsync_backup:123456
[root@backup ~]# cat /etc/rsync.password
rsync_backup:123456
[root@backup ~]# chmod 600 /etc/rsync.password ####给密码设置权限
[root@backup ~]# ls -l /etc/rsync.password ####查看rsync.password
-rw------- 1 root root 20 Aug 21 12:59 /etc/rsync.password

[root@backup ~]# lsof -i :873 #####查看端口号对应的服务
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsync 1747 root 4u IPv4 13507 0t0 TCP :rsync (LISTEN)
rsync 1747 root 5u IPv6 13508 0t0 TCP
:rsync (LISTEN)
[root@backup ~]# netstat -lntup|grep 873 ####查看端口号对应的服务
tcp 0 0 0.0.0.0:873 0.0.0.0: LISTEN 1747/rsync
tcp 0 0 :::873 :::
LISTEN 1747/rsync

第三步:加入开机自启动:
[root@backup ~]# echo "/usr/bin/rsync --daemon" >>/etc/rc.local
[root@backup ~]# tail -1 /etc/rc.local
/usr/bin/rsync --daemon

第四步:客户端配置
[root@nfs01 ~]# rpm -qa rsync ###查看rsync是否安装rpm包
rsync-3.0.6-12.el6.x86_64
[root@nfs01 ~]# vim /etc/rsync.password ###密码和服务器端的密码文件一样
123456

客户端--->服务器端 ---推送数据:
[root@web ~]# rsync -avz /backup/ rsync://rsync_danny@IP/backup/ --password-file=/etc/rsync.password
password file must not be other-accessible
continuing without password file
Password: ##### 密码:123456
sending incremental file list
./
a
b
c
d
e
f
g
test1

sent 131014 bytes received 163 bytes 3320.94 bytes/sec
total size is 134217728 speedup is 1023.18

客户端---->服务器端---->拉数据:
[root@web backup]# rsync -avz rsync://[email protected]/backup/ /backup/ --password-file=/etc/rsync.password
password file must not be other-accessible
continuing without password file
Password: ###密码:123456
receiving incremental file list
./
a
b
c
d
e
f
g

sent 200 bytes received 412 bytes 26.04 bytes/sec
total size is 0 speedup is 0.00

rsync 多模块配置:

  1. 服务器端的配置:

下面是rsync 的配置文件:/etc/rsyncd.conf 内容:其中[danny]是我自己新加的模块:其中代表的含义上面已经注释过了。
rsync 服务 总结_第2张图片

在实际的配置过程中出现了客户端往服务器端推送数据失败:
报错信息:
[root@web backup]# rsync -avz /backup/ rsync://[email protected]/danny/ --password-file=/etc/rsync.password
password file must not be other-accessible
continuing without password file
Password:
@ERROR: auth failed on module danny
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
查找了半天都没有找到原因,后来又看了下配置文件下的各个参数的含义,找到了是密码的问题,这里增加了[danny]模块,密码配置文件里应该有虚拟用户 auth users = rsync_danny对应的密码,密码配置文件下的参数如下:
rsync 服务  总结
否则客户端推送文件时找不到用户对应的密码,因此会导致推送失败
客户端配置如下:
rsync 服务  总结

小结:
在多个模块的情况下,应该注意;
服务器端:

path = /danny ####路径
auth users = ####用户
secrets file = /etc/rsync.password #####密码文件
Vi /etc/rsync.pasword 密码文件里:
用户:密码

客户端直接放置服务的配置的密码字符串就可以了,目前来看没有这方面的故障

我在这几个地方都出现了问题导致文件推送失败
重要的是要熟练掌握服务的部署
配置文件各个参数的含义
以防出错后不知道从何下手排查错误。

每天巩固旧知识,学习新知识。
活学灵用!

今日小结完毕!