CentOS7配置rsync實現文件同步

rsync(remote synchronize )是一個遠程文件同步工具,支持多個操作系統,用於在多臺服務器之間同步目錄和文件。rsync採用增量傳輸文件的方法,只傳輸新文件和修改過的文件,而不是每次都全部傳輸,效率比較高。

rsync有以下特點:

1)支持目錄和文件的上傳和下載功能;

2)可以鏡像保存整個目錄樹和文件系統;

3)傳輸效率高,只傳輸新增和修改過的文件。

一、安裝軟件包

rsync的客戶端和服務器軟件的安裝包都是rsync。

yum -y install rsync

二、修改系統配置

1、關閉SELINUX

修改/etc/selinux/config文件,把SELINUX參數的值改爲disabled。

SELINUX =disabled

重啓linux系統或執行 setenforce 0 使修改馬上生效。

2、開通防火牆端口

rsync缺省的端口是873,您可以修改配置文件中的端口。

1)防火牆開通873端口。

firewall-cmd --zone=public --add-port=873/tcp --permanent

2)重啓防火牆。

systemctl restart firewalld

3、啓用rsyncd服務

rsync的服務名是rsyncd。

1)啓動rsyncd服務。

systemctl start rsyncd

2)把rsyncd服務設置爲開機自啓動。

systemctl enable rsyncd

三、配置rsync

接下來我用示例來顯示文件同步的配置和使用,需求如下:

1)我只用一臺服務器來測試,IP地址是192.168.1.129,既是服務器,也是客戶端;

2)服務端的目錄是/tmp/docs;

3)我將創建兩個客戶端用戶:client1和client2;

4)客戶端client1的目錄是/tmp/docs1;

5)客戶端client2的目錄是/tmp/docs2;

6)客戶端client1把/tmp/docs1目錄中的文件發送給服務端;

7)客戶端client2從服務端下載文件,存放在/tmp/docs2目錄中。

rsync的服務器和客戶端,這是一個邏輯的概念,並不是物理的,如果您有三個服務器,就可以用三臺服務器來測試,原理是一樣的。

1、創建操作系統用戶

操作系統用戶可以是普通的用戶,也可以是簡單的、無需登錄的、沒有HOME目錄的用戶,如下:

useradd -M -s /sbin/nologin rsync -g bin  # 創建rsync用戶,指定組爲bin(其它組也行)。

注意,這個用戶是在服務器上創建的,不是客戶端。

2、創建測試目錄和文件

執行以下腳本,創建/tmp/docs目錄,生成測試和文件,並指定用戶和組。

rm -rf /tmp/docs /tmp/docs1 /tmp/docs2  # 刪除測試目錄。
mkdir /tmp/docs /tmp/docs1 /tmp/docs2  # 創建三個測試目錄。
ls /usr > /tmp/docs1/usr.txt  # 把ls /usr的結果輸出到/tmp/docs1/usr.txt文件。
ls /etc > /tmp/docs1/etc.txt  # 把ls /etc的結果輸出到/tmp/docs1/etc.txt文件。
chown -R rsync:rsync /tmp/docs # 修改/tmp/docs目錄及文件用戶和組。

3、創建rsnyc登錄用戶密碼文件

在rsync服務器上創建登錄用戶/密碼文件/etc/rsyncd.passwd,用於客戶端的身份認證,內容如下:

client1:pwd1
client2:pwd2

以上文件包括了兩個用戶(用戶名/密碼分別是client/pwd1和client2/pwd2)。

把/etc/rsyncd.passwd文件的權限設置爲600,如果不這麼做,客戶端登錄會失敗。

chmod 600 /etc/rsync.passwd

4、配置rsync服務器參數

rsync服務器的配置文件是/etc/rsyncd.conf,內容如下:

# /etc/rsyncd: configuration file for rsync daemon mode
# See rsyncd.conf man page for more options.

# rsyncd全局參數。
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = client1,client2
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log

# 同步模塊配置。
[docs]
comment = welcome to docs!
path = /tmp/docs

注意,不要在參數後面加#和說明文字,是非法的。

全局參數說明:

1)uid = rsync,rsync服務端操作系統的用戶,即上面第1點中創建的操作系統用戶,您可以創建新的操作系統用戶,也可以用現有的用戶。

2)gid = rsync,rsync服務端操作系統的用戶的組,即uid用戶的組。

3)port = 873,用於通信的TCP端口,缺省是873。

