Rsync 簡介

Rsync 是一款開源的,快速的,多功能的,可實現全量及增量(差異化備份)的本地或遠程數據同步備份的優秀工具。

Rsync軟體適用於Unix、Linux、Windows等多種操作系統。

1)可使本地和遠程兩臺主機之間的數據快速複製同步鏡像,遠程備份的功能,這個功能類似ssh帶scp命令,但又優於scp命令的功能,scp每次都是全量拷貝,而rsync可以增量拷貝。

2)rsync還可以在本地主機的不同分區或目錄之間全量及增量的複製數據,

3)利用rsync還可以實現刪除文件和目錄的功能。相當於rm

4)rsync相當於scp,cp.rm但是還優於他們每一個命令。

在同步備份數據時,默認情況下rsync通過獨特的「quick check」 演算法,它僅同步大小或者最後修改時間發生變化的文件或目錄,當然也可以是根據許可權,屬主等屬性的變化同步,但需要指定相應的參數,甚至可以實現只同步一個文件裏有變化的內容部分,所以可以實現快速的同步備份數據。

CentOS 5 rsync2.x 比對方法,把所有的文件比對一遍,然後進行同步。
CentOS 6 rsync3.x 比對方法,一邊比對差異,一邊對差異的部分進行同步。

Rsync 特性

1)支持拷貝特殊文件如鏈接文件,設備等。
2)可以有排除指定文件或目錄同步的功能,相當於打包命令tar的排除功能。
3)可以做到保持源文件或目錄的許可權,時間,軟硬鏈接,屬主,組等屬性均不改變 -p.
4)可以實現增量同步,即只同步發生變化的數據,因此數據傳輸的效率很高,tar -N.
5)可以使用rcp,rsh,ssh,等方式來配合傳輸文件(rsync本身不對數據加密)
6)可以通過soket(進程方式)傳輸文件和數據(服務端和客戶端)*****
7)支持匿名的或認證的(無需系統用戶)的進程模式傳輸,可實現方便安全的進程數據備份及鏡像。

實時同步(解決存儲伺服器等單點問題)

利用rsync結合inotify的功能做實時的數據同步,根據存儲伺服器上目錄的變化,把變化的數據通過inotify或sersync結合rsync命令,同步到備份伺服器,還可以通過drbd方案以及雙寫的方案實現雙機數據同步。

Rsync的工作方式

大致使用三種主要的傳輸數據的方式。

1)單個主機本地之間的數據傳輸(此時類似於cp命令的功能)
2)藉助rcp,ssh等通道來傳輸數據(此時類似於scp命令的功能)
3)以守護進程(socket)的方式傳輸數據(這個是rsync自身的重要功能)

服務端與客戶端安裝 Rsync

修改主機名

hostname backup
vi /etc/sysconfig/network

安裝 rsync 與 依賴

yum -y install rsync xinetd

vi /etc/xinetd.d/rsync
將yes 修改為no IPV6修改為IPV4

rsync 命令同步參數詳解

local(本地)模式的命令參數

-v --verbose 詳細模式輸出,傳輸時的進度等信息。
-z --compress 傳輸時進行壓縮以提高傳輸效率,
--compress-level=NUM可按級別壓縮

重要的命令

-a --archive 歸檔模式,表示以遞歸方式傳輸文件,並保持所有文件屬性,等價於-rtopgDl
-r 對子目錄以遞歸模式,即目錄下的所有目錄都同樣傳輸,注意是小寫的r.
-o 保持文件屬性信息
-p 保持文件許可權
-g 保持文件屬組信息
-P 顯示同步的過程及傳輸時的進度等信息
-D 保持設備文件信息
-l 保持軟連接
-avzP 提示:這裡的 相當於 -vzrtopgDlP(還多了Dl功能)生產環境常用
-avz 定時任務就不用輸出過程了可以-az

需瞭解的命令

-e 使用的信道協議,指定替代rsh的shell程序,例如:ssh
--exclude=PATTERN 指定排除不需要傳輸的文件模式(和tar參數一樣)--exclude=file(文件名所在的目錄文件)(和tar參數一樣)--delete 讓目標目錄SRC和源目錄數據DST一致。

注意:/tmp/ rsync如果tmp/ 加上斜線的話就表示只選中斜線後的文件,不包含tmp。

