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