使用 rsync 高效同步兩台 Linux 服務器的數據
calendar_today
schedule
4 分鐘閱讀
visibility
188 閱讀
使用 rsync 高效同步兩台 Linux 服務器的數據
在日常運維工作中,經常需要在多台服務器之間同步文件或目錄。無論是備份關鍵數據、部署靜態資源,還是保持開發與生產環境的一致性,rsync 都是一個強大而可靠的工具。本文將詳細介紹如何使用 rsync 在兩台 Linux 服務器之間進行高效、安全的文件同步。
什麼是 rsync?
rsync(remote sync)是一個用於本地或遠程同步文件和目錄的命令行工具。它採用“增量傳輸”算法,只傳輸源和目標之間差異的部分,極大減少了網絡帶寬消耗和同步時間。同時,rsync 支持壓縮、權限保留、符號鏈接處理、斷點續傳等高級功能。
前提條件
假設我們有兩台服務器:
- 源服務器(Source):192.168.1.10,包含要同步的數據
/data/www - 目標服務器(Destination):192.168.1.20,希望將數據同步到
/backup/www
兩台服務器均運行 Linux(如 CentOS、Ubuntu 等),並已安裝 rsync 和 openssh-server。
若未安裝 rsync,可使用以下命令安裝:
- Ubuntu/Debian:
sudo apt install rsync- CentOS/RHEL:
sudo yum install rsync
同步架構圖
graph TD
Source[源服務器 192.168.1.10] -->|rsync over SSH| Destination[目標服務器 192.168.1.20]
SSH 免密登錄配置流程
為了實現自動化同步,建議配置從源服務器到目標服務器的 SSH 公鑰認證。
graph TD
A[生成 SSH 密鑰對] --> B[複製公鑰到目標服務器]
B --> C[測試免密登錄]
C --> D{登錄成功?}
D -- 是 --> E[繼續 rsync 配置]
D -- 否 --> F[檢查 authorized_keys 權限]
F --> B
自動化同步執行流程
sequenceDiagram
participant Admin as 運維人員
participant Src as 源服務器
participant Dst as 目標服務器
Admin->>Src: 編寫同步腳本 sync-www.sh
Admin->>Src: 配置 cron 定時任務
Src->>Dst: 每日凌晨自動執行 rsync
Dst-->>Src: 返回同步結果
Src->>Admin: 記錄日誌到 /var/log/rsync-www.log
第一步:配置 SSH 免密登錄(推薦)
為了實現自動化同步,建議配置從源服務器到目標服務器的 SSH 公鑰認證。
# 在源服務器執行
ssh-keygen -t rsa -b 4096
ssh-copy-id user@192.168.1.20
ssh user@192.168.1.20 # 應無需密碼
第二步:基本 rsync 同步命令
rsync -avz /data/www/ user@192.168.1.20:/backup/www/
注意:源路徑末尾的
/決定是否同步目錄內容本身。
第三步:常用選項
| 選項 | 說明 |
|---|---|
-a |
歸檔模式(保留權限、時間等) |
-v |
詳細輸出 |
-z |
傳輸壓縮 |
--delete |
刪除目標端多余文件 |
--exclude='*.log' |
排除日誌文件 |
-P |
顯示進度 + 斷點續傳 |
第四步:自動化腳本 + cron
創建腳本 /usr/local/bin/sync-www.sh:
#!/bin/bash
rsync -avz --delete --exclude='*.log' /data/www/ user@192.168.1.20:/backup/www/ >> /var/log/rsync-www.log 2>&1
echo "[$(date)] Sync completed." >> /var/log/rsync-www.log
設置定時任務:
0 2 * * * /usr/local/bin/sync-www.sh
結語
通過 rsync + SSH + cron 的組合,你可以構建一套輕量、可靠、自動化的跨服務器同步方案。配合 Mermaid 圖表,整個流程一目了然,便於團隊協作與知識沉澱。
提示:如需實時同步,可結合
inotifywait監聽文件變更事件。
以上是關於使用 rsync 在兩個 Linux 服務器之間同步數據的完整指南。根據你的要求,文章中包含了標準的 Mermaid 代碼塊語法來展示流程圖和時序圖。其他類型的圖表(類圖、狀態圖等)在本文中可能不適用,但你可以在其他場景中使用它們來可視化不同的概念或過程。