做網(wǎng)站前期工作網(wǎng)絡(luò)銷售怎么樣
目錄
rsync
rsync概述
rsync優(yōu)缺點
rsync參數(shù)
rsync命令
rsync同步源
linux 安裝rsync
安裝rsync服務(wù)端
安裝rsync客戶端
windows 安裝rsync
rsync實踐
inotify-tools?
inotify-tools概述?
?innotify-tools 命令、參數(shù)、事件
?rsync客戶端安裝inotify-tools
?innotify-tools實踐
rsync+inotify-tools實踐
加入開機自動執(zhí)行
數(shù)據(jù)均由rsync客戶端推向服務(wù)端進行傳輸
rsync傳輸命令最好手敲 否則可能會出現(xiàn)模塊用戶密碼無法識別的情況
官網(wǎng):rsync
Linux版下載:rsync download
Windows版下載:cwRsync - Rsync for Windows | itefix.net
rsync
rsync概述
?rsync(remote sync)遠程同步,rsync是linux系統(tǒng)下的數(shù)據(jù)鏡像備份工具。使用快速增量備份工具Remote Sync可以遠程同步,支持本地復(fù)制,或者與其他SSH、rsync主機同步。已支持跨平臺,可以在Windows與Linux間進行數(shù)據(jù)同步。 rsync監(jiān)聽端口:873,rsync運行模式:C/S。
官網(wǎng):https://rsync.samba.org/
官方文檔:https://www.samba.org/ftp/rsync/rsync.html
GitHub地址:https://github.com/WayneD/rsync
rsync優(yōu)缺點
一、優(yōu)點
可以鏡像保存整個目錄樹和文件系統(tǒng);
可以做到保持原來文件的權(quán)限、時間、軟硬鏈接等等;
無須特殊權(quán)限即可安裝;
可以有排除指定文件或目錄同步的功能,相當于打包命令tar的排除功能;
可以使用rcp、ssh等方式來傳輸文件,rsync本身不對數(shù)據(jù)加密;
支持匿名傳輸,可以實現(xiàn)方便安全的進行數(shù)據(jù)備份和鏡像;
可以實現(xiàn)增量同步,既只同步發(fā)生變化的數(shù)據(jù),因此數(shù)據(jù)傳輸效率很高;
可以通過socket(進程方式)傳輸文件和數(shù)據(jù)。
2)缺點
同步數(shù)據(jù),需要掃描所有文件進行對比,才進行差量傳輸。如果文件數(shù)量達到百萬甚至千萬級,掃描文件對比文件將非常耗時,降低了rsync效率;
rsync不能實時地區(qū)監(jiān)測、同步數(shù)據(jù)。雖然可以通過守護進程方式觸發(fā)同步,但兩次動作間有時間差,導(dǎo)致數(shù)據(jù)不一致,無法應(yīng)對出現(xiàn)故障時完全恢復(fù)數(shù)據(jù)。缺點可以通過和inotify-tools配合解決
rsync參數(shù)
rsyncd.conf 參數(shù) | 參數(shù)說明 |
uid=root | rsync 使用的用戶。 |
gid=root | rsync 使用的用戶組(用戶所在的組) |
use chroot=no | 如果為 true,daemon 會在客戶端傳輸文件前“chroot to the path”。這是一種安 全配置,因為我們大多數(shù)都在內(nèi)網(wǎng),所以不配也沒關(guān)系 |
max connections=200 | 設(shè)置最大連接數(shù),默認 0,意思無限制,負值為關(guān)閉這個模塊 |
timeout=400 | 默認為 0,表示 no timeout,建議 300-600(5-10 分鐘) |
pid file | rsync daemon 啟動后將其進程 pid 寫入此文件。如果這個文件存在,rsync 不會 覆蓋該文件,而是會終止 |
lock file | 指定 lock 文件用來支持“max connections”參數(shù),使得總連接數(shù)不會超過限制 |
log file | 不設(shè)或者設(shè)置錯誤,rsync 會使用 rsyslog 輸出相關(guān)日志信息 |
ignore errors | 忽略 I/O 錯誤 |
read only=false | 指定客戶端是否可以上傳文件,默認對所有模塊為 true |
list=false | 是否允許客戶端可以查看可用模塊列表,默認為可以 |
hosts allow | 指定可以聯(lián)系的客戶端主機名或和 ip 地址或地址段,默認情況沒有此參數(shù),即都 可以連接 |
hosts deny | 指定不可以聯(lián)系的客戶端主機名或 ip 地址或地址段,默認情況沒有此參數(shù),即都 可以連接 |
auth users | 指定以空格或逗號分隔的用戶可以使用哪些模塊,用戶不需要在本地系統(tǒng)中存在。 默認為所有用戶無密碼訪問 |
secrets file | 指定用戶名和密碼存放的文件,格式;用戶名;密碼,密碼不超過 8 位 |
[backup] | 這里就是模塊名稱,需用中括號擴起來,起名稱沒有特殊要求,但最好是有意義的 名稱,便于以后維護 |
path | 這個模塊中,daemon 使用的文件系統(tǒng)或目錄,目錄的權(quán)限要注意和配置文件中的 權(quán)限一致,否則會遇到讀寫的問題 |
配置/etc/rsyncd_users.db,跟auth users對應(yīng) |
rsync命令
rsync --help
rsync [選項] 原始位置 目標位置
常用選項 | 說明 |
-r | 遞歸模式,包含目錄及子目錄中的所有文件 |
-l | 對于符號鏈接文件仍然復(fù)制為符號鏈接文件 |
-v | 顯示同步過程的詳細信息 |
-z | 在傳輸文件時進行壓縮goD |
-p | 保留文件的權(quán)限標記 |
-a | 歸檔模式,遞歸并保留對象屬性,等同于-rlpt |
-t | 保留文件的時間標記 |
-g | 保留文件的屬組標記(僅超級用戶使用) |
-o | 保留文件的屬主標記(僅超級用戶使用) |
-H | 保留硬鏈接文件 |
-A | 保留ACL屬性信息 |
-D | 保留設(shè)備文件及其他特殊文件 |
--delete | 刪除目標位置有而原始位置沒有的文件 |
--checksum | 根據(jù)對象的校驗和來決定是否跳過文件 |
rsync同步源
? ? ? ?在遠程同步任務(wù)中,負責(zé)發(fā)起rsync司步操作的客戶機稱為發(fā)起端,而負責(zé)響應(yīng)來自客戶機的rsync同步操作的服務(wù)器稱為同步源(備份源)。在同步過程中,同步源負責(zé)提供文件的原始位置,發(fā)起端應(yīng)對該位置具有讀取權(quán)限。
例:
????????rsync服務(wù)端同步別人,下行同步,將別人的信息下載到本地;
????????別人同步rsync服務(wù)端,上行同步,將信息上傳至rsync服務(wù)器。同步方式:
????????全量備份:
????????原有的數(shù)據(jù)全部傳送,把原來的文件和新的文件一起統(tǒng)一傳送,全量復(fù)制,效率低????????增量備份:
????????在傳輸數(shù)據(jù)之前通過一些算法通過你有的數(shù)據(jù)和我有的數(shù)據(jù)進行對比,把不一樣的數(shù)據(jù)通過網(wǎng)絡(luò)傳輸,增量復(fù)制,效率高配置源的兩種表示方法
格式一:
用戶名@主機地址::共享模塊名
rsync -avz backuper@192.168.10.10::wwwroot /root格式二:
rsync://用戶名@主機地址/共享模塊名
rsync -avz rsync://backuper@192.168.10.10/wwwroot /root
linux 安裝rsync
安裝rsync服務(wù)端
#安裝rsync和xinetd超級守護進程
yum install -y xinetd rsync
#配置rsync配置文件
vim /etc/rsyncd.conf
##########linux rsyncd.conf 配置文件參數(shù)后面不能有備注否則可能有問題##############
#Global Settings 全局配置
uid = nobody #運行rsync的用戶
gid = nobody #運行rsync的用戶組
use chroot = no #是否讓進程離開工作目錄
max connections = 5 #最大并發(fā)連接數(shù),0為不限制
timeout = 600 #超時時間
pid file = /var/run/rsyncd.pid #指定rsync的pid存放路徑
lockfile = /var/run/rsyncd.lock #指定rsync的鎖文件存放路徑
log file = /var/log/rsyncd.log #指定rsync的日志存放路徑
#模塊配置
[web1]
path = /var/www #認證的模塊名,在client端需要指定 服務(wù)端存放客戶端文件的目錄 windows客戶端存放d盤下backup_d文件夾下path = /cygdrive/d/backup_d
ignore errors = yes #忽略一些無關(guān)的I/O錯誤
read only = no #客戶端是否能拉(PULL)
write only = no #客戶端是否能推(PUSH)
hosts allow = 172.16.150.150 #白名單,可以訪問此模塊的主機
hosts deny = * #黑名單,*表示任何主機
list = yes #客戶端請求是否可以列出模塊列表
uid = root #以root的身份去獲取文件
gid = root
auth users = web #認證此模塊的用戶名
secrets file = /etc/web.passwd #指定存放“用戶名:密碼”格式的文件
max connections = 200 # 最大連接數(shù)
timeout = 600 # 設(shè)置超時時間
###############################################################
##########windows rsyncd.conf 配置文件參數(shù)后面不能有備注否則可能有問題##############
uid = root
gid = 0
use chroot = no
strict modes = no
max connections = 5
timeout = 600
pid file = rsyncd.pid
lockfile = rsyncd.lock
log file = rsyncd.log
prot = 873[test]path = /cygdrive/d/backup_dignore errors = yesread only = nohosts deny = *hosts allow = 192.168.90.243list = yesmax connections = 200timeout = 600auth users = asdsecrets file = etc/rsyncd.secrets
############################################################################創(chuàng)建同步目錄
mkdir -p /var/www/
#配置rsync認證文件/etc/web.passwd
echo "web:web" > /etc/web.passwd
#修改/etc/web.passwd的權(quán)限為600
chmod 600 /etc/web.passwd
#配置服務(wù)能夠啟動
chkconfig rsync on
systemctl start xinetd start
#檢查873端口是否監(jiān)聽成功
ss -antl | grep 873
#檢查rsync的運行狀態(tài)
chkconfig --list
systemctl status rsync
安裝rsync客戶端
#安裝
yum install -y xinetd rsync
#設(shè)置rsync客戶端的密碼文件,客戶端只需要設(shè)置rsync同步的密碼即可,不用設(shè)置用戶名(默認已經(jīng)安裝了rsync)
echo web > /etc/web.passwd
#修改/etc/rsyncd.passwd的權(quán)限為600
chmod 600 /etc/web.passwd
windows 安裝rsync
正常執(zhí)行rsync安裝包下一步下一步下一步即可,服務(wù)端需要設(shè)置一個賬號和密碼,客戶端則不用,配置信息和linux一樣
window實踐 創(chuàng)建bat腳本 執(zhí)行腳本進行傳輸數(shù)據(jù)
@echo off
cmd /k "cd /d E:\cwRsync\bin&&rsync.exe -vzrtopg --progress --delete xz@服務(wù)端ip::www /cygdrive/E/databackup/www --port=端口號?--password-file=/cygdrive/E/cwRsync/passwd
"
pause
rsync實踐
# 在192.168.0.99節(jié)點上測試手動同步
# 從遠端【拉取】數(shù)據(jù)
rsync -avz root@192.168.0.99:/opt/nfsdata/* /opt/nfsdata/
#從服務(wù)端拉取數(shù)據(jù)
rsync -avz --progress --delete root@192.168.90.13::web /shell# 在192.168.0.99節(jié)點上測試手動同步
# 從【推送】數(shù)據(jù)
rsync -avz /opt/nfsdata/* root@192.168.0.99:/opt/nfsdata/### 在192.168.0.99節(jié)點上測試手動同步,通過【拉取】數(shù)據(jù),配置文件配置的模塊,這里走的是rsync協(xié)議,上面走的是ssh協(xié)議,只要做了免密就直接推送或拉取數(shù)據(jù)了。這里就會用到配置文件里配置的users用戶了,也是secrets file文件里配置的其中一個用戶。
#【方式一】
rsync -avz backuper@192.168.0.99::nfsdata /opt/nfsdata/
# 【方式二】
rsync -avz rsync://backuper@192.168.0.99/nfsdata /opt/nfsdata/# 在192.168.0.99節(jié)點上執(zhí)行
###【推送】
#【方式一】非交互式,/opt/backuper.pass文件是backuper用戶的密碼,且文件權(quán)限600
rsync -avz --password-file=/opt/backuper.pass /opt/nfsdata/* backuper@192.168.0.99::nfsdata
# 【方式二】
rsync -avz /opt/nfsdata/* rsync://backuper@192.168.0.99/nfsdata #有密碼形式推送數(shù)據(jù)到服務(wù)端
rsync -avz --progress --delete /shell 用戶@IP地址::模塊 --password-file 客戶端存放密碼文件
rsync -avz --progress --delete /shell @192.168.90.13::test --password-file /etc/web.passwd#無密碼形式推送數(shù)據(jù)到服務(wù)端
rsync -avz --progress --delete /shell uid@服務(wù)IPD地址::模塊
rsync -avz --progress --delete /shell root@192.168.90.13::web
inotify-tools?
inotify-tools概述?
Inotify是一種強大的、細粒度的、異步的文件系統(tǒng)事件監(jiān)控機制,linux內(nèi)核從2.6.13起,加入了Inotify支持,通過Inotify可以監(jiān)控文件系統(tǒng)中添加、刪除,修改、移動等各種細微事件,利用這個內(nèi)核接口,第三方軟件就可以監(jiān)控文件系統(tǒng)下文件的各種變化情況,而inotify-tools就是這樣的一個第三方軟件。
Inotify 監(jiān)控文件系統(tǒng)操作,比如讀取、寫入和創(chuàng)建,基于事件驅(qū)動,可以做到對事件的實時響應(yīng),高效,而且沒有輪詢造成的系統(tǒng)資源消耗。
在前面有講到,rsync可以實現(xiàn)觸發(fā)式的文件同步,但是通過crontab守護進程方式進行觸發(fā),同步的數(shù)據(jù)和實際數(shù)據(jù)會有差異,而inotify可以監(jiān)控文件系統(tǒng)的各種變化,當文件有任何變動時,就觸發(fā)rsync同步,這樣剛好解決了同步數(shù)據(jù)的實時性問題。
inotify能監(jiān)控非常多的文件系統(tǒng)事件,通過監(jiān)控這些事件來監(jiān)控文件是否發(fā)生變更,然后通過rsync來更新發(fā)生變更的文件
?innotify-tools 命令、參數(shù)、事件
命令
inotify-tools 包含了兩個命令:inotifywait 與 inotifywatch。
????????inotifywait:在被監(jiān)控的文件或目錄上等待特定文件系統(tǒng)事件發(fā)生,執(zhí)行后處于阻塞狀態(tài),適合在shell腳本中使用。
阻塞狀態(tài) (Blocked):阻塞狀態(tài)是線程因為某種原因放棄CPU的使用權(quán),暫時停止運行。
????????inotifywatch:用于收集文件系統(tǒng)的統(tǒng)計數(shù)據(jù),例如發(fā)生了多少次 inotify 事件,某文件被訪問了多少次等等。
內(nèi)核參數(shù)
????????/proc/sys/fs/inotify/ 目錄下包含三個文件,分別設(shè)置 inotify 相關(guān)的三個內(nèi)核參數(shù)。
????????max_queued_events:inotify 事件隊列可容納的事件數(shù)量,超出的事件被丟棄,但會觸發(fā)隊列溢出Q_OVERFLOW事件。/proc/sys/fs/inotify/max_queued_events默認值16384
????????max_user_instances:每個用戶可運行的 inotifywait 或 inotifywatch 命令的進程數(shù)。/proc/sys/fs/inotify/mak_user_instances默認值128
????????max_user_watches:每個 inotifywait 或 inotifywatch 命令可以監(jiān)控的文件數(shù)量。如果監(jiān)控的文件數(shù)目巨大,需要根據(jù)情況適當增加此值。/proc/sys/fs/inotify/max_user_watches默認值8192?
事件
inotify 監(jiān)控的文件系統(tǒng)事件:
access:文件被訪問。
modify:文件被修改。
attrib:文件元數(shù)據(jù)被修改。
open:文件被打開。move?? ?移動
create:在被監(jiān)控的目錄中創(chuàng)建了文件或目錄。
delete:刪除了被監(jiān)控目錄中的某個文件或目錄。-m?? ?持續(xù)進行監(jiān)控
-r?? ?遞歸監(jiān)控所有子對象
-q?? ?簡化輸出信息
-e?? ?指定要監(jiān)控哪些事件類型inotifywait:用于持續(xù)監(jiān)控,實時輸出結(jié)果
可監(jiān)控modify(修改)、create(創(chuàng)建)、move(移動)、delete(刪除)、attrib(屬性更改)等各種事件,一有變動立即輸出結(jié)果。
inotifywatch:用于短期監(jiān)控,任務(wù)完成后再輸出結(jié)果
可用來收集文件系統(tǒng)變動情況,并在運行結(jié)束后輸出匯總的變化情況。
例:
inotifywait -mrq -e modify,create,attrib,move,delete 文件或目錄
注意:對文件的某個操作往往會觸發(fā)多個事件,用戶應(yīng)用程序需要自己防止做出重復(fù)響應(yīng)。
?rsync客戶端安裝inotify-tools
#檢查當前系統(tǒng)內(nèi)核是否支持inotify 內(nèi)核版本大于2.6.13則支持
uname -r
#安裝 在一塊不知道為什么 inotify-tools 沒有安裝上 所以分開進行了安裝
yum install -y epel-release
yum install -y inotify-tools
#配置內(nèi)核參數(shù)
#inotify 事件隊列可容納的事件數(shù)量,超出的事件被丟棄,但會觸發(fā)隊列溢出Q_OVERFLOW事件。
#/etc/sysctl.conf(內(nèi)核參數(shù)配置文件),需要配置下面配置
vim /etc/sysctl.conf
###################sysctl.conf######################### 默認值16384max_queued_events=16384
#每個用戶可運行的 inotifywait 或 inotifywatch 命令的進程數(shù)。默認值128mak_user_instances=128
#每個 inotifywait 或 inotifywatch 命令可以監(jiān)控的文件數(shù)量。
#如果監(jiān)控的文件數(shù)目巨大,需要根據(jù)情況適當增加此值。配置的監(jiān)控數(shù)量應(yīng)該大于監(jiān)控目標的總文件數(shù)默認值8192max_user_watches=8192?
########################################################
?innotify-tools實踐
不指定監(jiān)控事件,分別打開兩個 shell 窗口,使用 inotifywait 和 inotifywatch 監(jiān)控某個目錄:
#創(chuàng)建目錄
mkdir /var/inotify-test
#監(jiān)控這個文件有沒有發(fā)生變化
inotifywait -m /var/inotify-test#顯示目錄的詳細信息
inotifywatch -v /var/inotify-test在目錄下面創(chuàng)建兩個文件
touch /var/inotify-test/file1
touch /var/inotify-test/file2其中 inotifywait 的信息是在進程運行過程中輸出的,而 inotifywatch 的信息是在進程結(jié)束時輸出的。
以上測試沒有指定監(jiān)聽事件,所以監(jiān)聽的是所有的事件,可以通過 -e 選項來指定監(jiān)聽事件,如:
inotifywait -m -e create,modify,delete /var/inotify-test
rsync+inotify-tools實踐
vim /opt/inotify_rsynx.sh
#!/bin/bash
#定義兩個變量:監(jiān)控文件,執(zhí)行備份
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete 需要監(jiān)控的目錄或文件"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/密碼文件 剛才監(jiān)控的目錄或文件 用戶名@主機地址::共享模塊名"
#
#rsync -az --delete /home/backup/project/bak_project rsync_backup@172.16.0.92::backup_e &>/dev/null#while read獲取監(jiān)控結(jié)果
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
#當讀取目錄,事件,文件
do #如果rsync沒有運行,執(zhí)行rsync進行備份操作if [ $(pgrep rsync | wc -l) -eq 0 ] ; then$RSYNC_CMDfi
done
加入開機自動執(zhí)行
chmod +x /etc/rc.d/rc.local
echo '/opt/inotify_rsync.sh' >> /etc/rc.d/rc.local