rsync是一款开源、快速、多功能、可实现全量及增量的本地或远程数据同步备份的优秀工具。rsync软件适用于Unix/linux/Windows等多种操做系统平台。linux
rsync英文称为remote synchronizetion,从软件的名称就能够看出来,rsync具备可以使本地和远程两台主机之间的数据快速复制同步镜像、远程备份的功能,这个功能相似于ssh带的scp命令,可是又优于scp命令的功能,scp每次都是全量拷贝,而rsync能够增量拷贝。固然,rsync还能够在本地主机的不一样分区或目录之间全量及曾量的复制数据,这又相似cp命令。可是一样也优于cp命令,cp每次都是全量拷贝,而rsync能够增量拷贝。web
在同步数据的时候,默认状况下,rsync经过其独特的“quick check”算法,它仅同步大小或者最后修改时间发生变化的文件或目录,固然也可根据权限、属主等属性的变化同步,可是须要制定相应的参数,甚至能够实现只同步一个文件里有变化的内容部分,因此,但是实现快速的同步备份数据。算法
rsync监听端口:873shell
rsync运行模式:C/Svim
client/server安全
客户端/服务端服务器
小提示:利用rsync还能够实现删除文件和目录的功能,这又至关于rm命令,一个rsync至关于scp、cp、rm,可是还优于他们的每个命令。架构
1)支持拷贝特殊文件,如链接文件、设备等。 2)能够有排除指定文件或目录同步的功能,至关于打包命令tar的排除功能。 3)能够作到保持原文件或目录的权限、时间、软硬连接、属主、组等全部属性均不改变 –p。 4)能够实现增量同步,既只同步发生变化的数据,所以数据传输效率很高(tar-N)。 5)可使用rcp、rsh、ssh等方式来配合传输文件(rsync自己不对数据加密)。 6)能够经过socket(进程方式)传输文件和数据(服务端和客户端)。 7)支持匿名的活认证(无需系统用户)的进程模式传输,能够实现方便安全的进行数据备份和镜像。ssh
1)借助cron+rsync把全部客户服务器数据同步到备份服务器。 2)针对公司重要数据备份混乱情况和领导提出备份全网数据的解决方案。 3)经过本地打包备份,而后rsync结合inotify应用把全网数统一备份到一个固定存储服务器,而后在存储服务器上经过脚本检查并报警管理员备份结果。 4)按期将IDC机房的数据 备份公司的内部服务器,防止机房地震及火灾问题致使数据丢失。 5)实时同步,解决存储服务器等的单点问题。socket
备份类型有两种,分别是彻底备份和增量备份。
彻底备份示意图以下:
增量备份示意图以下:
示意图以下:
示意图以下:
示意图以下:
示意图以下:
Rsync有三种传输模式,分别是本地方式、远程方式、守护进程。
相似于cp命令
命令示例:[root@web01 ~]# rsync -avz file0801-1 /ml-1/ 命令语法: #本地拷贝数据命令 Local: rsync [OPTION...] SRC... [DEST] 完整示例: #在本地建立目录file0801-1,在目录file0801-1里建立文件f1.txt,在本地建立目标目录ml-1 [root@web01 ~]# mkdir file0801-1 [root@web01 ~]# mkdir ml-1 [root@web01 ~]# cd file0801-1 [root@web01 file0801-1]# touch f1.txt #拷贝目录file0801-1至目录ml-1下 rsync -avz file0801-1 /ml-1/ #检查结果 sending incremental file list file0801-1/ file0801-1/f1.txt sent 123 bytes received 39 bytes 324.00 bytes/sec total size is 0 speedup is 0.00 [root@web01 ~]# ll /ml-1/file0801-1 total 0 -rw-r--r-- 1 root root 0 Aug 1 16:12 f1.txt
相似于scp命令
命令示例:[root@web01 ~]# rsync -avz file0801-1 /ml-1/ 命令语法: Access via remote shell: Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST] Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
完整示例:
#推 push #先在客户端web01建立要复制的目录及文件 [root@web01 ~]# mkdir tmp2 [root@web01 ~]# cd tmp2 [root@web01 tmp2]# touch f1{.txt,.log} #接着在服务器端backup上建立目标目录 [root@backup ~]# mkdir tmp3 #拷贝客户端上的tmp2目录至服务器端的目录tmp3中 [root@web01 tmp2]# rsync -avz tmp2 root@172.16.1.41:tmp3/ #检查结果 客户端页面: [root@web01 ~]# rsync -avz tmp2 root@172.16.1.41:tmp3/ root@172.16.1.41's password: sending incremental file list tmp2/ tmp2/f1.log tmp2/f1.txt sent 168 bytes received 58 bytes 90.40 bytes/sec total size is 0 speedup is 0.00 服务器端页面:(服务器端存在目录tmp2,表示已拷贝成功) [root@backup ~]# cd tmp3 [root@backup tmp3]# ll total 0 drwxr-xr-x 2 root root 34 Aug 1 16:58 tmp2 [root@backup tmp3]# cd tmp2 [root@backup tmp2]# ll total 0 -rw-r--r-- 1 root root 0 Aug 1 16:58 f1.log -rw-r--r-- 1 root root 0 Aug 1 16:58 f1.txt 完整示例: #拉 pull #先在服务器端backup上建立要复制的目录及文件 [root@backup ~]# mkdir tp10 [root@backup ~]# cd tp10 [root@backup tp10]# touch aa.txt #再在客户端web01建立目标目录 [root@web01 ~]# mkdir f08 [root@web01 ~]# mkdir f09 #拉服务器端上的tp10目录至客户端的目录f08中 [root@web01 ~]# rsync -avz root@172.16.1.41:tp10/ f08 #拉服务器端上的tp10目录至客户端的目录tp09中 [root@web01 ~]# rsync -avz root@172.16.1.41:tp10 f09 #检查结果 加/的状况下,只拷贝目录里的内容(不包含目录) 客户端页面: [root@web01 ~]# rsync -avz root@172.16.1.41:tp10/ f08 root@172.16.1.41's password: receiving incremental file list ./ aa.txt sent 46 bytes received 104 bytes 42.86 bytes/sec total size is 0 speedup is 0.00 客户端页面:(客户端存在aa.txt,但没有目录tp10) [root@web01 ~]# cd f08 [root@web01 f08]# ll total 0 -rw-r--r-- 1 root root 0 Aug 1 18:00 aa.txt 不加/的状况下,拷贝目录总体(包含目录自己及目录里的内容) 客户端页面 [root@web01 ~]# rsync -avz root@172.16.1.41:tp10 f09 root@172.16.1.41's password: receiving incremental file list tp10/ tp10/aa.txt sent 47 bytes received 117 bytes 65.60 bytes/sec total size is 0 speedup is 0.00 [root@web01 ~]# cd f09 [root@web01 f09]# ll total 0 drwxr-xr-x 2 root root 20 Aug 1 18:00 tp10 #只拷贝了tp10目录 [root@web01 f09]# cd tp10 [root@web01 tp10]# ll total 0 #tp10下的文件并无拷贝过来
PS:注意: rsync不论是推仍是拉,推送目录的时候带/和不带/
1.带/ :/etc/ 将etc目录里的全部内容(不包括目录),推过去或者拉过来
2.不带/:/etc 将etc目录总体(包括目录及目录里的全部内容)推过去或者拉过来
步骤一、客户端、服务端安装rsync
客户端: web01-10.0.0.7
[root@web01 ~]# yum install -y rsync
服务端: backup-10.0.0.41
[root@backup ~]# yum install -y rsync
步骤二、进入服务端会话页面,进行以下操做
服务端页面:
1)先修改配置文件:
[root@backup ~]# vim /etc/rsyncd.conf
uid = rsync gid = rsync port = 873 fake super = yes use chroot = no max connections = 200 timeout = 600 ignore errors read only = false list = false auth users = rsync_backup secrets file = /etc/rsync.passwd log file = /var/log/rsyncd.log ##################################### [zls] comment = welcome to oldboyedu backup! path = /backup
配置文件详解:
[root@backup ~]# vim /etc/rsyncd.conf
uid = rsync #用户名 gid = rsync #用户组 port = 873 #端口 fake super = yes #无需让rsync以root身份运行 use chroot = no #禁锢目录,不容许操做指定目录以外的目录 max connections = 200 #最大链接数200 timeout = 600 #超时时间600s 10分钟 ignore errors #忽略错误信息 read only = false #关闭只读,对备份数据可读写 list = false #不容许查看模块信息 auth users = rsync_backup #认证用户,定义虚拟用户做为链接认证用户 secrets file = /etc/rsync.passwd #认证用户的密码文件 log file = /var/log/rsyncd.log #日志文件 ##################################### #模块(任意名字均可以) [zls] #定义模块信息 comment = welcome to oldboyedu backup! #注释信息(可有可无) path = /backup
=============================================================== 2)接着建立用户 [root@backup ~]# id rsync #检查用户是否存在 id: rsync: no such user #建立用户(不容许登陆,不建立家目录) [root@backup ~]# useradd rsync -s /sbin/nologin -M =============================================================== 3)建立一个备份目录 [root@backup ~]# mkdir /backup #建立目录backup #受权rsync用户 [root@backup ~]# chown -R rsync.rsync /backup/ =============================================================== 4)建立虚拟用户及密码文件 [root@backup ~]# vim /etc/rsync.passwd rsync_backup:123456 #用户名:密码 [root@backup ~]# chmod 600 /etc/rsync.passwd #受权 =============================================================== 5)启动rsync添加开机自启 [root@backup ~]# ll /usr/lib/systemd/system/rsyncd.service -rw-r--r-- 1 root root 237 Apr 26 01:17 /usr/lib/systemd/system/rsyncd.service [root@backup ~]# systemctl start rsyncd #启动rsyncd守护进程 [root@backup ~]# systemctl enable rsyncd #容许开机自启 Created symlink from /etc/systemd/system/multi-user.target.wants/rsyncd.service to /usr/lib/systemd/system/rsyncd.service. 6)检查rsync 873 端口是否处于监听状态 [root@backup ~]# netstat -antup | grep 873
7) rsync 客户端仅需配置虚拟用户的密码,并受权为600安全权限
#方式一:适合终端执行指定用户密码文件
[root@backup ~]# yum install rsync -y
[root@backup ~]# echo " 123456 " > /etc/rsync.pass
[root@backup ~]# chmod 600 /etc/rsync.pass
#方式二:脚本使用
[root@backup ~]# export RSYNC_PASSWORD=123456
实战一:客户端推送backup目录下全部内容至rsync服务端
[root@backup ~]# export RSYNC_PASSWORD=123456
[root@backup ~]# rsync -avz /backup/ rsync_backup@172.16.1.41::backup /backup/
实战二:客户端拉取rsync服务端backup模块数据至本地客户端的/backup 目录
[root@backup ~]# export RSYNC_PASSWORD=123456
[root@backup ~]# rsync -avz rsync_backup@172.16.1.41::backup /backup/
实战三:rsync实现数据无差别同步
#拉取远端数据:远端与本地保持一致,远端没有本地有会被删除,形成客户段数据丢失
[root@backup ~]# export RSYNC_PASSWORD=123456
[root@backup ~]# rsync -avz --delete rsync_backup@172.16.1.41::backup/ /data/
#推送数据到远端:本地与远端保持一致,本地没有远端会被删除,形成服务器端数据丢失
[root@backup ~]# export RSYNC_PASSWORD=123456
[root@backup ~]# rsync -avz --delete /date/ rsync_backup@172.16.1.41::backup/
实战四: rsync的Limit限速
#文件过大致使内部交换机带宽被沾满,致使用户的请求没法响应
[root@backup ~]# export RSYNC_PASSWORD=123456
[root@backup ~]# rsync -avz --bwlimit=1 rsync_backup@172.16.1.41::backup/ /data/
步骤三、进入客户端会话页面,进行以下操做
客户端页面:
#建立虚拟用户的密码文件
[root@web01 ~]# vim /etc/rsync.pass
1 #输入密码,对应服务器端密码文件中的密码
[root@web01 ~]# chmod 600 /etc/rsync.pass #受权
步骤四、在客户端页面,建立目录,并在该目录下批量建立文件
客户端页面:
[root@web01 ~]# mkdir /data #建立目录data
[root@web01 ~]# cd /data #切换到目录data
[root@web01 data]# touch file{1..50} #在目录data下批量建立50个文件
Rsync的推操做:
[root@web01 data]# rsync -avz /data/ rsync_backup@172.16.1.41::wangxiaogang
#将目录data推至服务器端 在守护进程中,不考虑加/或者不加/
Rsync的拉操做
[root@web01 ~]# rsync -avz rsync_backup@172.16.1.41::wangxiaogang rt#将服务器端的模板目录拉至客户端的rt目录中 在守护进程中,不考虑加/或者不加/