遠程同步工具 ---- rsync
前言:
rsync(Remote Sync)是linux系統下的數據鏡像備份工具,使用快速增量備份工具rsync可以遠程同步,支持本地複製或其他ssh、rsync主機同步。 rsync使得本地和遠程兩個主機之間的文件達到同步,只傳送兩個文件不同的部分,不像ftp那樣需要全備份。rsync可以根據數據的變化進行差異備份,從而減少數據流量,提高工作效率 。
一、rsync的介紹:
1、特點:
-
可以鏡像保存整個目錄樹和文件系統;
-
可以很容易做到保持原來文件的權限、時間、軟硬鏈接等等;
-
無須特殊權限即可安裝;
-
快速:第一次同步時 rsync 會複製全部內容,但在下一次只傳輸修改過的文件。rsync 在傳輸數據的過程中可以實行壓縮及解壓縮操作,因此可以使用更少的帶寬。
-
安全:可以使用scp、ssh等方式來傳輸文件,當然也可以通過直接的socket連接。
-
支持匿名傳輸,以方便進行網站鏡像
2、rsync同類服務
- sync 同步:刷新文件系統緩存,強制將修改過的數據塊寫入磁盤,並且更新快。
- async 異步:將數據先放到緩衝區,再週期性(一般是30s)的去同步到磁盤。
- rsync 遠程同步
3、rsync主要分爲三個配置文件
-
tsyncd.conf(主配置文件)
-
rsync.secrets(密碼文件)
-
rsyncd.motd(服務器信息文件)
4、rysnc常用選項
二:實驗步驟
- ~ 兩臺虛擬機,一臺作爲rsync同步源(192.168.48.128),一臺作爲客戶端(192.168.48.130);
- 兩臺虛擬機都要安裝rsync 。rsync是系統自帶的,無需安裝,如果虛擬機是最小化安裝的話,需要yum安裝下。
1、安裝httpd服務
[root@rsync ~]# yum install httpd -y
2、修改rsync配置文件
[root@rsync ~]# vim /etc/rsyncd.conf
3、編輯存放賬戶信息的數據
[root@rsync ~]# vi /etc/rsyncd_users.db ‘添加賬戶與密碼’
backuper:123 授權賬戶:密碼
[root@rsync ~]# chmod 600 /etc/rsyncd_users.db ‘權限設置爲100,否則客戶端認證會失敗’
4、啓動sync服務
[root@rsync ~]# rsync --daemon
[root@rsync ~]# netstat -ntap | grep rsync
tcp 0 0 192.168.48.128:873 0.0.0.0:* LISTEN 3778/rsync
5、在/var/www/html目錄中新建文件
[root@rsync ~]# cd /var/www/html/
[root@rsync html]# vim kg.html
this is kg
[root@rsync html]# vim ac.html
this is ac
這時候服務端的源配置完成了。
在客戶端配置
1、使用rsync備份工具
(用法與cp差不多)
[root@client ~]# rsync /etc/fstab /opt
[root@client ~]# cd /opt
[root@client opt]# ls
fstab rh
[root@client opt]# rsync -rl /etc/fstab /boot/grub /opt
[root@client opt]# ls
fstab grub rh
2、配置源
(兩種方法)
方法1:用戶名@主機地址::共享模塊名
方法2: rsync://用戶名@主機地址/共享模塊名
方法1:[root@client opt]# rsync -avz [email protected]::wwwroot /opt
方法2:[root@client opt]# rsync -avz rsync://[email protected]/wwwroot /opt
3、rsync同步操作
[root@client opt]# rsync -avzH --delete [email protected]::wwwroot /opt/myweb
[root@client opt]# cd myweb/
[root@client myweb]# ls
ac.html kg.html ‘看到從rsync服務器同步過來了’
4、rsync免密碼交互
[root@client myweb]# vi /etc/server.pass
123
[root@client myweb]# cat /etc/server.pass
123
[root@client myweb]# chmod 600 /etc/server.pass
[root@client myweb]# rsync -azvH --delete --password-file=/etc/server.pass [email protected]::wwwroot /opt/myweb/ ‘無需輸密碼就可以進入’
[root@client myweb]# ls
ac.html kg.html
5、添加週期性計劃任務
[root@localhost wwwroot]# crontab -e ‘每晚11點半對服務器網址目錄更新一次’
30 23 * * * /usr/bin/rsync -az --delete --password-file=/etc/server.pass [email protected]::wwwroot /opt/myweb/
[root@localhost wwwroot]# systemctl restart crond
[root@localhost wwwroot]# systemctl enable crond
三:rsync+inotify實時同步
1、inotify介紹:
(Linux內核的inotify機制)
Inotify 是一個 Linux特性,它監控文件系統操作,比如讀取、寫入和創建。Inotify 反應靈敏,用法非常簡單,並且比 cron 任務的繁忙輪詢高效得多 。
- 從版本 2.6.13 開始提供;
- 可以監控文件系統的變化情況,並作出通知響應;
- 輔助軟件:inotify-tools
2、rsync 實時同步:
- 定期同步的不足:
執行備份的時間固定,延遲明細,實時性差;
當同步源長期不變化時,密集的定期任務是不必要的。
- 實時同步的優點:
一旦同步源出現變化,立即啓用備份;
只要同步源不變化,則不執行備份。
四、操作步驟
在客戶端配置
1、修改內核參數
[root@client myweb]# vim /etc/sysctl.conf
‘末行添加’
fs.inotify.max_queued_events = 16384 ‘監控隊伍大小’
fs.inotify.max_user_instances = 1024 ‘最多監控實例數 ’
fs.inotify.max_user_watches = 1048576 ‘每個實例最多監控文件數
’
[root@client myweb]# sysctl -p
2、安裝inotify-tools輔助工具
inotifywait:用於持續監控,實時輸出結果
inotifywatch:用於短期監控,任務完成後再出結果
[root@client myweb]# mkdir /abc
[root@client myweb]# mount.cifs //192.168.0.107/share /abc
[root@client abc]# tar zvxf inotify-tools-3.14.tar.gz -C /opt
[root@localhost opt]# cd inotify-tools-3.14/
[root@localhost inotify-tools-3.14]# ./configure
[root@localhost inotify-tools-3.14]# make && make install
[root@localhost ~]# inotifywait -mrq -e modify,create,move,delete /opt/myweb ‘監控’
3、通過inotifywait觸發rsync同步操作
使用while、read持續獲取監控結果
[root@client inotify-tools-3.14]# vim /opt/inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /opt/myweb/"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /opt/myweb/ [email protected]::wwwroot"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
if [ $(pgrep rsync | wc -l) -le 0 ] ; then
$RSYNC_CMD
# echo "${FILE} was rsynced" >>/opt/inotify_rsync.log
fi
done
[root@client opt]# chmod +x inotify.sh ‘添加權限’
4、 關閉只讀模式,並重啓服務
(在同步源服務器上配置)
[root@localhost html]# vim /etc/rsyncd.conf
[root@rsync html]# kill $(cat /var/run/rsyncd.pid) ‘關閉rsyncd服務’
[root@rsync html]# rsync --daemon ‘啓動rsyncd服務’
[root@rsync html]# netstat -anpt |grep rsync
tcp 0 0 192.168.48.128:873 0.0.0.0:* LISTEN 5785/rsync
[root@rsync html]# chmod 777 /var/www/html/
一定注意兩邊的同步目錄權限都設置777。
5、在客戶機上操作
[root@localhost ~]# /opt/inotify.sh ‘執行腳本’
[root@localhost ~]# chmod 777 /opt/myweb/ ‘需要在開一個終端’
[root@localhost ~]# vim /opt/myweb/abcd.html ‘裏面插入任意數據’
這時在同步源服務器上可以發現多了個文件。
如果在客戶端刪除這個文件,同時源服務器也會同步刪除這個文件的 。