1. 程式人生 > 其它 >CentOS7部署lsyncd+rsync實現伺服器檔案實時同步

CentOS7部署lsyncd+rsync實現伺服器檔案實時同步

原文:https://www.jisai.net.cn/articles/centos7-install-lsyncd-rsync-synchronization.html

文章目錄

lsyncd配置簡單靈活,在同步海量小檔案時,效能表現優異, 下面為大家介紹如何部署lsyncd+rsync實現伺服器檔案實時同步

實驗環境:

CentOS 7.6 最小化安裝

需求及網路拓撲圖如下

A(192.168.123.100):Rsync客戶端+lsyncd

B(192.168.123.200):Rsync服務端(daemon模式)

需求:

當A伺服器中的檔案發生變化(新增、修改、刪除),實時推動到B伺服器

實現思路:

A中部署Rsync客戶端+lsyncd,lsyncd通過核心的inotify觸發機制監控檔案的動向,並將改動傳送給Rsync,由Rsync同步到伺服器B;伺服器B以守護程序的方式部署Rsync服務端,接收A發來的檔案同步請求,並將檔案同步!

一、安裝Rsync

在A服務和B伺服器執行以下命令安裝Rsync

yum install -y rsync

二、安裝lsyncd

CentOS 7自帶的yum無法安裝lsyncd。可以通過安裝EPEL儲存庫的方式再用yum安裝lsyncd,命令如下:

yum install -y epel-release

接著執行以下命令即可直接安裝lsyncd

yum -y install lsyncd

注:

lsyncd 只需要在A伺服器上安裝,B伺服器無需安裝

三、配置Rsync

A伺服器為Rsync客戶端,安裝完成即可,B伺服器以daemon方式執行,所以只需要對B伺服器的Rsync進行配置

1、修改配置檔案:

vim /etc/rsyncd.conf

將配置檔案修改如下:

# /etc/rsyncd: configuration file for rsync daemon mode # See rsyncd.conf man page for more options. # configuration example: uid = rsync #Rsync執行使用者 gid = rsync #Rsync執行使用者組 use chroot = no max connections = 4 #最大連線數 pid file = /var/run/rsyncd.pid #pid檔案路徑 lock file = /var/run/rsyncd.lock #lock檔案路徑 log file = /var/log/rsyncd.log #日誌檔案路徑 # exclude = lost+found/ # transfer logging = yes timeout = 300 #超時時間 # ignore nonreadable = yes # dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 # [ftp] # path = /home/ftp # comment = ftp export area [data] #模組名稱,後邊要用到! path = /data/ #同步路徑 ignore errors read only = false #可讀可寫 list = false hosts allow = 192.168.123.100 #允許訪問IP 可寫成IP段 hosts deny = 0.0.0.0/32 #拒絕訪問的IP auth users = rsync #認證連線的使用者名稱 secrets file = /etc/rsyncd.pwd #密碼檔案 #end file

:wq 儲存退出

修改前:

修改後:

2、建立使用者組和使用者

groupadd rsync useradd -s /sbin/nologin -M -g rsync rsync

3、建立同步目錄並授予許可權

mkdir /data chown -R rsync:rsync /data

4、建立認證使用者和密碼檔案並修改許可權

Rsync進行同步需要一個同步的虛擬使用者,這個使用者的使用者名稱已經在配置檔案裡指定,下面建立這個使用者名稱的使用者密碼檔案

由於是使用者名稱和密碼檔案所以必須要將其修改為600許可權,不然後期會報錯無法認證

echo "rsync:rsync" >/etc/rsyncd.pwd chmod 600 /etc/rsyncd.pwd

5、啟動Rsync

rsync --daemon --config=/etc/rsyncd.conf

6、驗證Rsync是否啟動

我們可以通過檢視Rsync監聽埠(Rsync預設監聽873埠),或者檢視日誌檔案以確定Rsync是否以daemon模式成功啟動

netstat -anlpt | grep rsync

或者

cat /var/log/rsyncd.log

如圖,即Rsync已成功啟動

至此,伺服器B端的操作,已經結束

7、測試Rsync

伺服器A需要建立相應的密碼認證檔案用於使用者自動認證

由於也是密碼檔案,所以也需要將檔案許可權修改為600

echo "rsync" > /etc/rsyncd.pwd #由於我們要在同步命令裡指定使用者名稱,所以這裡就不再指定使用者名稱 chmod 600 /etc/rsyncd.pwd

由於服務端路徑存在許可權問題,所以同步源(Rsync客戶端)也需要進行相同許可權設定

下面進行建立使用者(組)、目錄、建立測試檔案並賦予其許可權

groupadd rsync useradd -s /sbin/nologin -M -g rsync rsync mkdir /data cd /data/ touch {01..10} chown -R rsync:rsync /data

目錄檔案許可權如下

關閉兩臺伺服器的防火牆

systemctl stop firewalld

下面進行測試

將A伺服器/data/ 目錄下的檔案同步到B伺服器

rsync -avz /data/ [email protected].200::data --password-file=/etc/rsyncd.pwd

注:

  1. 兩個冒號
  2. /data 伺服器A的資料來源路徑
  3. data是模組名稱,配置檔案裡已寫明
  4. [email protected] 認證使用者名稱@被同步的伺服器IP,這裡是B伺服器的IP

如圖,即表示成功

8、檢測傳輸

檢視B伺服器的/data目錄

如圖,檔案已同步

四、配置lsyncd

1、修改配置檔案

vim /etc/lsyncd.conf

刪除原有內容並鍵入以下內容

settings { logfile = "/var/log/lsyncd/lsyncd.log", statusFile = "/var/log/lsyncd/lsyncd.status", inotifyMode = "CloseWrite", maxProcesses = 8, maxDelays = 1, nodaemon = false, } sync { default.rsync, source = "/data/", --監控目錄 target = "[email protected]::data", --rsync的認證使用者名稱、IP、模組 -- delete = true, exclude = { '.**', '.git/**', '*.bak', '*.tmp', 'runtime/**', 'cache/**' }, delay = 15, -- init = false, rsync = { binary = "/usr/bin/rsync", --rsync可執行檔案路徑,必須為絕對路徑 password_file = "/etc/rsyncd.pwd", --密碼認證檔案 archive = true, compress = false, verbose = false, _extra = {"--bwlimit=200", "--omit-link-times"} } }

修改前:

修改後:

注:lsyncd的配置檔案是lua語法,註釋方式為:“--”

2、啟動lsyncd

lsyncd -log Exec /etc/lsyncd.conf

或者

systemctl start lsyncd

如圖,即表示啟動成功

或者

3、測試

修改/data 目錄下的任意檔案,儲存,檢視B伺服器是否同步

伺服器A

伺服器B

如圖,內容成功同步,實驗成功,撒花!!!!

注:

  1. 檔案許可權一定一致
  2. Rsync執行需要系統使用者,認證需要Rsync虛擬使用者,注意兩個使用者的區別
  3. 如果有報錯,注意檢視日誌檔案檢測執行狀態

原創文章。釋出者:汲賽,轉載請註明出處:https://www.jisai.net.cn/articles/centos7-install-lsyncd-rsync-synchronization.html