背景
隨著時間的推移,即便當初再小的項目乎芳,如今也變得五臟俱全宛逗,尤其是在不斷的更新迭代后,代碼量和文件數(shù)目越來越大年扩,多數(shù)又不止使用了一個服務(wù)器(負載均衡)
此時如果進行功能上線蚁廓,需要依次上傳文件,太過繁雜厨幻,而且容易漏傳相嵌,所以想著找一種方法,只需上傳其中的一臺服務(wù)器况脆,從服務(wù)器自動進行數(shù)據(jù)同步則便捷了許多饭宾,于是找到了 rsync 文件備份的支持.
測試環(huán)境: CentOS 6.5,CentOS 7
【聲明】:文章主要參考來源 -【rsync 實現(xiàn)文件備份同步】格了,然后根據(jù)自己的具體情況進行了實例說明看铆,在此謝謝前輩們的經(jīng)驗指導(dǎo)...
一、概念介紹
(1). 什么是 rsync盛末?
rsync 是類 unix系統(tǒng)下的數(shù)據(jù)鏡像備份工具 —— remote sync弹惦。一款快速增量備份工具 Remote Sync,遠程同步 支持本地復(fù)制悄但,或者與其他SSH棠隐、rsync主機同步。
第一次同步時, rsync 會復(fù)制全部內(nèi)容檐嚣,但在下一次只傳輸修改過的文件助泽。rsync在傳輸數(shù)據(jù)的過程中可以實行壓縮及解壓縮操作,因此可以使用更少的帶寬。
rsync 是用 “ rsync 算法” 提供了一個客戶機和遠程文件服務(wù)器的文件同步的快速方法
(2). rsync 的一些特性
- 能更新整個目錄和樹和文件系統(tǒng)
- 有選擇性的保持符號鏈鏈嗡贺、硬鏈接隐解、文件屬于、權(quán)限诫睬、設(shè)備以及時間等
- 對于安裝來說厢漩,無任何特殊權(quán)限要求
- 對于多個文件來說,內(nèi)部流水線減少文件等待的延時
- 安全岩臣,能用 rsh、ssh 或直接端口做為傳輸端口宵膨,或者 socket 連接
- 支持匿名 rsync 同步文件架谎,是理想的鏡像工具
- 免費啊
二、功能分析
- 配置此功能辟躏,首先明確的是谷扣,在角色上,需要服務(wù)端和客戶端 (1:N)
- 服務(wù)端捎琐,主要負責(zé)文件的首次上傳会涎,更新操作等
- 客戶端,會隨著服務(wù)端的文件變化進行同步-(下載瑞凑,更新末秃,刪除等)
在操作上,最簡單的配置比例為【服務(wù)端:客戶端 = 1:1】
例如籽御,本次的實際操作中练慕,我配置了一個服務(wù)端(IP:192.168.1.160
),其中的一個客戶端(IP:192.168.1.161
)技掏,后期添加了另一個客戶端(IP:192.168.1.150
)
三铃将、配置操作【重點】
(1). 服務(wù)端配置
①. 安裝 rsync
- 一般當下的 CentOS 系統(tǒng)都默認安裝了此軟件,建議運行命令
rsync
查看哑梳,一般會有如下的界面:
- 如果沒有出現(xiàn)上述界面劲阎,可自行安裝,如以下命令:
yum install rsync
②. 進行配置文件的修改【建議 root 用戶下操作】
- rsync 的主要有以下三個配置文件:
rsyncd.conf (主配置文件)鸠真、rsyncd.secrets (密碼文件)悯仙、rsyncd.motd ( rysnc 服務(wù)器顯示信息)
- 服務(wù)器配置文件( /etc/rsyncd.conf ),該文件默認不存在弧哎,需要創(chuàng)建它
(1). 依次執(zhí)行如下命令:
mkdir /etc/rsyncd
touch /etc/rsyncd/rsyncd.conf #創(chuàng)建 rsyncd.conf雁比,這是 rsync 服務(wù)器的配置文件
ln -s /etc/rsyncd/rsyncd.conf /etc/rsyncd.conf
touch /etc/rsyncd/rsyncd.secrets #創(chuàng)建 rsyncd.secrets ,這是用戶密碼文件
chmod 600 /etc/rsyncd/rsyncd.secrets #將rsyncd.secrets這個密碼文件的文件屬性設(shè)為root擁有, 且權(quán)限要設(shè)為 600, 否則無法備份成功
touch /etc/rsyncd/rsyncd.motd
(2). 修改 rsyncd.conf
- rsyncd.conf 是 rsync 服務(wù)器主要配置文件撤嫩。以下為我的文件信息偎捎,可作參考或進行進一步的修改
- 如下代碼表示,我要備份服務(wù)器上的 /server/ftpfile 目錄,同時想把 /server/ftpfile/file3 目錄排除在外
# Distributed under the terms of the GNU General Public License v2
# Minimal configuration file for rsync daemon
# See rsync(1) and rsyncd.conf(5) man pages for help
# This line is required by the /etc/init.d/rsyncd script
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
secrets file = /etc/rsyncd/rsyncd.secrets
motd file = /etc/rsyncd/rsyncd.motd
port = 873 # 指定運行端口茴她,默認是873寻拂,您可以自己指定;
address = 192.168.1.160 #指定服務(wù)端IP地址
# uid = nobody
# gid = nobody
uid = root
gid = root
use chroot = no
read only = yes
#limit access to private LANs
hosts allow=192.168.1.161 192.168.1.150 #以空格分割 客戶端IP
hosts deny=*
max connections = 10
#This will give you a separate log file
log file = /var/log/rsync.log
#This will log every file transferred - up to 85,000+ per user, per sync
transfer logging = yes
log format = %t %a %m %f %b
syslog facility = local3
timeout = 300
[ftpfile]
path = /server/ftpfile
list=yes
ignore errors = true
auth users = root
#auth users 是必須在服務(wù)器上存在的真實的系統(tǒng)用戶丈牢,如果你想用多個用戶以 “,” 號隔開祭钉,比如auth users = moTzxx,root
comment = This is moTzxx-comment #提交信息,便于識別
exclude = file3/
#此處表明己沛,同步文件 除去所有的 file3 目錄慌核,如果以斜杠開頭,則可指定“path = /server/ftpfile”下的任何目錄或文件申尼,例如“/file1/file5/re.log”,指的是文件“/server/ftpfile/file1/file5/re.log”
(3). 設(shè)定密碼文件
- 密碼文件格式很簡單垮卓,rsyncd.secrets 的內(nèi)容格式為:user:password
- 例如,我使用的是 **root ** 賬戶师幕,密碼為 root123粟按,則進行下面的命令:
vim /etc/rsyncd/rsyncd.secrets
添加信息:root:root123
- 修改屬主和修改權(quán)限 (若已經(jīng)是了,就無需修改了)
chown root.root /etc/rsyncd/rsyncd.secrets
chmod 600 /etc/rsyncd/rsyncd.secrets
(4). 設(shè)定 rsyncd.motd 文件
- 它是定義 rysnc 服務(wù)器信息的霹粥,也就是用戶登錄信息灭将。比如讓用戶知道這個服務(wù)器是誰提供的等,其實影響并不大,只是為了便于說明
vim /etc/rsyncd/rsyncd.motd
自定義添加如下:
++++++++++++++++++++++++++++++++++++++++++
Welcome to moTzxx`s world!
++++++++++++++++++++++++++++++++++++++++++
(2). rsync 服務(wù)器啟動
- 在此后控,只介紹 讓 rsync 以服務(wù)器模式運行的 daemon 參數(shù)方式庙曙,詳情見附錄。
- 此時為服務(wù)端操作(IP:192.168.1.160)
- 如下依然為【root】 權(quán)限下操作
①. 以 root 身份啟動 rsync
/usr/bin/rsync --daemon
/usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf #--config用于指定rsyncd.conf的位置,如果在/etc下可以不寫
②. 查看相應(yīng)進程
sudo lsof -i :873
③. rsync 服務(wù)器和防火墻
注:】如果第二步能獲得 873 進程信息浩淘,這一步?jīng)]必要進行操作矾利,本人在開啟測試前,就關(guān)閉了防火墻
- Linux 防火墻是用 iptables馋袜,所以我們至少在服務(wù)器端要讓你所定義的rsync 服務(wù)器端口通過男旗,客戶端上也應(yīng)該讓通過。
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT
iptables -L #查看一下防火墻是不是打開了 873端口
- 如果你不太懂防火墻的配置欣鳖,可以先用
service iptables stop
將防火墻關(guān)掉察皇。當然在生產(chǎn)環(huán)境這是很危險的,可千萬不要這么做泽台!
(3). 客戶端:
①. 安裝 rsync:
yum install rsync
②. 配置密碼文件 rsyncd.secrets
【注意】:服務(wù)器端的密碼應(yīng)該以 user:password 的形式存放明文密碼什荣,而客戶端的密碼只需要以 password 的明文形式保存
【執(zhí)行命令】(舉例密碼為 root123):
echo root123> rsyncd.secrets
chmod 600 rsyncd.secrets
③. 主要命令
1). 列出 rsync 服務(wù)器上的所提供的同步內(nèi)容
- 第一種( 需要密碼):
rsync --list-only 192.168.1.160::ftpfile
- 第二種:
rsync --list-only --password-file=/server/rsyncd.secrets 192.168.1.160::ftpfile
2). 文件同步命令
- 第一種( 需要密碼):
rsync -avzP 192.168.1.160::ftpfile /server/ftpfile
- 第二種:
rsync -avzP --password-file=/server/rsyncd.secrets 192.168.1.160::ftpfile /server/ftpfile
3). 客戶端上的數(shù)據(jù)要與服務(wù)器端完全一致
- 第一種( 需要密碼):
rsync -avzP --delete 192.168.1.160::ftpfile /server/ftpfile
- 第二種:
rsync -avzP --delete --password-file=/server/rsyncd.secrets 192.168.1.160::ftpfile /server/ftpfile
表示客戶端上的數(shù)據(jù)要與服務(wù)器端完全一致,如果 ftpfile 目錄中有服務(wù)器上不存在的文件怀酷,則刪除稻爬。最終目的是讓 ftpfile 目錄上的數(shù)據(jù)完全與服務(wù)器上保持一致;用的時候要小心點蜕依,最好不要把已經(jīng)有重要數(shù)所據(jù)的目錄桅锄,當做本地更新目錄琉雳,否則會把你的數(shù)據(jù)全部刪除
④. 定時更新 實現(xiàn)方法:
(1). 一種方法:直接在 /etc/crontab
中添加命令
- 找到 crontab 文件所在位置,根據(jù)定時任務(wù)配置規(guī)范添加信息友瘤,以本人為例翠肘,在目錄
/etc/crontab
中
vi /etc/crontab
或者通過 crontab 進行設(shè)定 ,執(zhí)行命令:
crontab -e
- 在后面添加命令(舉例,每分鐘執(zhí)行一次文件同步辫秧,作為測試)
*/1 * * * * rsync -avzP --password-file=/server/rsyncd.secrets 192.168.1.160::ftpfile /server/ftpfile
(2). 第二種方法:腳本實現(xiàn)
- 寫腳本(名字自定義束倍,相當于一個存放定時任務(wù)命令的文件而已)
vim /server/ftp-update-ftpfile.sh #自定義即可
- 添加代碼
#!/bin/bash
rsync -avzP --password-file=/server/rsyncd.secrets 192.168.1.160::ftpfile /server/ftpfile
- 通過 crontab 設(shè)定,讓這個腳本每 1 分鐘(測試)運行一次盟戏。執(zhí)行命令:
crontab -e
- 輸入以下一行:
*/1 * * * * /server/ftp-update-ftpfile.sh
(3). 上述方法配置好后绪妹,要重啟 crond 服務(wù)器
- 執(zhí)行如下的命令
killall crond #注:殺死crond 服務(wù)器的進程;
ps aux |grep crond # 注:查看一下是否被殺死柿究;
/usr/sbin/crond #注:啟動 crond 服務(wù)器喂急;
(4). 注意/提醒
- 個人發(fā)現(xiàn):
- 使用非腳本命令執(zhí)行的可行性高,期間測試了好多次笛求,當然也有可能是自己的配置存在問題
- 使用腳本命令,相對而言要方便些糕簿,更改腳本文件信息后探入,不需要每次重啟 crond ,當然希望能正確配置懂诗,那就再好不過了
- 個人測試而言蜂嗽,腳本命令對于 CentOS6.5 可行,而對于 CentOS7 卻不執(zhí)行
- 建議參考文章
附錄:
(1). 說明
- 對于 “rsyncd.conf 服務(wù)器的配置詳解 ”以及 “rsync 服務(wù)器的啟動方式”殃恒,可參考文章 —— rsync 實現(xiàn)文件備份同步