資料同步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 來確保目標中不在源中的檔案被刪除。