萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux Rsync + Sersync 實時同步架構部署完整實戰

傳統 Rsync + Inotify-tools 架構在海量小檔案場景下效能低下:Inotify 只通知「目錄有變更」,Rsync 需全量掃描對比,耗時極長。Sersync 基於 Inotify 開發,能記錄具體變更的檔案/目錄名稱,配合 Rsync 僅同步增量,效能提升數量級。本文記錄 CentOS 5.x 雙向三節點(1 源 + 2 目標)生產級部署全流程。

架構對比

架構變更通知粒度Rsync 同步範圍適用場景
Rsync + Inotify-tools目錄級全量掃描對比資料量小(< 50 GB)、檔案數少
Rsync + Sersync檔案/目錄級僅同步變更項資料量大(> 100 GB)、百萬級檔案

環境規劃

角色IP功能
源伺服器192.168.21.129運行 Sersync 監控 /home/www.jb51.net,推送至目標端
目標伺服器 1192.168.21.127運行 Rsync Server (port 873)
目標伺服器 2192.168.21.128運行 Rsync Server (port 873)

第一部分:目標端部署 Rsync Server(兩台同樣操作)

  1. 關閉 SELinux
    vi /etc/selinux/config → SELINUX=disabled → reboot 或 setenforce 0 臨時生效。
  2. 防火牆開放 873 埠
    vi /etc/sysconfig/iptables
    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT
    注意:規則必須插在 22 埠規則之後、REJECT 規則之前,否則 iptables 啟動失敗。
    /etc/init.d/iptables restart
  3. 安裝 Rsync + xinetd
    yum install -y rsync xinetd
  4. 啟用 xinetd 管理 Rsync
    vi /etc/xinetd.d/rsync → disable = no
    /etc/init.d/xinetd start
  5. 建立 /etc/rsyncd.conf
    log file = /var/log/rsyncd.log
    pid file = /var/run/rsyncd.pid
    lock file = /var/run/rsync.lock
    secrets file = /etc/rsync.pass
    motd file = /etc/rsyncd.motd
    
    [home_www.jb51.net]
    path = /home/www.jb51.net/
    comment = home_www.jb51.net
    uid = root
    gid = root
    port = 873
    use chroot = no
    read only = no
    list = no
    max connections = 200
    timeout = 600
    auth users = home_www.jb51.net_user
    hosts allow = 192.168.21.129
    hosts deny = 192.168.21.254
  6. 建立認證檔 /etc/rsync.pass
    echo "home_www.jb51.net_user:123456" > /etc/rsync.pass
    chmod 600 /etc/rsyncd.conf /etc/rsync.pass
  7. 啟動驗證
    service xinetd restart && netstat -antlp | grep 873

Rsync+Sersync 架構圖

第二部分:源端部署 Rsync Client + Sersync

  1. 同樣關閉 SELinux、開放 873 埠(客戶端非必須,但建議對稱)。
  2. 安裝 Rsync Client:yum install -y rsync xinetd(若無 rsync 則裝雙套件)。
  3. 建立密碼檔 /etc/passwd.txt(僅含密碼):
    echo "123456" > /etc/passwd.txt && chmod 600 /etc/passwd.txt
  4. 測試手動同步
    mkdir -p /home/www.jb51.net/ceshi
    rsync -avH --port=873 --progress --delete /home/www.jb51.net/ home_www.jb51.net_user@192.168.21.127::home_www.jb51.net --password-file=/etc/passwd.txt
    rsync ... @192.168.21.128::home_www.jb51.net ...
  5. 安裝 Sersync
    下載 sersync(Google Code 存檔或 GitHub fork),解壓至 /usr/local/sersync。
    修改 confxml.xml:
    - ...
    -
    -
    - 調整 、... 等。
    啟動:./sersync2 -r -d -o confxml.xml(-r 先全量同步、-d 守護進程、-o 指定配置)。
  6. 驗證實時同步:源端建立/修改/刪除檔案,目標端秒級同步完成。

關鍵配置細節

  • use chroot = no:支援同步符號連結指向的實際檔案。
  • max connections = 200:應大於並發同步數。
  • timeout = 600:大檔傳輸防超時。
  • Sersync crontab 區段可設定定時全量校驗(如每天 03:00)。

常見問題排查

  • 密碼檔權限:必須 600,否則 Rsync 拒絕讀取。
  • SELinux 阻擋:audit2allow -w -a 分析、建立模組或直接設 Permissive。
  • 大量小檔案首次全量同步極慢:先用 tar 打包傳輸解壓,再啟動 Sersync 增量同步。
  • rsync: failed to connect:檢查防火牆、xinetd 是否運行、rsyncd.conf 語法、hosts allow IP。

Rsync + Sersync 是「輕量級、無資料庫、秒級延遲」的實時同步最佳實踐,適合中小型檔案同步、多機房熱備、靜態資源分發等場景。

copyright © 萬盛學電腦網 all rights reserved