4)fake super = yes,rsync服務端操作系統的用戶可以不用root。

5)use chroot = no,關閉假根功能。

6)max connections = 200,客戶端最大連接數。

7)timeout = 600,超時時間。

8)ignore errors,忽略錯誤信息。

9)read only = false,是否爲只讀方式。

10)list = false,不允許查看模塊信息。

11)auth users = client1,client2,指定允許登錄的客戶端認證用戶清單,用逗號分隔,必須是/etc/rsync.passwd文件中配置的用戶。

12)secrets file = /etc/rsync.passwd,定義rsync客戶端用戶認證的密碼文件。

13)log file = /var/log/rsyncd.log,rsync服務運行日誌文件,注意,日誌文件日積月累,必須保證有足夠的磁盤空間。

同步參數說明:

1)[docs],模塊名稱,自定義的名稱,不一定要與同步目錄相同。

2)comment = welcome to docs!,模塊說明文字。

3)path = /tmp/docs,同步的目錄名,必須是uid參數指定的用戶和gid參數指定的組。

5、把客戶端的文件同步上傳到服務器

1)採用client1用戶,把客戶端/tmp/docs1目錄下的文件同步到服務器,命令如下:

rsync -avz /tmp/docs1/* [email protected]::docs

在這裏插入圖片描述

2)檢查服務端的/tmp/docs目錄和客戶端的/tmp/docs目錄下的文件是否相同。

3)再生成一些測試文件:創建/tmp/docs1/aaa/tmp.txt文件。

mkdir /tmp/docs1/aaa
ls /tmp > /tmp/docs1/aaa/tmp.txt

4)再執行一次同步。
在這裏插入圖片描述

6、從服務器同步下載文件到客戶端

1)採用client2用戶,把服務器的文件下載到客戶端/tmp/docs2目錄命令如下:

rsync -avz client2@192.168.1.129::docs /tmp/docs2

在這裏插入圖片描述

注意,我用client1用戶上傳文件,用client2下載文件,其目的是爲了演示多個客戶端帳號的配置和使用方法,您也可以只用一個帳號上傳和下載文件。

7、客戶端的密碼配置

以上演示客戶端同步文件的時候,需要手工的輸入密碼,但是在實際應用中,命令可能在後臺運行,不希望手工輸入密碼,這個需求有兩種解決方法:

1)設置客戶端的密碼文件。

例如client1用戶,密碼文件是/etc/client1.passwd,內容如下:

echo pwd1 > /etc/client1.passwd
chmod 600 /etc/client1.passwd

注意,客戶端的密碼文件權限一定要是600,否則認證會失敗。

同步上傳的命令如下:
rsync -avz /tmp/docs1/* [email protected]::docs --password-file=/etc/client1.passwd

2)設置客戶端的密碼環境變量。

export RSYNC_PASSWORD=pwd1

同步上傳的命令如下:

rsync -avz /tmp/docs1/* [email protected]::docs

四、應用經驗

1、小心有坑

rsrync的配置有兩個坑:1)配置文件/etc/rsyncd.conf中,參數後面不要用#註釋;2)服務端和客戶端密碼文件的權限一定要是600,否則認證失敗。

2、客戶端權限問題

客戶端可以用任何用戶來執行,只要該用戶對本地目錄有足夠的權限就可以了。

3、日誌文件的問題

小心服務端的日誌文件(log file)越積越大。

4、效率問題

rsync同步文件採用的是增量同步的方法,本質上就是在傳輸文件之前,先判斷客戶端與服務器目錄的文件變量情況,如果待同步目錄下的文件太多,這個判斷很費時間。

5、rsync+sersync架構

上面提到的rsync存在效率問題,最終的解決方法是採用rsync+sersync架構。

1)sersync可以記錄被監聽目錄中發生變化的(增,刪,改)具體某個文件或目錄的名字;

2)rsync在同步時,只同步發生變化的文件或目錄(每次發生變化的數據相對整個同步目錄數據來說很小,rsync在遍歷查找對比文件時,速度很快),因此效率很高。

rsync+sersync架構在本文就不介紹了,各位真的有需求時再研究它。

五、版權聲明

C語言技術網原創文章,轉載請說明文章的來源、作者和原文的鏈接。

來源:C語言技術網(www.freecplus.net

作者:碼農有道

如果這篇文章對您有幫助,請點贊、收藏、分享支持我們,我們也將繼續創作更多的文章,謝謝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章