文章目錄
- 一、rsync概述
- 二、rsync特性
- 三、rsync原理
- 1、運行模式和埠
- 2、四個名字的解釋
- 3、資料同步方式
- (1)推push
- (2)拉pull
- 四、命令引數
- 五、具體rsync備份資料
- 1、服務端---修改組態檔 :/etc/rsyncd.conf
- 2、服務端--創建于用戶密碼檔案
- 3、服務端--啟動rsync服務
- 4、服務端--在 /var/www/html目錄中,新建檔案
- 5、客戶端--#實作rsyns同步
- 6、客戶端---配置rsync的免密同步
- 7、實時同步
- (1)服務端--將只讀選項關閉
- (2)客戶端--配置監控的引數
- (3)客戶端--安裝inotify-tools輔助工具
- (4)客戶端--配置自動監控同步腳本
- (5)驗證
一、rsync概述
rsync是linux系統下的資料鏡像備份工具,使用快速增量備份工具remote sync可以遠程同步,可以在不同主機之間進行同步,可以實作全量備份與增量備份,保持鏈接和權限,且采用優化的同步演算法,傳輸前執行壓縮,因此非常適合用于架構集中式的備份或異地備份等應用,同時rsync支持本地復制,或者與其他ssh、rsync主機同步,
二、rsync特性
1)可以鏡像保存整個目錄樹和檔案系統
2)可以很容易做到保持原來檔案的權限、時間、軟硬鏈接等等,
3)無須特殊權限即可安裝
4)快速:第一次同步時rsync復制全部內容,但在下一次值傳輸修改過的內容
5)壓縮傳輸:rysnc在傳輸的程序中可以實行壓縮及解壓縮操作,可以使用更少的帶寬
6)安全:可以使用scp、ssh等方式來進行檔案傳輸
7)支持匿名傳輸,以方便進行網站鏡像
8)選擇性保持:符號鏈接、硬鏈接、檔案屬性、權限、時間等
三、rsync原理
1、運行模式和埠
1)采用C/S模式(實際上是一個點到點的傳輸,直接使用rsync命令即可完成)
2)rsync監聽的埠是:873
2、四個名字的解釋
1)發起端:負責發起rsync同步操作的客戶端叫做發起端,通知服務器我要備份你的資料
2)備份源:負責回應來自客戶端rsync同步操作的服務器叫做備份源,需要備份的服務器
3)服務端:運行rsyncd服務,一般來說,需要備份的服務器
4)客戶端:存放備份資料,
3、資料同步方式
(1)推push
一臺主機負責吧資料傳送給其他主機,服務器開銷很大,比較適合后端服務器少的情況
推:目的主機配置為rsync服務器,源主機周期性的使用rysnc命令把要同步的目錄推過去(需要備份的機器是客戶端,存盤備份的機器是服務端)
(2)拉pull
所有主機定時去找一臺主機拉資料,可能就會導致資料緩慢
拉:源主機配置為rysnc服務器,目的主機周期性的使用rync命令把要同步的目錄拉過來(需要備份的機器是服務端,存盤備份的機器是客戶端)
四、命令引數
(1) -a:–archive archive mode 權限保存模式,相當于 -rlptgoD 引數,存檔,遞回,保持屬性等,
(2) -r:–recursive 復制所有下面的資料,遞回處理,
(3) -p:–perms 保留檔案權限,檔案原有屬性,
(4) -t:–times 保留時間點,檔案原有時間,
(5) -g:–group 保留原有屬組,
(6) -o:–owner 保留檔案所有者(root only),
(7) -D:–devices 保留device資訊(root only),
(8) -l:–links 復制所有的連接,拷貝連接檔案,
(9) -z:–compress 壓縮模式,當資料在傳送到目的端進行檔案壓縮,
(10) -H:–hard-links 保留硬鏈接檔案,
(11) -A:–acls 保留ACL屬性檔案,需要配合–perms,
(12) -P:-P引數和 --partial --progress 相同,只是為了把引數簡單化,表示傳進度,
(13) --version:輸出rsync版本,
(14) -v:–verbose 復雜的輸出資訊,
(15) -u:–update 僅僅進行更新,也就是跳過已經存在的目標位置,并且檔案時間要晚于要備份的檔案,不覆寫新的檔案,
(16) --port=PORT:定義rsyncd(daemon)要運行的port(預設為tcp 873),
(17) --delete:洗掉那些目標位置有的檔案而備份源沒有的檔案,
(18) --password-file=FILE :從 指定密碼檔案中獲取密碼,
(19) --bwlimit=KBPS:限制 I/O 帶寬,
(20) --filter “-filename”:需要過濾的檔案,
(21) --exclude=filname:需要過濾的檔案,
(22) --progress:顯示備份程序,
注釋:通常常用的選項 –avz
-z的命令一般用在小檔案進行壓縮,資料量比較大的檔案在傳輸的程序中就比較慢,如果再壓縮傳輸會更加慢,所以根據需求來選擇是否需要加這個引數
五、具體rsync備份資料
rsync 是系統自帶的,無需額外安裝,如果是最小化安裝的話,用 yum安裝一下即可,
1、服務端—修改組態檔 :/etc/rsyncd.conf
[root@master yum.repos.d]# vi /etc/rsyncd.conf
uid = nobody
gid = nobody
use chroot = yes '//禁錮在源目錄'
address = 192.168.233.131 '//監聽地址'
port 873 '//監聽埠號'
log file = /var/log/rsyncd.log '//日志檔案位置'
pid file = /var/run/rsyncd.pid '//存放行程ID的檔案位置'
hosts allow = 192.168.233.133 '//允許訪問的客戶機地址'
[wwwroot] '//共享模塊名稱'
path = /var/www/html '//源目錄的實際路徑'
comment = Document Root of www.51xit.top
read only =yes '//是否只讀'
dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z '//同步時不在壓縮的檔案型別'
auth users = lisi '//授權賬戶'
secrets file = /etc/rsyncd_users.db '//存放賬戶資訊的資料檔案'
2、服務端–創建于用戶密碼檔案
組態檔制定的路徑創建
[root@master yum.repos.d]# rsync --daemon '//啟動rsync服務,如果要停止這個服務請使用kill $(cat /var/run/rsyncd.pid)'
[root@master yum.repos.d]# netstat -ntap |grep rsync
tcp 0 0 192.168.233.131:873 0.0.0.0:* LISTEN 4371/rsync

