29 Linux 同步伺服器 Rsync

2022-09-08 23:33:22 字數 3976 閱讀 8986

rsync 是類 unix 系統下的資料映象備份工具 。一款支援快速 完全備份和 增量備份的工具,支援本地複製,遠端同步等 ,類似於 scp 命令 rsync 命令 在 同步 檔案之前要先登入 目標 主機 進行使用者身份認證,認證過 後才能進行資料同步 身份認證方式取決於所使用的協議型別 rsync 一般使用兩種協議進行資料同步 ssh 協議和 rsync 協議

既然涉及到資料同步 必要的兩個 概念是 源 位址 檔案 )),目標 位址 檔案 )),以及以哪一方為基準 例如,想讓目標主機上的檔案和本地檔案保持同步,則是以本地檔案為同步基準,將本地檔案作為原始檔推送到目標主機上。

rsync在進行 資料同步之前需要先進行使用者身份驗證 ,驗證方式取決於使用的連線方式

我們一般使用 rsync 來進行單向資料同步 ,因此我們需要確定乙個基準 ,比如 :兩台伺服器 一台 nfs 作為 **資料伺服器 基準伺服器 另外一台專門做 rsync 資料備份伺服器 ,我們以此為基礎開始我們的實驗

實驗環境:一台 nfs 伺服器,一台 rsync 伺服器在兩台伺服器上分別建立目錄( filesrc 、 filedst)

上行同步(上傳)

1)在兩台伺服器上分別建立目錄( filesrc、filedst)

2)搭建 rsync 服務 (僅需要在 nfs 伺服器上搭建即可)

建立主配置檔案(/etc/rsync d .conf)

address = 192.168.88.10 # rsync 服務繫結ip

port 873 # 預設服務埠 873

log file = /var/log/rsyncd.log # 日誌檔案位置

pid file = /var/run/rsyncd.pid # 程序號檔案位置

[web]# 共享名 :用來連線是寫在 url 上的

comment = web directory backup # 共享描述話語

path = /filesrc # 實際共享目錄

read only = no # 是否僅允許讀取

dont compress = *.gz *.bz2 # 哪些檔案型別不進行壓縮

auth users = user1 # 登入使用者名稱非系統使用者,需要自行建立

secrets file = /etc/rsyncd_users.db # 認證所需賬戶密碼檔案需自行建立同上

建立認證所需賬戶密碼檔案

vim /etc/rsyncd_users.db

user1:123456

​# chmod 600 /etc/rsyncd_users.db # 必須修改許可權,否則登入報錯

啟動服務

rsync --daemon

netstat -antp | grep 873

設定對映使用者對共享目錄有許可權 (r)

setfacl -m u:nobody:rwx /filesrc

注意:關閉服務可使用 kill 命令,但偶爾會造成服務被結束但程序號配置檔案不被刪除的問題若遇到此類問題可自己手動刪除,再啟動則正常建議自己寫乙個 rsync 的服務管理指令碼

上行同步(上傳)

拓展:

rsync 協議的免密碼可以借助乙個環境變數實現

export rsync_password=虛擬使用者密碼(客戶端生成)

定期同步的缺點:

實時同步的優點:

inotify兩個監控命令

inotifywait: 用於持續監控,實時輸出結果 常用

inotifywatch :用於短期監控,任務完成後再出結果

yum -y install gcc

tar -zxvf inotify-tools-3.14.tar.gz

cd inotify-tools-3.14

./configure && make && make install

格式:inotifywait -mrq -e 監控動作1,監控動作2 /監控目錄 &

示例:inotifywait -mrq -e create,delete /filesrc &

-m:始終保持事件監聽狀態

-r:遞迴查詢目錄

-q:只列印監控事件的資訊

監控動作:modify (內容 ),create,attrib (許可權 ),move,delete

vim src.sh

#!/bin/bash

a="inotifywait -mrq -e create,delete /filesrc"

b="rsync -**z /filesrc/* [email protected]:/filedst"

$a | while read directory event file # while 判斷是否接收到監控記錄

do$b

done

# 注:使用者登入時要求免密碼驗證

在伺服器端建立,刪除檔案 ,檢視備份端是否正常

拓展:調整 inotify 監控的檔案數量

調整inotify核心引數(/etc/sysctl.conf)

-mak_queue_events

監控佇列大小

mak_user_instances

最多監控例項數

max_user_watches

每個例項最多監控檔案數

rsync在單向同步上支援的非常好且效率很高 但是在雙向同步支援較差 unison 則是雙向同步的優秀工具 ,但其缺點是同步效率較低。

1)安裝 inotif y

tar -zxvf inotify-tools-3.14.tar.gz

cd inotify-tools-3.14

./configure && make && make install

2)安裝 oca ml

tar -zxvf ocaml-3.10.1.tar.gz

cd ocaml-3.1 0.1

./configure # 忽略所有報錯

make world opt

make install

3)安裝 unison

# tar -zxvf unison-2.13.16.tar.gz

cd unison-2.13.16

make uistyle=text threads=true static=true # 已經存在 makefile 檔案,不需要 configure

cp unison /usr/local/ # 把生成的指令碼拷貝出來

注意:同樣的操作在伺服器端也做一遍 。

注:雙向自動同步,監控目錄和資料同步時,源目錄不能使用*萬用字元傳輸,否則會變成死迴圈。

filesrc端:

#!/bin/bash 

a="inotifywait -mrq -e create,delete /filesrc"

b="/usr/local/bin/unison -batch /filesrc/ ssh:" # -batch:批處理

$a | while read directory event file

do $b

done

filedst端:

#!/bin/bash 

a="inotifywait -mrq -e create,delete /filedst"

b="/usr/local/bin/unison -batch /filedst/ ssh:" #-batch:批處理

$a | while read directory event file

do $b

done

將兩個指令碼放入後台執行 bash src.sh &

分別在兩個主機上建立檔案檢視是否可以實現雙向實時同步可能會有延遲

Linux伺服器時間同步

linux伺服器執行久時,系統時間就會存在一定的誤差,一般情況下可以使用date命令進行時間設定,但在做資料庫集群分片等操作時對多台機器的時間差是有要求的,此時就需要使用ntpdate進行時間同步。date命令 date 檢視當前時間,結果如下 tue mar 4 01 36 45 cst 2014...

Linux 伺服器時間同步

linux伺服器執行時間過長導致系統時間存在一定的誤差,一般情況下可以使用date命令進行時間設定,但在做資料庫集群分片等操作時對多台機器的時間差是有要求的,此時就需要使用ntpdate進行時間同步。date命令 date 檢視當前時間,結果如下 tue mar 4 01 36 45 cst 201...

Linux伺服器時間同步

linux伺服器執行久時,系統時間就會存在一定的誤差,一般情況下可以使用date命令進行時間設定,但在做資料庫集群分片等操作時對多台機器的時間差是有要求的,此時就需要使用ntpdate進行時間同步。date命令 date 檢視當前時間,結果如下 tue mar 4 01 36 45 cst 2014...