Rsync官方站点:http://rsync.samba.org
1. Rsync
rsync是一款开源的实现数据全量与增量同步备份的工具
生产环境中使用的场景:
1:一般用于数据异地备份
2:用于WEB集群节点数据的批量更新
3:用于本地YUM服务器与互联网镜像站软件同步
功能一:
可使本地主机不同分区或目录之间及本地和远程两台主机之间的数据快速同步镜像,远程备份等功能。适合linux/windows等系统
功能二:
可以再本地主机的不同分区或目录之间进行全量或者增量的复制数据
注意:
rsync的目的是实现本地主机和远程主机上之间的数据快速复制同步镜像,远程备份的能力(包括本地推到远程,远程拉到本地两种同步方式),也可以实现本地不同路径下文件的同步。但不能实现远程路径1到远程路径2之间的同步(scp可以实现)。
功能一:类似于scp命令,但是scp每次都是全量拷贝,而rsync可以进行增量拷贝,scp拷贝数据时加密的,但是rsync是不加密的。
功能二:有类似于cp命令,但是cp每次都是全量拷贝,而rsync可以进行增量拷贝
rsync还可以实现文件和目录的删除功能,这又是相当于RM命令,rsync相当于scp,cp,rm命令。并且还由于他们。
在同步备份时,默认情况下,rsync通过其独特的“quick check”算法,仅同步大小或者最后修改时间发生变化的文件或目录(也可根据权限,属主等变化同步,需要制定参数)。甚至是只同步一个文件里变化的内容部分,所以可以实现快速的同步数据的功能。
2.Rsync特性
1)支持拷贝特殊文件如链接,设备,属组,权限等 2)可以有排除指定文件或目录同步的功能,相当于打包命令tar 3)可以保持原来文件或目录的权限,时间,软硬链接等所有属性均不改变。 4)可实现增量同步,即只同步发生变化的数据,因此数据传输效率更高 5)可以使用rcp,rsh,ssh等方式来配合传输文件(rsync本身不对传输数据加密),也可以通过直接的socket链接(有服务端和客户端) 6)支持匿名(不需要超级用户权限)的或认证的进程模式传输,方便进行数据备份及镜像。
3.Rsync工作方式
(1).本地文件系统上实现同步。命令行语法格式为上述"Local"段的格式。类似于cp命令的功能
(2).本地主机使用远程shell和远程主机通信。命令行语法格式为上述"Access via remote shell"段的格式。类似于scp命令的功能,基于ssh通道来传输数据
(3).本地主机通过网络套接字连接远程主机上的rsync daemon。命令行语法格式为上述"Access via rsync daemon"段的格式。这是rsync自身最重要的功能,socket守护进程
前两者的本质是通过管道通信,即使是远程shell。而方式(3)则是让远程主机上运行rsync服务,使其监听在一个端口上,等待客户端的连接。
3.0 Rsync参数
紫色字符表示不固定,根据自己需求调整。红色字符表示警告。
-a 归档模式传输, 等于-tropgDl -v 详细模式输出, 打印速率, 文件数量等 -z 传输时进行压缩以提高效率 -r 递归传输目录及子目录,即目录下得所有目录都同样传输 -t 保持文件时间信息 -o 保持文件属主信息 -p 保持文件权限 -g 保持文件属组信息 -l 保留软连接 -P 显示同步的过程及传输时的进度等信息 -D 保持设备文件信息 -L 保留软连接指向的目标文件 -e 使用的信道协议,指定替代rsh的shell程序 --exclude=PATTERN 指定排除不需要传输的文件模式 tar命令的排除也是--exclude -X==--exclude-from=FILE --exclude-from=file 文件名所在的目录文件 --bwlimit=100 限速传输 --partial 断点续传 --delete 让目标目录和源目录数据保持一致 谨慎使用
3.1 rsync数据传输模式
本地数据传输模式(lcoal-only mode),单个主机之间传送,类似cp命令
复制
[root@node1 /]# rsync /etc/hosts /tmp #将/etc/hosts推送到/tmp目录,相当于cp /etc/hosts /tmp
[root@node1 /]# rsync -avz /etc/hosts /tmp #当此命令在执行一次时,就不在copy了,体现了rsync的增量copy, sending incremental file list host sent 175 bytes received 35 bytes 420.00 bytes/sec total size is 221 speedup is 1.05
删除 新建空目录 mkdir /null [root@node1 /]# rsync -r --delete /null/ /test/ #相当于rm命令 /null/目录里面有什么/test/目录里面就有什么,
/null/为空/test/也为空,实际上是删除复制,这个--delete命令有危险 注意:/null/必须加上最后斜线,不加的话代表/null和目录里面的内容,如果加上的话,只表示目录里面的东西
远程数据传输模式,ssh通道数据传输,类似于scp命令,一般设置免秘钥登录
格式: rsync [OPTION...] [USER@]HOST:SRC... [DEST] 下载(拉)
借助ssh通道从远程主机拉取数据
[root@node1 /]# rsync -avz -e 'ssh -p 22' root@192.168.10.232:/tmp/1.txt /tmp
参数说明: 1)-avz相当于-vzrtopgDl,表示同步时文件和目录的属性不变, 2)-P显示同步过程,可以用--progress替换 3)-e 'ssh -p 22'表示通过ssh的通道传输数据 -p 22 可以省略
rsync在生产环境中的使用场景:
============================================================================================
Rsync部署环境:
服务端 | 192.168.200.113 |
客户端 | 192.168.200.114 |
Rsync安装
部署步骤:
服务端:
1:修改主机名及安装rsync
[root@localhost ~]# hostname rsync-server
[root@localhost ~]# bash
[root@rsync-server ~]# yum install rsync -y
rsync-3.1.2-4.el7.x86_64
2:修改主配置文件
[root@rsync-server ~]# vim /etc/rsyncd.conf
uid = nobody #用户名 gid = nobody #组名 use chroot = yes #紧固在源目录 address = 192.168.200.113 #监听的IP地址 port = 873 #监听的端口 log file = /var/log/rsyncd.log #日志文件存放位置 pid file = /var/run/rsyncd.pid #进程pid文件存放位置
hosts allow = 192.168.200.0/24 #允许访问的客户端地址 [wwwroot] #共享模块名称 path = /var/www/html #源目录存在路径(监听的目录下的内容变更) comment = Document Root os www.crushlinux.com #描述信息 read only = yes #是否为只读 dont compress = *.gz*.bz2*.tgz*.zip*.rar*.z #同步时不在压缩的文件类型 auth users = backuper #备份授权用户名
secrets file = /etc/rsyncd_users.db #存放账户信息的数据文
3:为备份账户创建数据文件,以冒号分割,密码信息在文件中以明文显示
[root@rsync-server ~]# vim /etc/rsyncd_users.db #客户机连接服务器时的密码
backuper:pwd123 #用户名高:密码
基于数据文件权限,只有所属用户拥有读和写的权限,组合其他用户只有读的权限
[root@rsync-server ~]# chmod 600 /etc/rsyncd_users.db
启动服务运行命令“rsync --daemon”,以独立监听服务的运行方式,若关闭rsync服务可采用kill杀掉进程或者使用rm -rf /var/run/rsyncd.pid
[root@rsync-server ~]# rsync --daemon #开启rsync服务
[root@rsync-server ~]# netstat -lnpt | grep 873
tcp 0 0 192.168.200.113:873 0.0.0.0:* LISTEN 12749/rsync
编写服务脚本
[root@rsync-server ~]# vim /etc/init.d/rsync
#!/bin/bash
#chkconfig:2345 80 20 #定义服务的启动级,启动优先级,关闭优先级。以便后面使用chkconfig
#description:rsync server
start(){ netstat -lnpt | grep -q :873 [ $? -ne 0 ] && rsync --daemon } stop(){ netstat -lnpt | grep -q :873 [ $? -eq 0 ] && kill $(cat /var/run/rsyncd.pid) && rm -rf /var/run/rsyncd.pid
} status(){ netstat -lnpt | grep -q :873 [ $? -eq 0 ] && echo "Rsyn Daemon is Runing" } case $1 in start) start ;; stop) stop ;; restart | reload) $0 stop $0 start ;; status) satus;; *) echo "用法:$0{start | stop | restart | resload | status}" esac
[root@rsync-server ~]# chmod +x /etc/init.d/rsync
如果想让服务支持chkconfig,必须定义服务的启动级,启动优先级,关闭优先级,目的是为了更方便的开启和关闭rsync服务
[root@rsync-server ~]# chkconfig --add rsync
[root@rsync-server ~]# systemctl stop rsync
二:使用rsync备份工具192.168.200.114
有了同步源服务器之后,就可以使用rsync工具来执行远程同步,接下来的操作都在客户机(发起端)执行
本地备份:备份源和发起端可以是一台机器
安装rsync
[root@agent ~]# hostname rsync-agent
[root@agent ~]# bash
[root@rsync-agent ~]# yum install rsync -y
rsync命令格式及备份选项:
服务机准备目录文件及内容
[root@rsync-server ~]# mkdir /var/www/html -p
[root@rsync-server ~]# cd /var/www/html/
[root@rsync-server html]# touch 1.txt
[root@rsync-server html]# ls
1.txt
[root@rsync-server ~]# systemctl stop firewalld
[root@rsync-server ~]# iptables -F
[root@rsync-server ~]# setenforce 0
第一种:单Rsync备份案列,这种属于交互式的传输方式,
客户机操作:
[root@rsync-agent ~]# rsync -avz backuper@192.168.200.113::wwwroot /root #将服务机/var/www/html中的1.txt下载到本地
Password:
receiving incremental file list
./
.txt
1.txt
sent 65 bytes received 162 bytes 11.64 bytes/sec
total size is 0 speedup is 0.00
[root@rsync-agent ~]# ls
1.txt anaconda-ks.cfg nginx-1.15.9-1.x86_64.rpm zabbix-3.4.11.tar.gz 公共 模板 视频 图片 文档 下载 音乐 桌面
Rsync默认支持增量备份,已经下载的不会再下载
实验:在服务机/var/www/html再创建几个文件
服务机操作:
[root@rsync-server html]# touch {1..5}.txt
[root@rsync-server html]# ls
1.txt 2.txt 3.txt 4.txt 5.txt
客户机操作:
[root@rsync-agent ~]# rsync -avz backuper@192.168.200.113::wwwroot /root
Password:
receiving incremental file list
./
1.txt
2.txt
3.txt
4.txt
5.txt
sent 122 bytes received 334 bytes 36.48 bytes/sec
total size is 0 speedup is 0.00
[root@rsync-agent ~]# ls
1.txt 3.txt 5.txt nginx-1.15.9-1.x86_64.rpm 公共 频 文档 音乐
2.txt 4.txt anaconda-ks.cfg zabbix-3.4.11.tar.gz 模板 图片 下载 桌面
这种传法有一种弊端,就是当源共享的目录内存大时,会导致发起段下载速度慢
======================================================================================
第二种:单Rsync备份案例:这种属于无交互式传输
通过export RSYNC_PASSWORD变量保存密码,rsync命令执行时可以自动读取该变量的值,在需要时发送给rsync服务器来进行验证。
服务端:
[root@rsync-server html]# mkdir a/
[root@rsync-server html]# touch 2.txt
[root@rsync-server html]# ls
1.txt 2.txt a
客户端:
[root@rsync-agent ~]# export RSYNC_PASSWORD=pwd123
[root@rsync-agent ~]# rsync -avzH --delete backuper@192.168.200.113::wwwroot /root
./
2.txt
a/
sent 54 bytes received 164 bytes 18.96 bytes/sec
total size is 0 speedup is 0.00
[root@rsync-agent ~]# ls
1.txt 2.txt a
通过--password-file选项指定存储密码的文件也是免密传输
服务端:
[root@rsync-server html]# touch {10..20}.txt
[root@rsync-server html]# ls
10.txt 11.txt 12.txt 13.txt 14.txt 15.txt 16.txt 17.txt 18.txt 19.txt 1.txt 20.txt 2.txt a
客户端:
[root@rsync-agent ~]# vim /etc/server.pass
pwd123
[root@rsync-agent ~]# chmod 600 /etc/server.pass
[root@rsync-agent ~]# rsync -avzH --delete --password-file=/etc/server.pass rsync://backuper@192.168.200.113/wwwroot /root
[root@rsync-agent ~]# ls
10.txt 11.txt 12.txt 13.txt 14.txt 15.txt 16.txt 17.txt 18.txt 19.txt 1.txt 20.txt 2.txt a
设置周期计划:每天晚上十点半执行数据同步
[root@rsync-agent ~]# crontab -e
no crontab for root - using an empty one
30 22 * * * /usr/bin/rsync -az --delete --password-file=/etc/server.pass rsync://backuper@192.168.200.113/wwwroot /roo
=================================================================================================