Rsync is a fast and extraordinarily versatile file copying tool.nginx
Rsync是一款开源的,快速的,多功能的,可实现全量和增量的本地或者远程的数据同步,备份的优秀工具。shell
Rsync的功能:安全
一、支持拷贝特殊文件如连接文件、设备等。bash
二、能够有排除指定文件或目录同步的功能,至关于打包命令tar的--exclude=PATTERN排除功能。服务器
三、能够作到保持原文件或目录的权限、时间、软硬连接、属主、属组等全部属性不变。ssh
四、能够实现增量同步,即只同步发生改变的文件。socket
五、可使用rcp,rsh,ssh等方式配合传输文件。(rsync自己不对文件进行加密)。tcp
六、能够经过socket(进程方式)传输文件和数据(即客户端与服务端)。工具
七、支持匿名的认证(无需系统用户)的进程模式传输,可实现方便安全的进行数据备份及镜像。测试
Rsync安装:
通常Linux系统自带的有rsync工具
[root@backup shell]# rpm -qa rsync rsync-3.0.6-12.el6.x86_64
Rsync语法:
Local: rsync [OPTION...] SRC... [DEST]
Access via remote shell:
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
Access via rsync daemon:
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
语法解释:
Local:本地
[OPTION]:rsync的参数
SRC:源数据所在地目录
[DEST]或DEST:目标存放数据所在地目录
Pull:是在本地经过rsync将远程主机的数据拉到本地主机上。
Push:是在本地经过rsync将本地数据推送到远程主机上。
[:PORT]:端口
这次建立rsync服务器将以socket方式进行传输数据
A、服务端
一、首先在服务端上建立rsync配置文件,rsync没有自带的配置的文件,因此须要手工进行建立。
配置文件所在位置:/etc/rsyncd.conf
其中参数配置请使用
[root@backup shell]# man rsyncd.conf
rsyncd.conf — configuration file for rsync in daemon mode
#rsync_config________start ##-------------CopyRight------------- ## Name:rsync configure ## Version Number:1.00 ## Type:text ## Language:text ## Date:2018-05-09 ## Author:sandy ## QQ:442656067 ## Email:eeexu123@163.com ## Blog:https://www.cnblogs.com/eeexu123/ ##rsync.conf start## uid = www //备份目录的UID gid = www //备份目录的GID use chroot = no //安全方面 max connections = 200 //最大链接数 timeout = 300 //超时 pid file = /var/run/rsyncd.pid //rsync进程的pid lock file = /var/run/rsync.lock //锁文件 log file = /var/log/rsyncd.log //rsync日志文件 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 //匿名用户的密码 [backup] //备份的目录 path = /backup [nfsbackup] path = /data #rsync_config________end
二、建立用户www及配置备份目录的权限
1 [root@backup ~]# useradd www 2 [root@backup ~]# id www 3 uid=893(www) gid=893(www) 组=893(www)
1 [root@backup ~]# chown -R www.www /backup/ 2 [root@backup ~]# ll /backup/ 3 总用量 4 4 -rw-r--r--. 1 www www 1134 3月 2 15:07 rsyncd
三、建立匿名用户和密码文件
1 [root@backup ~]# cat /etc/rsync.password 2 rsync_backup:oldboy
四、修改密码文件的权限
1 [root@backup ~]# chmod 600 /etc/rsync.password 2 [root@backup ~]# ll /etc/rsync.password 3 -rw-------. 1 root root 20 2月 24 13:33 /etc/rsync.password
五、启动Rsync服务
1 [root@backup ~]# rsync --daemon
B、客户端
一、首先建立匿名用的密码文件
1 [root@nginx ~]# cat /etc/rsync.password 2 oldboy
二、修改密码文件的权限
1 [root@nginx ~]# chmod 600 /etc/rsync.password 2 [root@nginx ~]# ll /etc/rsync.password 3 -rw-------. 1 root root 7 5月 11 17:42 /etc/rsync.password
C、测试
服务器备份目录状态
[root@backup ~]# ll /backup/ 总用量 0
客户端推送数据到服务端
1 [root@nginx tools]# rsync -avz /root/tools/ rsync_backup@172.16.1.41::backup/ --password-file=/etc/rsync.password 2 sending incremental file list 3 ./ 4 zabbix-agent-3.0.3-1.el6.x86_64.rpm 5 6 sent 327071 bytes received 30 bytes 654202.00 bytes/sec 7 total size is 326848 speedup is 1.00
查看服务端
1 [root@backup ~]# ll /backup/ 2 总用量 320 3 -rw-r--r-- 1 www www 326848 5月 31 2016 zabbix-agent-3.0.3-1.el6.x86_64.rpm
D、配置Rsync服务启动脚本
脚本存放地在/etc/init.d/rsyncd
1 #!/bin/bash 2 3 #-------------CopyRight------------- 4 # Name:Rsync start or stop 5 # Version Number:1.00 6 # Type:sh 7 # Language:bash shell 8 # Date:2018-05-09 9 # Author:sandy 10 # QQ:442656067 11 # Email:eeexu123@163.com 12 # Blog:https://www.cnblogs.com/eeexu123/ 13 14 # rsyncd Start or Stop the rsync server daemon 15 # 16 # chkconfig: 2345 53 23 //能够被chkconfig管理 17 # description: rysnc is backup server 18 19 pid_file=/var/run/rsyncd.pid 20 RETVAL=0 21 22 #source functions libary 23 . /etc/init.d/functions 24 25 #check permission 26 [ -x /etc/init.d/rsyncd ]||{ 27 echo "rsyncd is permission denied" 28 exit 1 29 } 30 31 #start rsync 32 start(){ 33 if [ $UID -ne 0 ];then 34 echo "User has insufficient privilege." 35 exit 2 36 fi 37 38 if [ -e $pid_file ];then 39 echo "Rsync is running" 40 exit 3 41 else 42 /usr/bin/rsync --daemon 43 RETVAL=$? 44 if [ $RETVAL -eq 0 ];then 45 action "Rsync start" /bin/true 46 else 47 action "Rsync start" /bin/false 48 fi 49 fi 50 return $RETVAL 51 } 52 53 #stop rsync 54 stop(){ 55 if [ $UID -ne 0 ];then 56 echo "User has insufficient privilege." 57 exit 2 58 fi 59 60 if [ ! -e $pid_file ];then 61 echo "Rsync is stoped" 62 exit 3 63 else 64 killproc -p $pid_file 65 RETVAL=$? 66 if [ $RETVAL -eq 0 ];then 67 action "Rsync stop" /bin/true 68 else 69 action "Rsync stop" /bin/false 70 fi 71 fi 72 return $RETVAL 73 } 74 75 #restart rsync 76 restart(){ 77 if [ $UID -ne 0 ];then 78 echo "User has insufficient privilege." 79 exit 2 80 fi 81 82 stop 83 sleep 2 84 start 85 return $RETVAL 86 } 87 88 case "$1" in 89 start) 90 start 91 RETVAL=$? 92 ;; 93 stop) 94 stop 95 RETVAL=$? 96 ;; 97 restart) 98 restart 99 RETVAL=$? 100 ;; 101 *) 102 echo "USAGE:$0 {start|stop|restart}" 103 esac 104 exit $RETVAL
测试
1 [root@backup ~]# netstat -tulnp|grep rsync 2 tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 6740/rsync 3 tcp 0 0 :::873 :::* LISTEN 6740/rsync 4 [root@backup ~]# /etc/init.d/rsyncd stop 5 Rsync stop [肯定] 6 [root@backup ~]# netstat -tulnp|grep rsync 7 [root@backup ~]# /etc/init.d/rsyncd start 8 Rsync start [肯定] 9 [root@backup ~]# netstat -tulnp|grep rsync 10 tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 15170/rsync 11 tcp 0 0 :::873 :::* LISTEN 15170/rsync