1. Rsync的基本介绍
开源,快速,多功能。
可实现全量、增量的本地或远程的数据同步(数据备份)
(最重要的特点:能够实现远程增量备份)
支持windows/Linux/Unix多平台
在本地备份时,rsync就类似与cp(全量拷贝), 但是,rsync能够实现增量拷贝。
在远程备份时,rsync就类似与scp(全量拷贝),但是,rsync能够实现增量拷贝。
rsync还能实现删除功能。
2. rsync的增量同步:
通过"quick check"算法,能够实现:
1)同步大小
2)同步最后修改时间发生变化的文件、目录。
3)根据权限的变化而同步。
4)能够只同步一个文件内发送变化的部分。
3. Rsync的使用场景
(1)定时备份
1.1)两台服务器之间的数据同步。
比如,工作服务器和备用服务器之间的数据同步。
1.2)把所有服务器的数据,同步到一个”备份服务器"中。
(2) 实时备份
数据发生变化后,自动的及时进行备份。
方式1:rsync结合inotify
方式2:rsync结合sersync
注意:inotify和sersync都是用来监控变化的。
4. Rsync的工作方式
1)在单个主机(本地)内实现数据备份(类似cp)
2) 远程备份,是借助rcp(远程文件拷贝)或ssh通道来传输数据。
类似与scp (但是具有增量同步功能)
3)以守护进程的方式数据备份。
5. Rsync的安装
1)检查是否已经安装rsync
# rpm -qa rsync
检查版本
# rsync --version
2) 如果还没有安装,就需要安装:
# yum install rsync
3) rsync的配置
配置文件:/etc/rsyncd.conf
如果不使用守护进程的方式来使用rsync,就不需要配置rsync
6. Rsync实现本地备份
1)备分一个文件
# rsync /data/test.txt /tmp
把/data/目录下的test.txt, 备份到/tmp目录下。
2)备份一个目录(文件夹)
# rsync -r /data/user_data /tmp
把/data目录下的文件夹user_data, 备份到/tmp目录下。
注意:user_data目录本身以及该目录下的所有文件, 都备份到/tmp目录下
# rsync -r /data/user_data/ /tmp
把/data/user_data/下面的所有文件(包括子目录),都备份到/tmp目录下
注意:
rsync -r /data/user_data/ /tmp
和
rsync -r /data/user_data/ /tmp/
是等效的!
3)能够删除
注意: # rsync -r /root/user_data /tmp/
将把user_data目录下所有文件以及这个目录本身,拷贝到/tmp目录下。
如果/tmp目录下,已经有user_data文件夹了,
那么/tmp/user_data中存在但是/root/user_data没有的文件,不会删除!
那如何删除呢?
使用 --delete
rsync -r --delete /root/user_data /tmp/
补充:rsync的常用选项,
-r 用于对目录的备份。即对子目录做递归处理。
-t 用来保持文件的时间信息
-o 用来保持文件的属主信息
-P 用来显示同步的过程和进度信息
-D 用来保持设备文件信息
-l 用来保持软链接
-v 输出详细信息
-z 在传输时之前,进行压缩,对端接收后将自动解压。
-e 指定使用的通道(比如使用ssh通道)
-a 就是相当与 -rtopgDL
实际同步时,常常使用-avz
--bwlimit 用来限制速度
比如: --bwlimit=100k
用于排除文件
--exclude
--exclude-from
7. 使用Rsync实现远程同步(基于ssh通道)
注意:使用ssh通道,传输的是增量拷贝的内容
实例:
推(上传)
rsync -r -e -avz 'ssh -p 50000' /data liubei@192.168.1.120:~
说明: -e 'ssh -p 50000' 表示使用ssh通道进行传输
拉(下载)
rsync -ravz -e 'ssh -p 50000' liubei@192.168.1.120:~/data /tmp
补充:
查询某个服务的端口号
1)netstat -lntup | grep 服务名
比如:
# netstat -lntup | grep ssh
2) lsof -i | grep 服务名
比如:
# lsof -i | grep ssh
8. 以守护进程的方式启动rsync
必须先编辑好rsync的配置文件
#vim /etc/rsyncd.conf
---------------------------------
uid = rsync 用户名id
gid = rsync 用户组id
use chroot = no 安全选项,在内网,一般选择no
max connections = 200 同时可并发访问的客户端数量
timeout = 300 超时时间
pid file = /var/run/rsyncd.pid 存放rsync进程的进程号
lock file = /var/run/rsync.lock 锁文件,用来实现互斥
log file = /var/log/rsyncd.log
日志文件,如果不指定该文件,默认日志文件就是/var/log/messages
[data] 自定义模块,以后客户端同步时,可以指定模块名
path = /data/ 该模块的根目录
ignore error 忽略错误
read only = false 可写
list = false 可列表
host allow = 192.168.1.0/24 哪些主机可以连接到该服务器
host deny = 0.0.0.0/32 哪些主机不可以连接到该服务器
auth users = rsync_backup rsync的虚拟用户
secrets file = /etc/rsync.password 该虚拟用户的密码保存在哪个文件
-------------------------------------
该配置文件如果某一个有语法错误,那么后面的配置就无效!
就使用默认配置!
9. 启动Rsync
以守护进程的方式启动Rsync
# rsync --daemon
检查是否成功:
1)查看rsync的日志
cat /var/log/rsyncd.log
2) ps -ef | grep rsync
查看rsync这个进程是否启动
3)netstat -lntup | grep rsync
10. 根据配置文件,完善相关设置
1)创建rysnc用户
useradd rsync -s /sbin/nologin
2) 创建模块指定的目录
mkdir /data
并授权给rsync以只读的权限
chown -R rsync.rsync /data
3) 设置虚拟帐号的密码文件
echo "rsync_backup:123456" > /etc/rsync.password
表示,虚拟帐号rsync_backup的密码是123456
并降低这个密码文件的权限
chmod 600 /etc/rsync.password
4) 关闭防火墙,或则让防火墙开放rsync的端口(873)
否则,远程的客户端无法连接进来。
5)关闭selinux
selinux, 是内核强制访问控制安全系统。
开启selinux后,一些软件可能受到影响。
检查是否已经关闭selinux
# getenforce
关闭selinux:
修改/etc/sysconfig/selinux
把 SELINUX=enforcing
修改为: SELINUX=disabled
再重启系统
11) 可以在开机时就自动把Rsync设置为守护进程
echo "/usr/bin/ /etc/rc.local
12) 客户端的设置
(1)先检查是否已经安装rsync
(2) 设置密码
以使用守护进程rsync时,需要使用虚拟用户rsync_backup
所以,在客户端,需要设置这个虚拟账户所使用的密码
echo "123456" > /etc/rsync.password
chmod 600 /ect/rsync.password
13) 在客户端使用Rsync
方式1:(推荐)
推(上传)
rsync -avz -r /data rsync_backup@192.168.1.4::data --password-file=/etc/rsync.password
表示,把本地的/data目录,通过守护进程Rsync,上传到Rsync服务器192.168.1.4,
保存到服务器端的data模块的根目录
拉(下载)
rsync -avz -r rsync_backup@192.168.1.4::data /tmp --password-file=/etc/rsync.password
方式2:
rsync -avz -r rsync://rsync_backup@192.168.1.4/data /tmp --password-file=/etc/rsync.password
注意:192.168.1.4/data 中data是Rsync服务器端的模块名
11. rsync的排除选项
rsync的各种选项,在3个模式下都可以使用。
--exclude
--exclude-from
1) --exclude的使用
在同步时,希望某些文件(文件夹)不被同步。
rsync -r --exclude=5.txt /data /tmp/
把/data目录同步到/tmp下,同时排除5.txt(使用相对路径)
rsync --exclude={3.txt,5.txt,6.txt} -r /data /tmp/
排除了多个文件,中间用逗号分隔,外面用{ }括起来
rsync --exclude={3..6}.txt -r /data /tmp/
排除3.txt,4,txt,...6.txt
注意:被排除的文件,使用相对路径!
2) --exclude-from
当需要排除很多而且文件名没有规律的文件时,可以使用--exclude-from
rsync -r --exclude-from=/root/mylist /data /tmp
排除文件存放在/root/mylist文件中.
--------------/root/mylist-----------------
1.txt
5.txt
a.txt
d.txt
-------------------------------------------
注意:--exclude-from后的文件,使用绝对路径。
该文件内存放需要排除的文件,
一个文件占用一行(使用相对路径)
12. 在rsync的服务器端也可以设置排除
在rsync的配置文件中设置。
--------------/etc/rsyncd.conf--------------
........
exclude = 1.txt 6.txt c.txt
.......
--------------------------------------------
多个文件之间使用空格分隔,使用相对路径
在服务器端配置后,就永久有效,而且在客户端就不需要使用--delete选项。
注意:一般都在客户端使用排除选项。
有差异同步和无差异同步
一般同步时,可能造成客户端和服务端的数据不一致,即有差异同步。
使用 --delete选项,即可实现无差异同步!
推(上传)
使用--delete, 可以删除服务的部分文件。
使用场景:备份。
拉(下载)
使用--delete, 可以删除本地的部分文件。
使用场景:主要用于代码发布。
rsync共享多个目录
即服务器端配置多个模块。
/etc/rsyncd.conf
-------------------------
各模块的公共配置
[模块名]
该模块的配置
[模块名]
该模块的配置
[模块名]
该模块的配置
-------------------------
注意, 以及配置必须在模块内定义
ignore errors
host allow = 192.168.1.0/24
host deny = 0.0.0.0/32
rsync守护进程方式下的常见错误排查
1)首先应该查看 rsync的日志文件
根据日志中的错误提示解决。
2)再检查rsync的配置文件
注意某些配置必须在模块内定义
3)检查模块的根目录需要对rsync用户授权
4)本地的密码文件的权限不能太高,应该是600
5) 防火墙
先关闭防火墙