資料同步rsync

pro111發表於2024-11-03

資料同步rsync

Rsync本地模式和遠端模式

1.安裝

yum install -y rsync

2.命令語法

  • 本地模式
rsync 引數 src  dest

1.對檔案同步
[root@backup yum.repos.d]# rsync -avzP /var/log/messages /tmp/
sending incremental file list
messages
      3,311,285 100%   84.50MB/s    0:00:00 (xfr#1, to-chk=0/1)

sent 343,213 bytes  received 35 bytes  686,496.00 bytes/sec
total size is 3,311,285  speedup is 9.65


2.對目錄同步
複製整個目錄
[root@backup yum.repos.d]# rsync -avzP /opt/sh /tmp/
sending incremental file list
sh/
sh/1.sh
              1 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=4/6)
sh/backup.sh
            628 100%  613.28kB/s    0:00:00 (xfr#2, to-chk=3/6)
sh/cp.sh
            624 100%  609.38kB/s    0:00:00 (xfr#3, to-chk=2/6)
sh/ping.sh
            347 100%  338.87kB/s    0:00:00 (xfr#4, to-chk=1/6)
sh/tips.sh
            472 100%  460.94kB/s    0:00:00 (xfr#5, to-chk=0/6)

sent 1,795 bytes  received 115 bytes  3,820.00 bytes/sec
total size is 2,072  speedup is 1.08
[root@backup yum.repos.d]# ls /tmp/
messages  sh


複製目錄下檔案
[root@backup yum.repos.d]# rsync -avzP /opt/sh/  /tmp/
sending incremental file list
./
1.sh
              1 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=4/6)
backup.sh
            628 100%  613.28kB/s    0:00:00 (xfr#2, to-chk=3/6)
cp.sh
            624 100%  609.38kB/s    0:00:00 (xfr#3, to-chk=2/6)
ping.sh
            347 100%  338.87kB/s    0:00:00 (xfr#4, to-chk=1/6)
tips.sh
            472 100%  460.94kB/s    0:00:00 (xfr#5, to-chk=0/6)

sent 1,780 bytes  received 114 bytes  3,788.00 bytes/sec
total size is 2,072  speedup is 1.09
[root@backup yum.repos.d]# ls /tmp/
1.sh  backup.sh  cp.sh  messages  ping.sh  sh  tips.sh


  • 遠端模式
rsync 引數 src user@ip:dest
#推送模式
[root@backup ~]# ls /root/
1.txt  Desktop  Documents  Downloads  Music  Pictures  Public  Templates  Videos
[root@backup ~]# rsync -avzP /root/ root@web01:/tmp/
[root@web01 ~]# ls /tmp/
1.txt  Desktop  Documents  Downloads  Music  Pictures  Public  Templates  Videos

#拉取模式
[root@web01 ~]# ls /tmp/
[root@web01 ~]# 
[root@backup ~]# rsync -az  --delete  root@web01:/tmp/ /tmp/
[root@backup ~]# ls /tmp/
[root@backup ~]# 


-a 保持檔案原有屬性
-z 對傳輸資料壓縮
-P 顯示檔案傳輸進度
-v 顯示傳輸細節情況  
--bwlimit  傳輸時限速
--delete 無差異化複製,保證目標和源目錄一致,將目標中和源目錄中不一樣的s

rsync服務端

為什麼需要服務模式

Rsync藉助ssh協議同步資料存在的缺陷

1.使用系統使用者(不安全)

2.使用普通使用者(許可權不足)

3.守護程序傳輸方式(不使用系統使用者,更安全)

rsync服務端部署

1.安裝rsync
yum install -y rsync 
2.修改配置檔案
cat > /etc/rsyncd.conf <<EOF
uid = www      
gid = www
port = 873  #監聽埠
fake super = yes  #無需讓rsync以root身份執行,允許接受檔案的完整屬性
use chroot = no  #禁錮推送的資料到某個目錄,不允許跳出該目錄
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup #定義虛擬使用者,作為連結認證使用者
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
-----
[backup] #定義模組資訊
comment = 123 #定義註釋資訊
path = /backup #定義接受備份資料目錄

3.建立使用者
useradd -u 1100 -M -s /sbin/nologin www -M 沒有家目錄

4.建立backup資料夾
mkdir /backup
chown -R www:www /backup

5.建立rsync專用賬戶密碼
echo rsync_backup:111> /etc/rsync.passwd
chmod 600 /etc/rsync.passwd

6.用systemctl管理rsync服務
建立一個配置檔案

[root@localhost conf]# vi /etc/sysconfig/rsyncd
OPTIONS=""
這個檔案用於設定環境變數。OPTIONS 變數可以用來定義啟動 rsync 守護程序時的額外引數。這裡初始為空,意味著沒有額外引數。
建立service檔案

[root@localhost conf]# vi /lib/systemd/system/rsyncd.service
[Unit]
Description=fast remote file copy program daemon
ConditionPathExists=/etc/rsyncd.conf

[Service]
EnvironmentFile=/etc/sysconfig/rsyncd
ExecStart=/usr/bin/rsync --daemon --no-detach "$OPTIONS"

[Install]
WantedBy=multi-user.target

[Unit]
Description: 這行描述了服務的作用,這裡是“快速遠端檔案複製程式守護程序”。
ConditionPathExists: 這個條件檢查 /etc/rsyncd.conf 檔案是否存在,如果不存在,服務不會啟動。
[Service]
EnvironmentFile: 指定一個環境檔案,這裡是 /etc/sysconfig/rsyncd,會載入裡面定義的環境變數。
ExecStart: 定義了服務啟動時執行的命令。這裡是呼叫 rsync 以守護程序模式執行,並且使用 --no-detach 選項保持在前臺執行。"$OPTIONS" 是從環境檔案中讀取的選項。
[Install]
WantedBy: 指定該服務應該在什麼目標下啟動,這裡是 multi-user.target,意味著在多使用者模式下啟動。

rsync客戶端

安裝rsync
yum install -y rsync
推送模式
[root@web01 yum.repos.d]# rsync -avzP /root/ rsync_backup@192.168.5.100::backup
Password: 這裡需要輸入密碼
sending incremental file list
./
非互動式密碼的兩種操作
1.生成密碼檔案
[root@web01 yum.repos.d]# echo 111 > /etc/rsync.pwd
[root@web01 yum.repos.d]# chmod 600 /etc/rsync.pwd

[root@web01 yum.repos.d]# rsync -avzP --password-file=/etc/rsync.pwd /root/ rsync_backup@192.168.5.100::backup
sending incremental file list
./
1.txt
         81,659 100%   46.63MB/s    0:00:00 (xfr#1, to-chk=19/30)
anaconda-ks.cfg
          1,190 100%    1.13MB/s    0:00:00 (xfr#2, to-chk=18/30)
initial-setup-ks.cfg
          1,574 100%    1.50MB/s    0:00:00 (xfr#3, to-chk=17/30)
logs_20241031103922_backupd_storaged_1730342418.tar
     58,852,864 100%   40.67MB/s    0:00:01 (xfr#4, to-chk=16/30)

sent 39,137,738 bytes  received 112 bytes  26,091,900.00 bytes/sec
total size is 60,255,520  speedup is 1.54

2.環境變數
export RSYNC_PASSWORD='111'
[root@web01 yum.repos.d]# export RSYNC_PASSWORD='111'
[root@web01 yum.repos.d]#  rsync -avzP /root/ rsync_backup@192.168.5.100::backup
sending incremental file list
./
1.txt
         81,659 100%   46.63MB/s    0:00:00 (xfr#1, to-chk=19/30)
anaconda-ks.cfg
          1,190 100%    1.13MB/s    0:00:00 (xfr#2, to-chk=18/30)
initial-setup-ks.cfg
          1,574 100%  768.55kB/s    0:00:00 (xfr#3, to-chk=17/30)
logs_20241031103922_backupd_storaged_1730342418.tar
     58,852,864 100%   39.53MB/s    0:00:01 (xfr#4, to-chk=16/30)

sent 39,137,738 bytes  received 112 bytes  15,655,140.00 bytes/sec
total size is 60,255,520  speedup is 1.54


下載模式
[root@web01 yum.repos.d]# rsync -zvzP rsync_backup@192.168.5.100::backup /tmp/
skipping directory .

sent 8 bytes  received 38 bytes  92.00 bytes/sec
total size is 0  speedup is 0.00
[root@web01 yum.repos.d]# ls /tmp
1.txt  anaconda-ks.cfg  initial-setup-ks.cfg  logs_20241031103922_backupd_storaged_1730342418.tar

inotify-tools +rsync

1.配置epel源
2.安裝inotify-tools
[root@backup ~]# yum install -y inotify-tools
[root@backup ~]# ls -l /proc/sys/fs/inotify/
total 0
-rw-r--r--. 1 root root 0 Nov  2 09:02 max_queued_events
-rw-r--r--. 1 root root 0 Nov  2 09:02 max_user_instances
-rw-r--r--. 1 root root 0 Nov  2 09:02 max_user_watches
能看到三個檔案就代表核心支援inotify機制
3.如何使用
inotifywait 是一個常用的命令列工具,可以用於監視檔案和目錄的變化。
-m 或 --monitor: 持續監視指定的檔案或目錄,直到手動停止。
-e 或 --event: 指定要監視的事件型別,可以指定多個事件。常見的事件包括:
access (IN_ACCESS)
modify (IN_MODIFY)
attrib (IN_ATTRIB)
close_write (IN_CLOSE_WRITE)
close_nowrite (IN_CLOSE_NOWRITE)
open (IN_OPEN)
moved_to (IN_MOVED_TO)
moved_from (IN_MOVED_FROM)
create (IN_CREATE)
delete (IN_DELETE)
delete_self (IN_DELETE_SELF)
move_self (IN_MOVE_SELF)
unmount (IN_UNMOUNT)
-r 或 --recursive: 遞迴監視指定目錄中的所有子目錄。
-q 或 --quiet: 僅顯示事件,不輸出額外的提示資訊。
--format: 自定義輸出格式。例如,可以指定只輸出檔名或事件型別


[root@backup ~]# inotifywait -mqr --timefmt '%T' --format "%T %w %f: %e" /backup
09:13:26 /backup/ 1: DELETE
09:13:26 /backup/ 1.txt: DELETE
09:13:26 /backup/ anaconda-ks.cfg: DELETE
09:13:26 /backup/ initial-setup-ks.cfg: DELETE
09:13:26 /backup/ logs_20241031103922_backupd_storaged_1730342418.tar: DELETE
--timefmt '%T': 設定時間格式,用於輸出事件發生的時間。
--format "%T %w %f: %e": 自定義輸出格式。具體來說:
%T:事件發生的時間(根據 --timefmt 設定)。
%w:監視的目錄路徑。
%f:發生變化的檔名。
%e:事件型別(如建立、修改、刪除等)。
/backup: 指定要監視的目錄路徑。

lsyncd

一般lsyncd部署在rsync客戶端
關閉selinxu

1.安裝lsyncd
[root@backup ~]# yum install -y lsyncd
2.修改配置檔案
(只監測一個目錄)
settings {
    logfile = "/var/log/lsyncd.log",
    statusFile = "/var/run/lsyncd.status",
    inotifyMode = "CloseWrite",
    MaxProcesses = 8
}

sync {
    default.rsync,
    source = "/tmp",
    target = "rsync_backup@backup:/backup", 
    delete = true,
    exclude = {".*"},
    delay = 1,
    rsync = {
        binary = "usr/bin/rsync",   
        archive = true,
        compress = true,
        verbose = true,
        password_file = "/etc/rsync.pwd",
        _extra = {"--bwlimit=200"}
    }
}

logfile: 指定 lsyncd 的日誌檔案路徑,所有日誌資訊將記錄在此檔案中。
statusFile: 指定狀態檔案的路徑,用於儲存 lsyncd 的執行狀態資訊。
inotifyMode: 設定 inotify 的模式為 CloseWrite,這意味著只有在檔案關閉後寫入時才觸發事件。這可以減少頻繁寫入時的不必要觸發。
MaxProcesses: 設定允許的最大併發程序數。這裡設為 8,意味著可以同時處理最多 8 個檔案同步程序。

default.rsync: 指定使用 rsync 作為同步方式。
source: 定義要監視和同步的源目錄路徑。
target: 定義目標路徑,通常是一個遠端伺服器的目錄,使用 SSH 進行連線。
delete: 設定為 true,表示在目標中刪除源目錄中不存在的檔案,以保持同步的一致性。
exclude: 這是一個排除模式,定義要排除的檔案或目錄。在這裡,".*" 表示排除所有以點開頭的檔案(通常是隱藏檔案)。
delay: 設定在檢測到檔案變化後,實際執行同步的延遲時間(以秒為單位)。這裡設為 1 秒,意味著在事件發生後的 1 秒內不會進行同步。

binary: 指定 rsync 的可執行檔案路徑。在這裡的路徑應為 /usr/bin/rsync(請注意可能缺少前導 /)。
archive: 設定為 true,表示使用歸檔模式,這會保持檔案的許可權、時間戳等屬性。
compress: 設定為 true,在同步過程中壓縮資料以節省頻寬。
verbose: 設定為 true,表示輸出詳細的同步過程資訊。
password_file: 指定一個檔案路徑,該檔案包含用於 SSH 連線的 rsync 密碼。確保該檔案的許可權設定為安全,以防止未授權訪問。
_extra: 傳遞給 rsync 的額外引數,這裡使用 --delete 來確保目標中不在源中的檔案被刪除。

相關文章