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) 防火墙 先关闭防火墙