1、rsync 軟件介紹
css
1 什麼是rsynchtml
rsync 是一款開源的、快速的、多功能的、可實現全量及增量的本地或遠程數據同步備份的優秀工具。算法
http://www.samba.org/ftp/rsync/rsync.htmlsql
全量:將所有數據,進行傳輸覆蓋shell
增量:只傳輸差別部分的數據vim
2 實現增量複製的原理centos
Rsync經過其獨特的「quick check」算法,實現增量傳輸數據安全
[root@backup ~]#man rsync
Rsync finds files that need to be transferred using a 「quick check」 algorithm (by default) that looks for files that have changed in size or in last-modified time. Any changes in the other preserved attributes (as requested by options) are made on the destination file directly when the quick check indicates that the file’s data does not need to be updated.
ruby
在同步備份數據時,默認狀況下,Rsync經過其獨特的「quick check」算法,它僅同步大小或者最後修改時間發生變化的文件或目錄,固然也可根據權限,屬主等屬性的變化同步,但須要指定相應的參數,甚至能夠實現只同步一個文件裏有變化的內容部分,因此,能夠實現快速的同步備份數據。
bash
centos 5 rsync 2.x 先比對再同步,速度較慢
centos 6 rsync 3.x 一邊比對,一邊對差別部分進行同步
軟件版本:
[root@backup ~]#man rsync
Rsync finds files that need to be transferred using a 「quick check」 algorithm (by default) that looks for files that have changed in size or in last-modified time. Any changes in the other preserved attributes (as requested by options) are made on the destination file directly when the quick check indicates that the file’s data does not need to be updated.
3 rsync 軟件功能介紹
相似於 cp 命令 -- 實現本地備份傳輸數據
相似於scp 命令 -- 遠程備份傳輸數據
相似於 rm 命令 -- 實現無差別同步備份
相似於 ls 命令 -- 本地文件信息查看
rsync 命令屬於1 v 4 的命令
3.1 rsync == cp
[root@backup ~]# cp -a /etc/hosts /tmp/
[root@backup ~]# ls /tmp/hosts
[root@backup ~]# \rm /tmp/hosts
[root@backup ~]# rsync /etc/hosts /tmp/
[root@backup ~]# ls /tmp/hosts
/tmp/hosts
3.2 rsync == scp
#使用scp實現
#檢查對端服務器目標位置上是否有該文件
[root@nfs01 ~]# ls /tmp/hosts
ls: cannot access /tmp/hosts: No such file or directory
#從本地拷貝到遠端服務器上
[root@backup ~]# ls /tmp/hosts
/tmp/hosts
[root@backup ~]# scp -rp /etc/hosts 10.0.0.31:/tmp/
The authenticity of host '10.0.0.31 (10.0.0.31)' can't be established.
RSA key fingerprint is d3:41:bb:0d:43:88:da:a3:2c:e8:36:91:11:c9:e4:9c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.0.0.31' (RSA) to the list of known hosts.
root@10.0.0.31's password:
hosts 100% 357 0.4KB/s 00:00
#檢查遠端服務器上的結果
[root@nfs01 ~]# ls /tmp/hosts
/tmp/hosts
#使用rsync 實現
[root@backup ~]# rsync -rp /etc/hosts 10.0.0.31:/tmp/
root@10.0.0.31's password:
[root@backup ~]#[root@nfs01 ~]# ls /tmp/hosts
/tmp/hosts
3.3 rsync == rm
環境準備
建立出來一次命令 進行操做
[root@backup tmp]# mkdir /znix
[root@backup znix]# cp /tmp/* .
[root@backup znix]# ll
total 4
-rw-r--r-- 1 root root 357 Oct 11 15:21 hosts
#rm命令操做
[root@backup znix]# rm -rf /znix/hosts
[root@backup znix]# ll /znix/hosts
ls: cannot access /znix/hosts: No such file or directory
查看這文件
[root@backup ~]# l
total 4
-rw-r--r-- 1 root root 357 Oct 11 15:21 hosts
建立一個空目錄,使用空目錄進行無差別同步
[root@backup ~]# mkdir /null
[root@backup ~]# rsync --delete /null/ /znix/
rsync: --delete does not work without -r or -d.
rsync error: syntax or usage error (code 1) at main.c(1422) [client=3.0.6]
[root@backup ~]# rsync -a --delete /null/ /znix/
[root@backup ~]# ll /znix/
total 0
3.4 rsync == ls -l
使用rsync 能夠實現與 ls 相似的功能
[root@backup ~]# ls -l install.log
-rw-r--r--. 1 root root 21736 Sep 25 08:38 install.log
[root@backup ~]# rsync install.log
-rw-r--r-- 21736 2017/09/25 08:38:28 install.log
4 Rsync特性總結(特性信息說明)
01. 支持拷貝普通文件與特殊文件如連接文件,設備等。
02. 能夠有排除指定文件或目錄同步的功能,至關於打包命令tar的排除功能。
# tar zcvf backup_1.tar.gz /opt/data -exclude=oldboy
說明:在打包/opt/data時就排除了oldboy命名的目錄和文件。
03. 能夠作到保持原文件或目錄的權限、時間、軟硬連接、屬主、組等全部屬性均不改變-p。
04. 可實現增量同步,既只同步發生變化的數據,所以數據傳輸效率很高(tar -N)。
# 將備份/home 目錄自 2008-01-29 以來修改過的文件
# tar -N 2008-01-29 -zcvf /backups/inc-backup_$(date +%F).tar.gz /home
# 將備份 /home 目錄昨天以來修改過的文件
# tar -N $(date -d yesterday "+%F") -zcvf /backups/inc-backup_$(date +%F).tar.gz /home
# 添加文件到已經打包的文件
# tar -rf all.tar *.gif
說明:這條命令是將全部.gif的文件增長到all.tar的包裏面去。-r是表示增長文件的意思。
05. 可使用rcp,rsh,ssh等方式來配合進行隧道加密傳輸文件(rsync自己不對數據加密)06. 能夠經過socket(進程方式)傳輸文件和數據(服務端和客戶端)*****。重點掌握07. 支持匿名的或認證(無需系統用戶)的進程模式傳輸,可實現方便安全的進行數據備份及鏡像。
5 Rsync的企業工做場景說明
01. 兩臺服務器之間數據同步(定時任務cron+rsync)
同步網站內部人員數據信息(定時任務最小週期爲1分鐘)
02. 兩臺服務器之間數據同步(實時任務inotify/sersync/lrsyncd+rsync)
同步網站用戶人員數據信息
1 rsync軟件工做方式
SYNOPSIS
本地數據同步方式
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
1.1 本地數據同步方式(相似於cp)
Local: rsync [OPTION...] SRC... [DEST]
參數 | 含義 |
rsync | 數據同步命令 |
[OPTION...] | rsync命令參數信息 |
SRC | 要同不得數據信息(文件或目錄) |
[DEST] | 將數據傳輸到什麼位置 |
實例演示命令:
[root@backup ~]# rsync /etc/hosts /tmp/
[root@backup ~]# ls /tmp/hosts
/tmp/hosts
1.2 遠程數據同步方式(相似scp)---又稱爲隧道傳輸
Access via remote shell:
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
說明:須要進行交互傳輸數據。若是想實現免交互傳輸數據,須要藉助ssh+key方式實現
pull: 拉: | |
[USER@] : | 以什麼用戶身份傳輸數據信息 |
HOST: | 遠程主機信息(IP地址信息 主機名稱信息) |
SRC: | 遠端要恏過來的數據信息 |
[dest] | 恏到本地什麼位置 |
push:推: | |
SRC: | 本地要懟過去的數據信息 |
DEST | 懟到遠端什麼位置 |
1.3 【實踐操做】pull 拉
從遠端拉文件到當前目錄
[root@nfs01 ~]# touch /tmp/1.txt
[root@backup ~]# rsync nfs01:/tmp/1.txt .
root@nfs01's password:
[root@backup ~]# ll
total 44
-rw-r--r-- 1 root root 0 Oct 11 16:16 1.txt
1.4 【實踐操做】push 推 (目錄)
將本地的hosts文件推到遠端服務器上
[root@backup tmp]# ll
total 4
-rw-r--r-- 1 root root 357 Oct 11 15:12 hosts
使用push的格式 推整個目錄(包括目錄)
[root@backup tmp]# rsync -r /tmp nfs01:/tmp/
root@nfs01's password:
[root@nfs01 tmp]# ll
total 4
drwxr-xr-x 3 root root 4096 Oct 11 16:20 tmp
推整個目錄下的文件(不包括目錄自己)
[root@backup tmp]# rsync -r /tmp/ nfs01:/tmp/
root@nfs01's password:
[root@nfs01 tmp]# ll
total 8
-rw-r--r-- 1 root root 357 Oct 11 16:21 hosts
drwxr-xr-x 3 root root 4096 Oct 11 16:20 tmp
說明:
/tmp --表示將tmp目錄自己及目錄下的內容進行傳輸
/tmp/ --表示只傳輸tmp目錄下面的內容信息
2 守護進程方式同步數據
[root@localhost ~]# uname -a
Linux 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:29:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
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
2.1 配置rsync守護進程方式(須要有服務端與客戶端)
規劃:
一、backup服務器做爲rsync服務端
二、以rysnc客戶端做爲參照物,將數據推到rsync服務器上
2.2 配置rsync服務端(將服務端配置到 backup 服務器上)
第一個里程碑: 軟件是否存在
[root@backup ~]# rpm -qa |grep rsync
rsync-3.0.6-12.el6.x86_64
第二個里程碑: 進行軟件服務配置
[root@backup ~]# vim /etc/rsyncd.conf
uid = rsync
gid = rsync
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
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]
comment = "backup dir by oldboy"
path = /backup
第三個里程:建立rsync用戶
[root@backup ~]# id rsyncid: rsync: No such user
[root@backup ~]# useradd -s /sbin/nologin -M rsync
第四個里程碑: 建立數據備份儲存目錄,目錄修改屬主
[root@backup ~]# mkdir /backup/
[root@backup ~]# chown -R rsync.rsync /backup/
第五個里程碑: 建立認證用戶密碼文件
echo "rsync_backup:oldboy123" >>/etc/rsync.password
chmod 600 /etc/rsync.password
第六個里程碑: 啓動rsync服
rsync --daemon
至此服務端配置完成
[root@backup ~]# ps -ef |grep rsync
root 2076 1 0 17:05 ? 00:00:00 rsync --daemon
root 2163 1817 0 17:38 pts/1 00:00:00 grep --color=auto rsync
[root@backup ~]# netstat -lntup |grep rsync
tcp 0 0 0.0.0.0:873 0.0.0.0:*
LISTEN 2076/rsync
tcp 0 0 :::873 :::*
LISTEN 2076/rsync
2.3 配置rsync客戶端(其餘服務器爲客戶端)
第一個里程碑: 軟件是否存在
[root@nfs01 ~]# rpm -qa |grep rsync
rsync-3.0.6-12.el6.x86_64
第二個里程碑: 建立認證文件
客戶端的認證文件只須要有密碼便可
echo "oldboy123" >>/etc/rsync.password
chmod 600 /etc/rsync.password
第三個里程碑: 實現數據傳輸
交互式
[root@nfs01 ~]# rsync -avzP /etc/hosts rsync_backup@172.16.1.41::backup
Password:
sending incremental file list
hosts
357 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/1)
sent 63 bytes received 33 bytes 9.14 bytes/sec
total size is 357 speedup is 3.72
免交互式
[root@nfs01 ~]# rsync -avzP /etc/hosts rsync_backup@172.16.1.41::backup --
password-file=/etc/rsync.password
sending incremental file list
hosts
357 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/1)
sent 199 bytes received 27 bytes 150.67 bytes/sec
total size is 357 speedup is 1.58
3 rsync守護進程傳輸數據原理
4 rsync 命令同步參數選項&特殊參數
目錄參數 | 參數說明 |
-v,--verbose | 詳細模式輸出,傳輸時的信息 |
-z,--compress | 傳輸時進行壓縮以提升傳輸效率 |
--compress-level=NUM 可按級別壓縮 | |
局域網能夠不用壓縮 | |
-a,--archive (主要) | 歸檔模式,表示以遞歸方式傳輸文件,並保持文件屬性。等於-rtopgDl |
-r,--recursive 歸檔於-a | 對子目錄以遞歸模式,即目錄下的全部目錄都一樣傳輸。小寫r |
-t,--times 歸檔於-a | 保持文件時間信息 |
-o,--owner 歸檔於-a | 保持文件屬主信息 |
-p,--perms 歸檔於-a | 保持文件權限 |
-g,--group 歸檔於-a | 保持文件屬組信息 |
-P,--progress | 顯示同步的過程及傳輸時的進度等信息(大P) |
-D,--devices 歸檔於-a | 保持設備文件信息 |
-l,--links 歸檔於-a | 保留軟鏈接(小寫字母l) |
-e,--rsh=COMMAND | 使用的信道協議(remote shell),指定替代rsh的shell程序。例如 ssh |
--exclude-from=file | 文件名所在目錄文件,便可以實現排除多個文件 |
--bwlimit=RATE | 限速功能 |
--delete | 讓目標目錄SRC和源目錄數據DST一致,即無差別數據同步 |
保持同步目錄及文件屬性: 這裏的-avzP至關於 -vzetopdDlP,生產環境經常使用的參數爲 -avzP 在腳本中能夠報-vP去掉 --progress能夠用-P代替 |
|
daemon啓動擴展參數 | |
--daemon | daemon表示以守護進程的方式啓動rsync服務。 |
--address | 綁定指定IP地址提供服務。 |
--config=FILE | 更改配置文件路徑,而不是默認的/etc/rsyncd.conf |
--port=PORT | 更改其它端口提供服務,而不是缺省的873端口 |
4.1 特殊參數實踐
指定ip:
[root@backup ~]# rsync --daemon --address=172.16.1.41
[root@backup ~]# netstat -lntup |grep 873
tcp 0 0 172.16.1.41:873 0.0.0.0:* LISTEN 2583/rsync
參數測試:
[root@nfs01 ~]# rsync -avzP /etc/services rsync_backup@172.16.1.41::backup --
password-file=/etc/rsync.password
sending incremental file list
services
641020 100% 19.34MB/s 0:00:00 (xfer#1, to-check=0/1)
sent 127417 bytes received 27 bytes 254888.00 bytes/sec
total size is 641020 speedup is 5.03
指定配置文件路徑
[root@backup ~]# rsync --daemon --config=/etc/rsyncd.conf
[root@nfs01 ~]# rsync -avzP /etc/services rsync_backup@172.16.1.41::backup --
password-file=/etc/rsync.password
sending incremental file list
sent 29 bytes received 8 bytes 74.00 bytes/sec
total size is 641020 speedup is 17324.86
服務端指定服務端口:
[root@backup ~]# rsync --daemon --port=5222
[root@backup ~]# netstat -lntup|grep rsync
tcp 0 0 0.0.0.0:5222 0.0.0.0:* LISTEN 2598/rsync
tcp 0 0 :::5222 :::* LISTEN 2598/rsync
本文內容來自 老男孩Linux雲計算運維優秀學員課後筆記整理