如果不加上斜線 tmp 那麼就是包含目錄本身和目錄之下的文件。

做數據同步容易將帶寬佔滿,導致網站無法訪問

rsync scp ftp 都有限速功能解決:man rsync裡面有一個限速的參數。我之前剛做運維的時候,在備份數據時,沒考慮業務低谷時間點,將帶寬佔滿了,導致網站無法正常訪問。發現問題之後,我立即停止數據備份,然後man 了一下,才發現rsync有限速參數。盡量不要在業務高並發的時候做備份,要在業務低谷時間段進行,限速備份。當然,scp,ftp都有限速的功能。

藉助ssh通道在不同主機之間傳輸數據

man rsyncd.conf

使用-e參數,利用ssh隧道進行文件傳輸
[root@backup ~]# rsync -avz /etc/hosts -e ssh -p 22 [email protected]:/mnt
可以使用ssh key 免密鑰登錄,然後可以做定時任務。

優化ssh (讓連接伺服器進行rsync更快)

[root@backup ~]# vim /etc/ssh/sshd_config
GSSAPIAuthentication no (把這個的注釋去掉,也就是打開)
#GSSAPIAuthentication yes(把這個注釋掉,也就是關閉)UseDNS no (改成no)

以守護進程(socket)的方式傳輸數據

rsync 命令使用用法

rsync -參數 用戶名@同步伺服器的IP::rsyncd.conf中那個方括弧裏的內容(配置文件中的模塊名) 本地存放路徑。

rsync -avzP [email protected]::nemo /backup

伺服器端的配置過程

安裝rysnc

yum -y install rsync xinetd

vi /etc/xinetd.d/rsync
將yes 修改為no IPV6修改為IPV4

1、查看rsync安裝包

[root@backup ~]# rpm -qa rsync

2、添加rsync服務的用戶,管理本地目錄

[root@backup ~]# useradd rsync -s /sbin/nologin -M
[root@backup ~]# tail -1 /etc/passwdrsync:x:501:501::/home/rsync:/sbin/nologin

3、生成rsyncd.conf配置文件

查看 rsyncd.conf

[root@backup backup]# cat /etc/rsyncd.conf
config_______________start
#15:01 2007-6-5
#rsyncd.conf start##
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
[backup]
path = /backup
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
#rsync_config____________end

配置rsyncd.conf

[root@backup ~]# vim /etc/rsyncd.conf
#rsync_config_______________start
#15:01 2018-6-5
#rsyncd.conf start##
uid = rsync #用戶遠端的命令使用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 #日誌文件
[backup] #模塊名稱
path = /backup #伺服器端提供訪問的目錄
ignore errors #忽略錯誤
read only = false #可寫
list = false #不讓列表(相當於ls)
hosts allow = 172.16.1.0/24 #允許的網段
hosts deny = 0.0.0.0/32 #拒絕的網段
auth users = rsync_backup #連接的虛擬用戶,非系統用戶
secrets file = /etc/rsync.password #虛擬用戶的賬號密碼文件
#rsync_config____________end

4、rsyncd.conf的auth users配置賬戶,遠程連接

並根據secrets file參數生成密碼文件

法一
echo "rsync_backup:cloudbility" >/etc/rsync.password
cat /etc/rsync.password

法二
[root@backup ~]# vim /etc/rsync.password
rsync_backup:cloudbility

[root@backup ~]# cat /etc/rsync.password
rsync_backup:cloudbility

5、為密碼文件配置許可權

chmod 600 /etc/rsync.password
ls -l /etc/rsync.password

6、創建共享的目錄並授權rsync服務管理

法一:
[root@backup ~]# mkdir /backup

[root@backup ~]# ls -ld /backup/
drwxr-xr-x 2 root root 4096 1月 16 20:08 /backup/
(如果不修改許可權的話,遠程訪問過來是用rsync但是這個目錄的屬組和屬主都收root 就無法把遠方的數據推送過來,沒有寫許可權。)

[root@backup ~]# chown rsync.rsync /backup/
(更改屬組和屬主)

[root@backup ~]# ls -ld /backup/
drwxr-xr-x 2 rsync rsync 4096 1月 16 20:08 /backup/

法二:
mkdir /backup -p
chown -R rsync.rsync /backup
如果沒有/backup目錄,就會chdir failed.(失敗的)