3、服務端–啟動rsync服務
如果要停止服務 要將pid檔案洗掉 在/var/run/rsyncd.pid
[root@master yum.repos.d]# rsync --daemon '//啟動rsync服務,如果要停止這個服務請使用kill $(cat /var/run/rsyncd.pid)'
[root@master yum.repos.d]# netstat -ntap |grep rsync
tcp 0 0 192.168.233.131:873 0.0.0.0:* LISTEN 4371/rsync
4、服務端–在 /var/www/html目錄中,新建檔案
[root@master yum.repos.d]# cd /var/www/html/
[root@master html]# ls
[root@master html]# touch 111.html
[root@master html]# touch 222.html
[root@master html]# ls
111.html 222.html
'//創建完成后,我們稍后到客戶機上操作,進行驗證'
5、客戶端–#實作rsyns同步
查看rsync的軟體是否安裝
[root@localhost ~]# rpm -q rsync
rsync-3.1.2-10.el7.x86_64
[root@slave opt]# mkdir myweb
'//方法一'
[root@slave opt]# rsync -avzH --delete lisi@192.168.233.131::wwwroot /opt/myweb
Password:
receiving incremental file list
./
111.html
222.html
sent 98 bytes received 207 bytes 87.14 bytes/sec
total size is 0 speedup is 0.00
[root@slave opt]# ls /opt/myweb/
111.html 222.html
'//方法二'
[root@slave opt]# rsync -avz rsync://lisi@192.168.233.131/wwwroot /root
Password:
receiving incremental file list
./
111.html
222.html
sent 98 bytes received 207 bytes 87.14 bytes/sec
total size is 0 speedup is 0.00
6、客戶端—配置rsync的免密同步
為了寫腳本能方便一些,使用免密登錄
[root@slave opt]# vi /etc/server.pass '//創建密碼檔案'
lisi123
[root@slave opt]# chmod 600 /etc/server.pass '//給密碼檔案權限'
[root@slave opt]# rm -rf myweb/* '//先洗掉/opt/myweb目錄下的內容用來測驗
[root@slave opt]# ls myweb/
[root@slave opt]# rsync -az --delete --password-file=/etc/server.pass lisi@192.168.233.131::wwwroot /opt/myweb '//指定剛剛創建的密碼檔案,發現已經不需要輸入密碼了'
[root@slave opt]# ls myweb/
111.html 222.html
可以創建周期性任務進行同步源服務器
[root@slave opt]# crontab -e
30 22 * * * /usr/bin/rsync -az --delete --password-file=/etc/server.pass lisi@192.168.233.131::wwwroot /opt/myweb/ '//每天晚上10點半對服務器網站目錄更新一次'
[root@slave opt]# systemctl restart crond
[root@slave opt]# systemctl enable crond
7、實時同步
實作思路如下

