此文為轉載
一. 環境和測試說明
rsync(remote sync)是unix及類unix平台下的數據鏡像備份軟件,它不像FTP那樣需要全備份,rsync可以根據數據的變化進行差異備份,從而減少數據流量,提高工作效率
rsync主要分為三個配置文件,分別是rsyncd.conf(主配置文件),rsyncd.secrets(密碼文件),rsyncd.motd(服務器信息文件)
本文件以2台機器為列子進行說明
pc1,IP:192.168.0.230,作為rsync服務器,需要配置rsyncd.conf文件
pc2,IP:192.168.0.234,作為rsync客戶端,不需要配置rsyncd.conf,文件可為空
在服務器端創建/common目錄作為共享目錄,復制一些測試文件到該目錄中,進行測試
yum -y install rsync #centos默認安裝了
mkdir /common; cp /etc/init.d/* /common/
二. 主配置文件說明
vim /etc/rsyncd.conf
motd file = /etc/rsyncd.motd #設置服務器信息提示文件,在該文件中編寫提示信息
transfer logging = yes #開啟rsync數據傳輸日志功能
log file = /var/log/rsyncd.log #設置日志文件名,可通過log format參數設置日志格式
pid file = /var/run/rsyncd.log #設置rsync進程號保存文件名稱
lock file = /var/run/rsync.lock #設置鎖文件名稱
port = 873 #設置服務器監聽的端口號,默認是873
address = 192.168.0.230 #設置本服務器所監聽網卡接口的ip地址
uid = nobody #設置進行數據傳輸時所使用的帳戶名或ID號,默認使用nobody
gid = nobody #設置進行數據傳輸時所使用的組名或GID號,默認使用nobody
#若為yes, rsync會首先進行chroot設置,將根映射在下面的path參數路徑下,對客戶端而言,系統的根就是path參數指定的路徑。但這樣做需要root權限,並且在同步符號連接資料時只會同步名稱,不會同步內容。
use chroot = no
read only = yes #是否允許客戶端上傳數據,yes表示不允許
max connections =10 #設置並發連接數,0表示無限制
[common] #自定義模塊名,rsync通過模塊定義同步的目錄,可定義多個
comment = web content #定義注釋說明字串
path = /common #同步目錄的真是路徑通過path指定
ignore errors #忽略一些IO錯誤
#exclude = test/ #exclude指定common目錄下某個目錄可以不同步數據
auth users = tom, jerry #設置允許連接服務器的賬戶,此賬戶可以是系統中不存在的用戶
secrets file = /etc/rsyncd.secrets #密碼驗證文件名,該文件權限要求為只讀,建議為600,僅在設置auth users后有效
hosts allow = 192.168.0.0/255.255.255.0 #設置哪些主機可以同步數據,多ip和網段之間使用空格分隔
hosts deny=* #除了hosts allow定義的主機外,拒絕其他所有
list = false #客戶端請求顯示模塊列表時,本模塊名稱是否顯示,默認為true
三. 創建密碼文件,防火牆設置,客戶端和服務器端都要做如下操作
echo "tom:123" > /etc/rsyncd.secrets
echo "jerry:123" >> /etc/rsyncd.secrets
chmod 600 /etc/rsyncd.secrets
echo "welcome to access" > /etc/rsyncd.motd #此項客戶端不需要做
rsync --daemon # --daemon表示后台執行,客戶端開啟rsync不需要--daemon選項
echo "/usr/bin/rsync --daemon" >> /etc/rc.local #開機啟動rsync服務
firewall-cmd --permanent --add-port=873/tcp #添加防火牆規則,允許873端口的數據訪問
四. 客戶端同步數據
yum -y install rsync
rsync -vzrtopg --progress tom@192.168.0.230::common /test #通common模塊指定的/common目錄下的文件拷貝到本客戶端的/test目錄下
參數說明
v:顯示詳細信息
z:傳輸過程中對數據進行壓縮
r:遞歸
t:保留修改時間屬性
o:保留文件所有者屬性
p:保留文件權限屬性
g:保留文件所屬組屬性
a:歸檔模式,主要保留文件屬性,等同於-rlptgoD
--progress:顯示數據傳輸的進度信息
--password-file=FILE:指定密碼文件,將密碼寫入文件,實現非交互式數據同步,這個文件名也需要修改權限為600
--delete:刪除那些僅在目標路徑中存在的文件(源路徑中不存在),在腳本中的數據同步經常加上此參數
--list-only:僅列出服務器模塊列表,需要rsync服務器設置list=true
五. rsync語法格式,SRC表示源路徑,DEST表示目標路徑
1. 本地復制
rsync [選項] SRC... [DEST]
2. 通過遠程shell復制
下載數據:rsync [選項] [user@a]HOST:SRC...[DEST] #不加user@表示用root用戶進行登陸遠程主機下載數據到 本地的DEST路徑
上傳數據:rsync[選項] SRC...[user@]HOST:DEST #這里的SRC表示本地數據,DEST表示遠端主機目錄
3. 通過rsync進程復制
下載數據
rsync [選項] [user@] HOST::SRC ... [DEST] #這里雙冒號后的SRC表示遠端服務端的模塊名
rsync [選項] rsync://[user@]HOST[:port]/SRC...[DEST] #這里的SRC表示實際的同步目錄名,這種方式可以指定端口
上傳數據
rsync [選項] SRC...[user@]HOST::DEST #上傳本地客戶端數據到遠端服務端的DEST模塊名指定的路徑
rsync [選項] SRC...rsync://[user@HOST[:port]/DEST
一些例子
1. rsync -t *.c 192.168.0.54:src/ #將本機當前目錄下的以.c結尾的文件賦值到192.168.0.54的src目錄下
2. rsync -avz 192.168.0.54:src/bar /data/tmp #從192.168.0.54主機上將src/bar目錄以遞歸方式復制到本機/data/tmp目錄
3. rsync -avz 192.168.0.54:src/bar/ /data/tmp #和例子2的區別是不在/data/tmp目錄下創建bar目錄
4. rsync -avz /src/foo /dest #將本機/src/foo目錄復制到/dest目錄
5. rsync -avz tom@192.168.0.230::common /test3 #使用tom賬戶連接遠程192.168.0.230主機的rsync進程,將common模塊定義的path路徑下載到本地test3目錄
6. rsync -avz 192.168.0.230::common /test3 #匿名下載192.168.0.230服務器的common模塊至本地的/test3目錄
7. rsync --list-only tom@192.168.0.254:: #顯示192.168.0.254服務器所有的模塊名稱,需要服務器端配置list=true才會顯示
8. 客戶端每次連接服務器都需要輸入密碼很麻煩,可以創建密碼文件rsync.pass,在其中包含密碼,然后使用--password-file指定此文件
echo "123" > rsync.pass #服務器端用戶tom的密碼
rsync -avz --delete --password-file=rsync.pass tom@192.168.0.254::common /dest
六. 編寫簡單shell腳本,使客戶端定期對rsync服務器(192.168.0.230)的數據進行備份
#!/bin/bash
export PATH=/bin:/usr/bin:/usr/local/bin
SRC=common #模塊名
DEST=/data
server=192.168.0.230
user=tom
passfile=/root/rsync.pass
#if the DEST directory not found, then create one
[ ! -d $DEST ] && mkdir $DEST
[ ! -e $passfile ] && exit 2
rsync -az --delete --password-file=$passfile ${user}@${server}::$SRC $DEST/$(data +%Y%m%d) #加上日期
之后在定時任務中加入執行此腳本即可
七. 附加
ubuntu上做rsync同步可參考 https://www.linuxidc.com/Linux/2016-08/134584.htm
delete參數的例子 參考:https://www.cnblogs.com/wangmo/p/7151175.html