7、啟動rsync服務並檢查

[root@backup ~]# rsync --daemon
開啟rsync服務

[root@backup ~]# ps -ef|grep rsync|grep -v grep
root 5116 5100 0 19:14 pts/0 00:00:00 vim /etc/rsyncd.conf
root 5193 1 0 20:05 ? 00:00:00 rsync --daemon
(為什麼是root在運行呢?因為遠程訪問的用戶才會使用rsync來使用,上面配置文件有寫)

查看運行埠
[root@backup ~]# lsof -i :873
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsync 5193 root 3u IPv4 19935 0t0 TCP *:rsync (LISTEN)
rsync 5193 root 5u IPv6 19936 0t0 TCP *:rsync (LISTEN)

[root@backup ~]# netstat -lntup|grep 873
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 5193/rsync
tcp 0 0 :::873 :::* LISTEN 5193/rsync

8、加入開機自啟動

[root@backup ~]# echo "/usr/bin/rsync --damon" >>/etc/rc.local

[root@backup ~]# tail -1 /etc/rc.local
/usr/bin/rsync --damon


排錯過程

1、輸出結果

2、日誌 tail /var/log/rsyncd.log

3、熟練部署過程(原理)


rsync客戶端操作方法

1、生成連接伺服器的密碼文件

法一:
echo "cloudbility" >/etc/rsync.password

法二:
[root@nfs01 ~]# vim /etc/rsync.password

[root@nfs01 ~]# cat /etc/rsync.password
cloudbility2、為密碼文件配置許可權
[root@nfs01 ~]# chmod 600 /etc/rsync.password
[root@nfs01 ~]# ll /etc/rsync.password-rw------- 1 root root 7 1月 16 20:58 /etc/rsync.password

2、為密碼文件配置許可權

[root@nfs01 ~]# chmod 600 /etc/rsync.password

[root@nfs01 ~]# ll /etc/rsync.password
-rw------- 1 root root 7 1月 16 20:58 /etc/rsync.password

3、同步文件

創建樣本

[root@nfs01 ~]# mkdir /backup -p

[root@nfs01 ~]# cd /backup/

[root@nfs01 backup]# touch stu{01..100}

[root@nfs01 backup]# ls
stu001 stu010 stu02 stu029 stu038 stu047 stu056 stu065 stu074 stu083 stu092
stu002 stu011 stu020 stu03 stu039 stu048 stu057 stu066 stu075 stu084 stu093推送到backup server:
法一:需要密碼[root@nfs01 backup]# rsync -avz /backup/ [email protected]::backup/(模塊名)法二:無需密碼[root@nfs01 backup]# rsync -avz /backup/ [email protected]::backup/(模塊名) --password-file=/etc/rsync.password法三:無需密碼[root@nfs01 backup]# rsync -avz /backup/ rsync://[email protected]/backup/(模塊名) --password-file=/etc/rsync.password

推送到backup server:

法一:需要密碼
[root@nfs01 backup]# rsync -avz /backup/ [email protected]::backup/(模塊名)

法二:無需密碼
[root@nfs01 backup]# rsync -avz /backup/ [email protected]::backup/(模塊名) --password-file=/etc/rsync.password

法三:無需密碼
[root@nfs01 backup]# rsync -avz /backup/ rsync://[email protected]/backup/(模塊名) --password-file=/etc/rsync.password排除同步:

從backup server拉取/backup下的文件到本地/backup下。

法一:需要密碼
[root@nfs01 backup]# rsync -avz [email protected]::backup(模塊名) /backup/

法二:免密
[root@nfs01 backup]# rsync -avz [email protected]::backup(模塊名) /backup/ --password-file=/etc/rsync.password

法三:免密
[root@nfs01 backup]# rsync -avz rsync://[email protected]/backup/(模塊名) /backup/ --password-file=/etc/rsync.password

提示上述的backup為模塊名,不是路徑

增加模塊

[root@backup backup]# vim /etc/rsyncd.conf
#15:01 2018-6-5
#rsyncd.conf start##
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]
path = /backup
[cloudbility]
path = /cloudbility
##rsync_config____________end

排除同步:

排除推送

排除單個文件:

--exclude=a (排除a)

