網(wǎng)絡服務-RSYNC
rsync一款支持快速完全備份和增量備份工具,支持本地復制,遠程同步等
rsync一般使用兩種協(xié)議進行數(shù)據(jù)同步:ssh 協(xié)議和rsync協(xié)議rsync的特性
能更新整個目錄樹和文件系統(tǒng)
有選擇性的保留符號鏈接、硬鏈接、文件屬性、權限、設備以及時間等
對于安裝來說,無任何特殊權限要求
對于多個文件來說,文件傳輸效率高
能用ssh或自定義端口作為傳輸入口的端口-
rsync工作原理
既然涉及到數(shù)據(jù)同步,必要的兩個概念是:源地址(文件),目標地址(文件),以及以哪一方為基準
例如:
想讓目標主機上的文件和本地文件保持同步,則是以本地文件為同步基準,將本地文件作為源文件推送到目標主機上rsync在進行數(shù)據(jù)同步之前需要進行用戶身份驗證,驗證方式取決于使用的連接方式
ssh登錄驗證模式:使用ssh協(xié)議作為基礎進行用戶身份認證,然后進行數(shù)據(jù)同步
rsync登錄驗證模式:使用rsync協(xié)議進行用戶身份認證(非系統(tǒng)用戶),然后進行數(shù)據(jù)同步數(shù)據(jù)同步方式:推送(上傳)、拉?。ㄏ螺d)
NFS服務器------------------>rsync服務器(nfs服務器數(shù)據(jù)改變,rsync服務器為了與nfs服務器同步,就會拉取nfs服務器的數(shù)據(jù))
NFS服務器<------------------rsync服務器(當nfs服務器數(shù)據(jù)丟失,nfs服務器為了與rsync服務器同步,rsync就會推送數(shù)據(jù)到nfs服務器) rsync實驗演示
單向數(shù)據(jù)同步實驗:準備兩臺服務器,一臺NFS服務器作為網(wǎng)站的數(shù)據(jù)服務器(基準服務器),另外一臺專門做rsync數(shù)據(jù)備份服務器
4.1 ssh協(xié)議數(shù)據(jù)同步:將NFS服務器數(shù)據(jù)同步備份到rsync服務器
在兩臺服務器分別創(chuàng)建目錄(/filesrc、/filedst)
下行同步(下載)
格式: rsync -avz 服務器地址:/服務器目錄/* /本地目錄
實例: rsync -avz root@192.168.88.10:/filesrc/* /filedst
-a:歸檔模式,遞歸并保留對象屬性
-v:顯示同步過程
-z:在傳輸文件時進行壓縮
[root@dst ~]# mkdir /filedst
[root@src filesrc]# touch {1..5}.txt
[root@dst ~]# rsync -avz root@192.168.88.200:/filesrc/* /filedst/ #在dst服務器上下載src服務器上的文件
[root@dst filedst]# ls
1.txt 2.txt 3.txt 4.txt 5.txt
[root@src filesrc]# rm -rf * #刪除src服務器上的文件
[root@dst filedst]# rsync -avz /filedst/* root@192.168.88.200:/filesrc/ #在dst服務器上傳文件到src服務器上
[root@src filesrc]# ls #查看上傳的文件
1.txt 2.txt 3.txt 4.txt 5.txt
注意:使用root用戶進行實驗可以,但在生產(chǎn)環(huán)境中盡量使用單獨創(chuàng)建的普通用戶,減少權限溢出
創(chuàng)建用來做數(shù)據(jù)同步的用戶,并給予用戶對目錄的相應權限,一般使用ACL權限
[root@src filesrc]# useradd zhangsan
[root@src filesrc]# passwd zhangsan
setfacl -m u:zhangsan:rwx /filesrc/
拓展:若實現(xiàn)免密碼數(shù)據(jù)同步,只需要做好ssh密鑰互信即可
[root@src filesrc]# ssh-keygen
[root@src filesrc]# ssh-copy-id root@192.168.88.10
[root@src filesrc]# rm -rf *
[root@dst filedst]# ssh-keygen
[root@src filedst]# ssh-copy-id root@192.168.88.200
[root@dst filedst]# rsync -avz /filedst/* root@192.168.88.200:/filesrc/
[root@src filesrc]# ls
1.txt 2.txt 3.txt 4.txt 5.txt
4.2 rsync協(xié)議數(shù)據(jù)同步:將NFS服務器數(shù)據(jù)同步備份到rsync服務器
搭建rsync服務(僅需要在NFS服務器上搭建即可)
a. 創(chuàng)建主配置文件(/etc/rsyncd.conf)
[root@src ~]# vim /etc/rsyncd.conf
address = 192.168.88.200
# rsync服務器綁定IP
port 873
# 默認服務端口873
log file = /var/log/rsyncd.log
# 日志文件位置
pid file = /var/run/rsyncd.pid
# 進程號文件位置
[web]
# 共享名:用來連接是寫在url上的,切記
comment = web directory backup
# 共享描述話語
path = /filesrc
# 實際共享目錄
read only = no
# 是否僅允許讀取
dont compress = *.gz *.bz2
# 哪些文件類型不進行壓縮
auth users = user1
# 登錄用戶名(非系統(tǒng)用戶,需要自行創(chuàng)建)
secrets file = /etc/rsyncd_users.db
# 認證所需賬號密碼文件(需自行創(chuàng)建)
b. 創(chuàng)建認證所需賬戶密碼文件
[root@src ~]# vim /etc/rsyncd_users.db
user1:123456
[root@src ~]# chmod 600 /etc/rsyncd_users.db
c. 啟動服務
[root@src ~]# rsync --daemon
[root@src ~]# netstat -antp | grep :873
tcp 0 0 192.168.88.200:873 0.0.0.0:* LISTEN 32112/rsync
d. 設置映射用戶對共享目錄有權限(r)
[root@src ~]# setfacl -m u:nobody:rwx /filesrc/
注意:關閉服務可使用kill命令,但偶爾會造成服務被結(jié)束,但進程號配置文件不被刪除的問題,可以手動刪除,再啟動則正常(建議寫一個rsync的服務管理腳本)
下行同步(下載)
格式: rsync -avz rsync://用戶名@服務器地址/共享模塊名 /本地目錄
示例: rsync -avz rsync://user1@192.168.88.200/web /filedst
拓展:--delete:刪除本地比服務器多出來的文件(源地址沒有,目標地址有的刪掉)
rsync -avz --delete rsync://user1@192.168.88.200/web /filedst
上行同步(上傳)
格式:rsync -avz /本地目錄/* rsync://用戶名@服務器地址/共享模塊名
示例:rsync -avz /filedst/* rsync://user1@192.168.88.200/web
拓展:rsync協(xié)議的免密碼可以借助一個環(huán)境變量實現(xiàn)
# export RSYNC_PASSWORD=虛擬用戶密碼(客戶端生成)
[root@src filesrc]# touch 6.txt
[root@src filesrc]# ls
1.txt 2.txt 3.txt 4.txt 5.txt 6.txt rsyncd.conf.bak
[root@dst filedst]# rm -rf *
[root@dst filedst]# rsync -avz rsync://user1@192.168.88.200/web /filedst/
[root@dst filedst]# ls
1.txt 2.txt 3.txt 4.txt 5.txt 6.txt rsyncd.conf.bak
[root@dst filedst]# touch 7.txt
rsync -avz rsync://user1@192.168.88.200/web /filedst/
[root@src filesrc]# ls
1.txt 2.txt 3.txt 4.txt 5.txt 6.txt rsyncd.conf.bak #同步不成功沒有7.txt
[root@dst filedst]# rsync -avz --delete rsync://user1@192.168.0/web /filedst/
[root@dst filedst]# ls
1.txt 2.txt 3.txt 4.txt 5.txt 6.txt rsyncd.conf.bak #7.txt 被刪除,服務器端沒有的,本地服務器也應該沒有,保持本地與服務器同步一致
[root@src filesrc]# rm -rf *
rsync -avz /filedst/* rsync://user1@192.168.88.200/web
[root@src filesrc]# ls
1.txt 2.txt 3.txt 4.txt 5.txt 6.txt rsyncd.conf.bak
[root@dst filedst]# export RSYNC_PASSWORD=123456
[root@dst filedst]# rm -rf *
[root@dst filedst]# touch {a..f}.txt
[root@dst filedst]# ls
a.txt b.txt c.txt d.txt e.txt f.txt
[root@dst filedst]# rsync -avz --delete rsync://user1@192.168.88.200/web /filedst/
[root@dst filedst]# ls
1.txt 2.txt 3.txt 4.txt 5.txt 6.txt rsyncd.conf.bak