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
二、安裝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 rsync3、建立同步目錄並授予許可權
mkdir /data chown -R rsync:rsync /data4、建立認證使用者和密碼檔案並修改許可權
Rsync進行同步需要一個同步的虛擬使用者,這個使用者的使用者名稱已經在配置檔案裡指定,下面建立這個使用者名稱的使用者密碼檔案
由於是使用者名稱和密碼檔案所以必須要將其修改為600許可權,不然後期會報錯無法認證
echo "rsync:rsync" >/etc/rsyncd.pwd chmod 600 /etc/rsyncd.pwd5、啟動Rsync
rsync --daemon --config=/etc/rsyncd.conf6、驗證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注:
- 兩個冒號
- /data 伺服器A的資料來源路徑
- data是模組名稱,配置檔案裡已寫明
- [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
如圖,內容成功同步,實驗成功,撒花!!!!
注:
- 檔案許可權一定一致
- Rsync執行需要系統使用者,認證需要Rsync虛擬使用者,注意兩個使用者的區別
- 如果有報錯,注意檢視日誌檔案檢測執行狀態
原創文章。釋出者:汲賽,轉載請註明出處:https://www.jisai.net.cn/articles/centos7-install-lsyncd-rsync-synchronization.html