[root@nfs01 backup]# rsync -avz --exclude=a /backup/ [email protected]::backup/ --password-file=/etc/rsync.password
sending incremental file list
./bcdefg

排除多個文件:

1)
排除a 和b
[root@nfs01 backup]# rsync -avz --exclude={a,b} /backup/ [email protected]::backup/ --password-file=/etc/rsync.password
sending incremental file list
./cdefg

2)
排除連續的a-f
[root@nfs01 backup]# rsync -avz --exclude={a..f} /backup/ [email protected]::backup/ --password-file=/etc/rsync.password
sending incremental file list
./g

sent 75 bytes received 30 bytes 210.00 bytes/sec
total size is 0 speedup is 0.00

1)拉取和推送都可以排除。

2)也可以服務端排除,配置文件裏參數。

3)exclude=a b c d

完全同步:無差異同步--delete

[root@nfs01 backup]# rsync -avz --delete /backup/ [email protected]::backup/ --password-file=/etc/rsync.password
sending incremental file list

abcdef

rsync三種工作模式

1)local(本地模式):(cd,rm)

2)通道模式:
rsync -avzP -e ssh -p 22 /etc [email protected]:/tmp/
一般配合ssh key免密鑰傳輸,結合定時任務。

3)daemon模式
內網不需要加密,加密性能有損失。

如果要外網的話使用vpn(PPTP。openVPN,ipsec)

rsync服務模式故障常見問題解答

1)小 BUG

[root@backup backup]# vim /etc/rsyncd.conf
#hosts deny = 0.0.0.0/32
把 hosts deny(拒絕的ip段)注釋掉,因為當

hosts allow = 172.16.1.0/24
#hosts deny = 0.0.0.0/32
這兩個在一起的時候,發現10段的ip 也能把數據推送到backup server。所以必須注釋掉
hosts deny。

提示:更改配置文件之後要重啟服務,因為每次Linux都是把配置文件放到內存。
先殺死進程,然後檢查
[root@backup backup]# pkill rsync
[root@backup backup]# lsof -i :873

重啟再檢查看看
[root@backup backup]# rsync --daemon
[root@backup backup]# lsof -i :873
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsync 7718 root 4u IPv4 33811 0t0 TCP *:rsync (LISTEN)
rsync 7718 root 5u IPv6 33812 0t0 TCP *:rsync (LISTEN)

2)服務端沒有這個目錄

提示報錯信息

[root@nfs01 backup]# rsync -avz /backup/ [email protected]::backup/ --password-file=/etc/rsync.password
@ERROR: chdir failed

解決方法:
服務端創建目錄
[root@backup backup]# mkdir /backup
[root@backup backup]# ll -d /backup/
drwxr-xr-x 2 root root 4096 Jan 17 15:52 /backup/

[root@backup backup]# chown -R rsync.rsync /backup/
(/etc/rsyncd.conf配置文件裏的uid和gid)

3)許可權不夠

提示報錯信息

[root@nfs01 backup]# rsync -avz /backup/ [email protected]::backup/ --password-file=/etc/rsync.password sending incremental file list./
rsync: failed to set times on "." (in backup): Operation not permitted (1)
stu1
stu10
stu2
stu3
stu4
stu5
stu6
stu7
stu8
stu9
rsync: mkstemp ".stu1.oraZ3Y" (in backup) failed: Permission denied (13)
rsync: mkstemp ".stu10.n1jKm7" (in backup) failed: Permission denied (13)
rsync: mkstemp ".stu2.dLFwFf" (in backup) failed: Permission denied (13)
rsync: mkstemp ".stu3.LKKjYn" (in backup) failed: Permission denied (13)
rsync: mkstemp ".stu4.nSI7gw" (in backup) failed: Permission denied (13)
rsync: mkstemp ".stu5.p4CWzE" (in backup) failed: Permission denied (13)
rsync: mkstemp ".stu6.HE5OSM" (in backup) failed: Permission denied (13)
rsync: mkstemp ".stu7.jGRIbV" (in backup) failed: Permission denied (13)
rsync: mkstemp ".stu8.p4cDu3" (in backup) failed: Permission denied (13)
rsync: mkstemp ".stu9.EZbyNb" (in backup) failed: Permission denied (13)