(1)服務端–將只讀選項關閉
[root@master html]# vi /etc/rsyncd.conf
read only = no '//改為no'
[root@master html]# kill `cat /var/run/rsyncd.pid` '//關閉rsync服務'
[root@master html]# netstat -ntap |grep rsync
[root@master html]# rsync --daemon '//開啟rsync服務'
[root@master html]# netstat -ntap |grep rsync
tcp 0 0 192.168.233.131:873 0.0.0.0:* LISTEN 88302/rsync
[root@master html]# chmod 777 /var/www/html
(2)客戶端–配置監控的引數
[root@slave opt]# cat /proc/sys/fs/inotify/max_queued_events '//監控佇列大小'
16384
[root@slave opt]# cat /proc/sys/fs/inotify/max_user_instances '//最多監控實體數'
128
[root@slave opt]# cat /proc/sys/fs/inotify/max_user_watches '//每個實體最多監控檔案數'
8192
[root@slave opt]# vi /etc/sysctl.conf
[root@slave opt]# sysctl -p
fs.inotify.max_queued_events = 32768
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
(3)客戶端–安裝inotify-tools輔助工具
[root@slave opt]# tar zxf inotify-tools-3.14.tar.gz
[root@slave opt]# cd inotify-tools-3.14/
[root@slave inotify-tools-3.14]# yum install gcc gcc-c++ -y
[root@slave inotify-tools-3.14]# ./configure
[root@slave inotify-tools-3.14]# make && make install
重新打開一個終端
[root@slave ~]# inotifywait -mrq -e modify,create,move,delete /opt/myweb '//運行持續監控監控'
inotifywait:用于持續監控,實時輸出結果
inotifywatch:用于短期監控,任務完成后再出結果
(4)客戶端–配置自動監控同步腳本
inotifywait 監控軟體
-m, 持續進行監控
-r, 遞回監控所有子物件
-q , 簡化輸出資訊,
-e ,指定要監控哪些事件型別
modify 修改
create 創建
move 移動
delete 洗掉
[root@slave inotify-tools-3.14]# vim /opt/inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,move,delete /var/www/html/"
RSYNC_CMD="rsync -avzH --delete --password-file=/etc/server.pass /var/www/html/ lisi@192.168.233.133::wwwroot/"
#讀取輸出的監控記
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
#如果rsync未在執行,則立即啟動
if [ $(pgrep rsync | wc -l) -le 0 ]; then
$RSYNC_CMD
fi
done
[root@slave inotify-tools-3.14]# chmod 777 /opt/myweb/
[root@slave inotify-tools-3.14]# chmod +x /opt/inotify.sh
[root@slave inotify-tools-3.14]# cd ..
[root@slave opt]# ./inotify.sh '//執行腳本進行監控'
(5)驗證
[root@slave myweb]# touch 111.html '//客戶機創建檔案,洗掉檔案也可以同步成功'
[root@master html]# ll '//服務端查看'
總用量 0
-rw-r--r--. 1 root root 0 3月 24 09:22 111.html '//同步成功'
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/20340.html
標籤:其他
