一、rsync(遠(yuǎn)程同步)
rsync(Remote Sync,遠(yuǎn)程同步) 是一個(gè)開(kāi)源的快速備份工具,可以在不同主機(jī)之間鏡像同步整個(gè)目錄樹(shù),支持增量備份,并保持鏈接和權(quán)限,且采用優(yōu)化的同步算法,傳輸前執(zhí)行壓縮,因此非常適用于異地備份、鏡像服務(wù)器等應(yīng)用。
在遠(yuǎn)程同步任務(wù)中,負(fù)責(zé)發(fā)起rsync同步操作的客戶機(jī)稱為發(fā)起端,而負(fù)責(zé)響應(yīng)來(lái)自客戶機(jī)的rsync同步操作的服務(wù)器稱為同步源。在同步過(guò)程中,同步源負(fù)責(zé)提供文件的原始位置,發(fā)起端應(yīng)對(duì)該位置具有讀取權(quán)限。
二、實(shí)操rsync遠(yuǎn)程文件同步
準(zhǔn)備一個(gè)服務(wù)端172.16.23.13以及一個(gè)客戶端172.16.23.14
1、服務(wù)端搭建:先完成服務(wù)端配置,啟動(dòng)服務(wù)
systemctl stop firewalld
setenforce 0
--------------------配置rsync源服務(wù)器---------------------------
rpm -q rsync #一般系統(tǒng)已默認(rèn)安裝rsync
#建立/etc/rsyncd.conf 配置文件
vim /etc/rsyncd.conf #添加以下配置項(xiàng)
uid = root
gid = root
use chroot = yes #禁錮在源目錄
address = 172.16.23.13 #監(jiān)聽(tīng)地址
port = 873 #監(jiān)聽(tīng)端口 tcp/udp 873,可通過(guò)cat /etc/services | grep rsync查看
log file = /var/log/rsyncd.log #日志文件位置
pid file = /var/run/rsyncd.pid #存放進(jìn)程 ID 的文件位置
hosts allow = 192.168.20.0/24 #允許訪問(wèn)的客戶機(jī)地址
dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z #同步時(shí)不再壓縮的文件類型
[wwwroot] #共享模塊名稱
path = /data #源目錄的實(shí)際路徑
comment = Document Root
read only = yes #是否為只讀
auth users = lisi zhangsan #授權(quán)賬戶,多個(gè)賬號(hào)以空格分隔
secrets file = /etc/rsync_users.db #存放賬戶信息的數(shù)據(jù)文件
#如采用匿名的方式,只要將其中的“auth users”和“secrets file”配置項(xiàng)去掉即可。
#為備份賬戶創(chuàng)建數(shù)據(jù)文件
vim /etc/rsync_users.db
lisi:123123
zhangsan:123123 #無(wú)須建立同名系統(tǒng)用戶
chmod 600 /etc/rsync_users.db
#保證所有用戶對(duì)源目錄/var/www/html 都有讀取權(quán)限
chmod +r /data
ls -ld /data
#啟動(dòng) rsync 服務(wù)程序
rsync --daemon #啟動(dòng) rsync 服務(wù),以獨(dú)立監(jiān)聽(tīng)服務(wù)的方式(守護(hù)進(jìn)程)運(yùn)行
netstat -anpt | grep rsync
?rsync拓展
1、關(guān)于rsyncd服務(wù)的端口號(hào)
udp和tcp的873端口udp負(fù)責(zé)文件傳輸 tcp負(fù)責(zé)建立連接
2、rsync和scp的區(qū)別
兩者都可以實(shí)現(xiàn)遠(yuǎn)程傳輸文件和目錄rsync:遠(yuǎn)程文件同步,可以實(shí)現(xiàn)跨主機(jī)增量同步文件數(shù)據(jù),同時(shí)還能對(duì)傳輸?shù)奈募M(jìn)行壓縮,并且支持軟連接硬連接文件傳輸
scp:只能做全量數(shù)據(jù)傳輸
2、測(cè)試
服務(wù)端測(cè)試目錄準(zhǔn)備
[root@localhost ~]# cd /data
[root@localhost data]# ls
[root@localhost data]# cp /etc/passwd /etc/shadow /etc/fstab /etc/yum.repos.d/ ./
cp: 略過(guò)目錄"/etc/yum.repos.d/"
[root@localhost data]# ls
fstab passwd shadow
[root@localhost data]# cp -a /etc/yum.repos.d/ ./
[root@localhost data]# ls
fstab passwd shadow yum.repos.d
第一種:客戶端下行從服務(wù)端拉取數(shù)據(jù),進(jìn)行同步
rsync -avz lisi@172.16.23.13::wwwroot /root/test/
rsync -avz --delete lisi@172.16.23.13::wwwroot /root/test/
下行同步,從原服務(wù)器拉數(shù)據(jù)( 刪除原始位置有而目標(biāo)位置沒(méi)有的文件)
rsync -avz --delete rsync://lisi@172.16.23.13/wwwroot /root/kgc
[root@localhost ~]#echo 123123 > pass
[root@localhost ~]#cat /root/pass
123123
[root@localhost ~]#chmod 600 /root/pass
rsync-daemon方式免交互
[root@localhost ~]#rsync -avz --delete --password-file=/root/pass rsync://lisi@172.16.23.13/wwwroot /root/kgc/
總結(jié)
基本格式:rsync [選項(xiàng)] 原始位置 目標(biāo)位置
常用選項(xiàng):
-r:遞歸模式,包含目錄及子目錄中的所有文件。
-l:對(duì)于符號(hào)鏈接文件仍然復(fù)制為符號(hào)鏈接文件。
-v:顯示同步過(guò)程的詳細(xì)(verbose)信息。
-z:在傳輸文件時(shí)進(jìn)行壓縮(compress)。
-a:歸檔模式,保留文件的權(quán)限、屬性等信息,等同于組合選項(xiàng)“-rlptgoD”。
-p:保留文件的權(quán)限標(biāo)記。
-t:保留文件的時(shí)間標(biāo)記。
-g:保留文件的屬組標(biāo)記(僅超級(jí)用戶使用)。
-o:保留文件的屬主標(biāo)記(僅超級(jí)用戶使用)。
-H:保留硬連接文件。
-A:保留 ACL 屬性信息。
-D:保留設(shè)備文件及其他特殊文件。
--delete:刪除目標(biāo)位置有而原始位置沒(méi)有的文件。
--checksum:根據(jù)校驗(yàn)和(而不是文件大小、修改時(shí)間)來(lái)決定是否跳過(guò)文件。
#將指定的資源下載到本地/opt 目錄下進(jìn)行備份。
格式一:
rsync -avz lisi@172.16.23.13::wwwroot /root/test #密碼123123
格式二:
rsync -avz rsync://lisi@172.16.23.13/wwwroot /root/test
#免交互格式配置:
echo "123123" > /root/pass
chmod 600 /root/pass
第二種:上行同步,客戶端主動(dòng)給服務(wù)端推送文件和目錄(圖片只是示意,還不是實(shí)時(shí)同步)
配置文件修改?
服務(wù)端操作
[root@localhost data]# vim /etc/rsyncd.conf
[root@localhost data]# systemctl restart rsyncd
[root@localhost data]# ll -d ./
drwxr-xr-x. 3 root root 25 1月 14 15:53 ./
[root@localhost data]# chmod 777 /data/
[root@localhost data]# ll -d ./
drwxrwxrwx. 3 root root 25 1月 14 15:53 ./
客戶端第一次上傳
[root@localhost ~]# touch /root/kgc/{1..5}.txt
[root@localhost ~]# ls /root/kgc
1.txt 2.txt 3.txt 4.txt 5.txt
[root@localhost ~]# rsync -avz --delete --password-file=/root/pass /root/kgc lisi@172.16.23.13::wwwroot
客戶端第二次上傳
[root@localhost ~]# echo a > /root/kgc/a
[root@localhost ~]# ls /root/kgc
1.txt 2.txt 3.txt 4.txt 5.txt a
[root@localhost ~]# rsync -avz --delete --password-file=/root/pass /root/kgc lisi@172.16.23.13::wwwroot
客戶端第三次上傳
[root@localhost ~]# rm -rf /root/kgc/{1..4}.txt
[root@localhost ~]# ls /root/kgc
5.txt a
[root@localhost ~]# rsync -avz --delete --password-file=/root/pass /root/kgc lisi@172.16.23.13::wwwroot
?3、通過(guò)ssh和rsync結(jié)合的方式,實(shí)現(xiàn)遠(yuǎn)程文件傳輸,也可以實(shí)現(xiàn)增量傳輸數(shù)據(jù)
注意:這種方式可以不用修改配置文件
第一種:通過(guò)ssh免密+rsync的方式實(shí)現(xiàn)傳輸
[root@localhost /test]#ssh-keygen -t rsa
[root@localhost /test]#ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.23.14
[root@localhost /test]#ls
passwd yum.repos.d
[root@localhost /test]#pwd
/test
[root@localhost /test]#rsync -azvH --delete -e 'ssh -p 22' /test/ root@172.16.23.14:/root/cxk/
[root@localhost /test]#echo a > a
[root@localhost /test]#rm -rf yum.repos.d/
[root@localhost /test]#ls
a passwd
[root@localhost /test]#rsync -azvH --delete -e 'ssh -p 22' /test/ root@172.16.23.14:/root/cxk/
第二種:通過(guò)sshpass+rsync的方式實(shí)現(xiàn)免密傳輸
[root@localhost ~]#yum install -y sshpass
[root@localhost ~]#rsync -avzH --delete -e 'sshpass -p 123456 ssh -p 22 -o StrictHostKeyChecking=no' /root/test10/ root@172.16.23.14:/wwwroot
4、小結(jié)
文件傳輸:lrzsz ftp samba cifs nfs sftp scp WinSCP rsync SVN git
rsync 遠(yuǎn)程文件同步,可實(shí)現(xiàn)跨主機(jī)增量同步文件數(shù)據(jù)
命令格式:
rsync [選項(xiàng)] 原始位置 目標(biāo)位置
rsync -az --delete 源服務(wù)器位置 本地位置 #下行同步,從源服務(wù)器拉數(shù)據(jù)
rsync -az --delete 本地位置 源服務(wù)器位置 #上行同步,推數(shù)據(jù)到源服務(wù)器
免交互
#rsync-daemon方式
rsync -az --delete --password-file=密碼文件 用戶名@源服務(wù)器地址::共享模塊名 本地目錄
rsync -az --delete --password-file=密碼文件 rsync://用戶名@源服務(wù)器地址/共享模塊名 本地目錄
#rsync-ssh方式
rsync -az --delete -e 'sshpass -p 'ssh密碼' ssh -p ssh端口 -o StrictHostKeyChecking=no' 用戶名@源服務(wù)器地址:共享目錄/ 本地目錄
先做ssh密鑰對(duì)免交互(空密碼,ssh-agent bash + ssh-add)
rsync -az --delete -e 'ssh -p ssh端口' 用戶名@源服務(wù)器地址:共享目錄/ 本地目錄
以上都是手動(dòng)執(zhí)行遠(yuǎn)程文件傳輸
如果說(shuō)是想要實(shí)現(xiàn)自動(dòng),可以有兩種方式:
1、定時(shí)計(jì)劃性任務(wù)crontab + rsync
2、實(shí)時(shí)同步 inotifywait + rsync?
三、定時(shí)同步crontab + rsync
crontab -e
*/30 * * * * /usr/bin/rsync -azH --delete --password-file=/root/pass rsync://lisi@172.16.23.13/wwwroot /root/kgc/
#為了在同步過(guò)程中不用輸入密碼,需要?jiǎng)?chuàng)建一個(gè)密碼文件,保存 lisi 用戶的密碼,如 /root/pass。在執(zhí)行 rsync 同步時(shí)使用選項(xiàng) “--password-file=/root/pass” 指定即可。
systemctl restart crond
systemctl enable crond
四、實(shí)時(shí)同步inotifywait + rsync?
使用inotify通知接口,可以用來(lái)監(jiān)控文件系統(tǒng)的各種變化情況,如文件存取、刪除、移動(dòng)、修改等。利用這一機(jī)制,可以非常方便地實(shí)現(xiàn)文件異動(dòng)告警、增量備份,并針對(duì)目錄或文件的變化及時(shí)作出響應(yīng)。
將inotify機(jī)制與rsync工具相結(jié)合,可以實(shí)現(xiàn)觸發(fā)式備份(實(shí)時(shí)同步),即只要原始位置的文檔發(fā)生變化,則立即啟動(dòng)增量備份操作;否則處于靜默等待狀態(tài)。這樣,就避免了按固定周期備份時(shí)存在的延遲性、周期過(guò)密等問(wèn)題。(有了觸發(fā)機(jī)制,更加靈活)
因?yàn)?inotify 通知機(jī)制由 Linux 內(nèi)核提供,因此主要做本機(jī)監(jiān)控,在觸發(fā)式備份中應(yīng)用時(shí)更適合上行同步。
1.修改rsync源服務(wù)器配置文件
vim /etc/rsyncd.conf
...
read only = no ###關(guān)閉只讀,上行同步需要可以寫
[root@serverp ~]#mkdir /data ##創(chuàng)建共享目錄
[root@serverp ~]#vim /etc/rsyncd.conf
[root@serverp ~]#echo "server:123123" >/root/userlist ##準(zhǔn)備賬號(hào)文件
[root@serverp ~]#chmod 777 /data/ ##修改共享目錄權(quán)限
?2.調(diào)整 inotify 內(nèi)核參數(shù)(根據(jù)具體生產(chǎn)情況分析)
在Linux內(nèi)核中,默認(rèn)的inotify機(jī)制提供了三個(gè)調(diào)控參數(shù):max_queue_events(監(jiān)控事件隊(duì)列,默認(rèn)值為16384)、max_user_instances(最多監(jiān)控實(shí)例數(shù),默認(rèn)值為128)、max_user_watches(每個(gè)實(shí)例最多監(jiān)控文件數(shù),默認(rèn)值為8192)。當(dāng)要監(jiān)控的目錄、文件數(shù)量較多或者變化較頻繁時(shí),建議加大這三個(gè)參數(shù)的值。
cat /proc/sys/fs/inotify/max_queued_events
cat /proc/sys/fs/inotify/max_user_instances
cat /proc/sys/fs/inotify/max_user_watches
vim /etc/sysctl.conf
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
sysctl -p
3.安裝 inotify-tools
tar zxvf inotify-tools-3.14.tar.gz -C /opt/
cd /opt/inotify-tools-3.14
./configure
make && make install
#可以先執(zhí)行“inotifywait”命令,然后另外再開(kāi)啟一個(gè)新終端向 /var/www/html 目錄下添加文件、移動(dòng)文件,在原來(lái)的終端中跟蹤屏幕輸出結(jié)果。
inotifywait -mrq -e modify,create,move,delete /root/kgc
#選項(xiàng)“-e”:用來(lái)指定要監(jiān)控哪些事件
#選項(xiàng)“-m”:表示持續(xù)監(jiān)控
#選項(xiàng)“-r”:表示遞歸整個(gè)目錄
#選項(xiàng)“-q”:簡(jiǎn)化輸出信息
測(cè)試inotifywait 監(jiān)控?
4.在客戶端編寫觸發(fā)式同步腳本(注意,腳本名不可包含 rsync 字符串,否則腳本可能不生效)?
vim /opt/inotify.sh
#!/bin/bash
INOTIFY_COM="inotifywait -mrq -e modify,create,move,delete /root/kgc/"
RSYNC_COM="rsync -avz --delete --password-file=/root/pass /root/kgc/ lisi@172.16.23.13::wwwroot"
$INOTIFY_COM | while read event
##這是一種while的觸發(fā)循環(huán),將管道符左邊的執(zhí)行結(jié)果給到read后面的自定>義變量中,一旦有執(zhí)行結(jié)果,則會(huì)觸發(fā)循環(huán)
do
if [ $(pgrep rsync|wc -l) -le 1 ];then
##判斷有沒(méi)有rsync的進(jìn)程存在,判斷的方式有很多種pidof、ps、killall -0等,小于等于1表示開(kāi)啟為1,如果不開(kāi)啟為0,沒(méi)有正在同步傳輸?shù)倪M(jìn)程
$RSYNC_COM &>/var/log/inotify_test.log
##將兩個(gè)傳輸都記錄到日志文件中
fi
done
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-802395.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-802395.html
chmod +x /root/inotify.sh
chmod +x /etc/rc.d/rc.local
echo '/root/inotify.sh' >> /etc/rc.d/rc.local #加入開(kāi)機(jī)自動(dòng)執(zhí)行
五、幾種批量刪除文件的區(qū)別(20萬(wàn)個(gè)文件測(cè)試)
第一種:rm -rf 這種如果針對(duì)大文件,可能不生效
第二種:find 指定目錄 -exec rm {} \;
第三種:find 指定目錄 -delete
第四種:使用rsync
//使用rsync來(lái)實(shí)現(xiàn)快速刪除大量文件。
假如要在linux下刪除大量文件,比如100萬(wàn)、1000萬(wàn),像/usr/local/nginx/proxy_temp的nginx緩存等,那么rm -rf * 可能就不好使了,因?yàn)橐却荛L(zhǎng)一段時(shí)間。在這種情況下我們可以使用rsync來(lái)巧妙處理。rsync實(shí)際用的是替換原理。
先建立一個(gè)空的文件夾:
mkdir /home/blank
用rsync刪除目標(biāo)目錄:
rsync --delete-before -a -H -v --progress --stats /home/blank/ /usr/local/nginx/proxy_temp/
這樣目標(biāo)目錄很快就被清空了
選項(xiàng)說(shuō)明:
--delete-before 接收者在傳輸進(jìn)行刪除操作
-a 歸檔模式,表示以遞歸方式傳輸文件,并保持所有文件屬性
-H 保持硬連接的文件
-v 詳細(xì)輸出模式
--progress 在傳輸時(shí)顯示傳輸過(guò)程
--stats 給出某些文件的傳輸狀態(tài)
到了這里,關(guān)于rsync遠(yuǎn)程同步服務(wù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!