sent 467 bytes received 201 bytes 1336.00 bytes/sec
total size is 0 speedup is 0.00rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]
解決方法[root@backup backup]# ll -d /backup/
drwxr-xr-x 2 root root 4096 Jan 17 15:52 /backup/

[root@backup backup]# chown -R rsync.rsync /backup/ (/etc/rsyncd.conf配置文件裏的uid和gid)

4)沒有創建uid

提示錯誤信息

[root@nfs01 backup]# rsync -avz /backup/ [email protected]::backup/ --password-file=/etc/rsync.password
@ERROR: invalid uid rsync

解決方法:
[root@backup backup]# useradd rsync -s /sbin/nologin -M

5)客戶端/etc/rsync.password 配置文件裏的密碼錯誤(注意空格)

[root@nfs01 backup]# rsync -avz /backup/ [email protected]::backup/ --password-file=/etc/rsync.password
@ERROR: auth failed on module backup

解決:
查看服務端的日誌配置文件的報錯信息。
[root@backup backup]# cat /var/log/rsyncd.log
2017/01/17 16:04:36 [7813] auth failed on module backup from unknown (172.16.1.31): password mismatch

提示我們密碼錯誤:
查看伺服器端的配置文件和密碼,然後,再看客戶端的。
[root@backup backup]# vim /etc/rsync.password
rsync_backup:cloudbility

6)連接被拒絕

提示信息

[root@nfs01 backup]# rsync -avz /backup/ [email protected]::cloudbility/
rsync: failed to connect to 172.16.1.41: Connection refused (111)

解決,
1)服務端防火牆是否關閉iptables

2)873埠是否開放。
重啟rsync服務。
[root@backup cloudbility]# rsync --daemon
[root@backup cloudbility]# lsof -i :873

rsync守護進程(daemon)服務傳輸數據排錯思路:

rsync服務端排錯思路

1)查看rsync服務配置文件路徑是否正確,正確的默認路徑為:/etc/rsyncd.conf

2)查看配置文件裏的host allow.host deny允許的網段是否允許客戶端訪問的IP網段。

3)查看配置文件中path參數裏的路徑是否存在,許可權是否正確(正常應為位置文件中的UID參數對應的屬主和組)

4)查看rsync服務是否啟動,查看命令為:ps -ef|grep rsync. 埠是否存在 netstat -lnt|grep 873.

5)查看iptables防火牆和SELinux是否開啟允許rsync服務通過,也可以考慮關閉。

6)查看服務端rsync配置的密碼文件許可權是否是600;密碼文件格式是否正確。 正確格式為 用戶名:密碼 。文件路徑和配置文件裏的secrect files參數對應。

7)如果是推送數據,要查看下,配置rsyncd.conf文件中用戶是否對模塊下的目錄有可讀寫許可權

rsync客戶端排除思路

1)查看客戶端rsync配置的密碼文件是否為600許可權,密碼文件格式是否正確。
注意,僅西藥有密碼,並且和服務端的密碼一致。

2)用telnet連接rsync伺服器IP地址873埠,查看服務是否啟動
(可測試服務端防火牆是都阻擋)。 telnet 10.0.0.41 873

3)客戶端執行命令時rsync -avzP [email protected]::cloudbility/test/test --password-file=/etc/rsync.password
此命令的細節要記清楚,尤其是10.0.0.41::cloudbility/test/處的雙冒號及隨其後的cloudbility
的模塊名稱;

rsync優缺點:

rsync優點:

1)增量備份,支持socket(daemon守護進程),集中備份(支持推拉,都是以客戶端為參照物);
2)遠程SEHLL通道模式還可以加密(SSH)傳輸,socket(daemon守護進程)需要加密傳輸,可以利用VPN服務或ipsec服務;

rsync缺點:

1)大量小文件同步的時候,比對時間較長,有的時候,rsync進程可能會停止。
2)同步大文件,10G這樣的大文件有時也會出現問題,中斷。未完整同步之前,是隱藏文件.可以通過續傳等參數實現傳輸,一次性遠程拷貝可以用scp;

(完)

行雲管家官網:

行雲管家【官網】-領先的雲計算管理平臺-雲安全,堡壘機,自動化運維?

www.cloudbility.com

運維之路社區:

Rsync 數據同步工具應用指南?

www.opsroad.com
圖標

推薦閱讀:
相關文章