一文搞懂 rsync:原理剖析 + Rocky Linux 主機同步部署實戰(zhàn)
今天分享一下rsync數(shù)據(jù)同步工具。
在日常運維中,數(shù)據(jù)同步 是一個極其常見的任務(wù)。無論是備份、部署、遷移、內(nèi)容分發(fā),rsync 幾乎是 Linux 下的首選工具。
今天,我將介紹rsync的理論基礎(chǔ),并手把手部署一次基于 兩臺 Rocky Linux 主機 的生產(chǎn)級同步方案。
一、什么是 rsync?
rsync(remote sync) 是一個快速且功能強大的文件同步工具,支持本地與遠程同步,采用“增量同步算法”,僅同步變化部分,性能非常高效。它的核心優(yōu)勢在于:
- 增量同步:只傳輸變更部分,節(jié)省帶寬
- 支持壓縮:可減少傳輸數(shù)據(jù)量
- 支持多種協(xié)議:本地、SSH、rsync 守護進程等
- 支持?jǐn)帱c續(xù)傳、權(quán)限保留、刪除同步等高級特性
可運行在兩種模式下:
- 命令行模式(push/pull):使用 rsync 命令手動或定時執(zhí)行同步。
- 服務(wù)端守護模式(daemon):以守護進程方式運行,支持匿名或認(rèn)證客戶端訪問共享模塊。
二、核心工作原理
- 利用 “rsync算法” 比較源與目標(biāo)文件內(nèi)容,只傳輸差異數(shù)據(jù)塊。
- 使用 SSH、RSH 或 rsync 協(xié)議 作為傳輸通道。
這種“塊級差異傳輸 + 校驗算法”機制,讓 rsync 同步比 cp/scp 更高效、穩(wěn)定,尤其適用于大文件、慢網(wǎng)速、跨地部署等場景。
三、實驗部署
1. 環(huán)境準(zhǔn)備
角色 | 主機名 | IP 地址 | 系統(tǒng)版本 |
源服務(wù)器 |
|
| Rocky Linux 9.4 |
目標(biāo)服務(wù)器 |
|
| Rocky Linux 9.4 |
目標(biāo):將 /var/www/html/ 目錄內(nèi)容,每小時自動同步到 /data/backup/web/。
2. 源服務(wù)器配置
(1) 準(zhǔn)備數(shù)據(jù)
這里是實驗環(huán)境,生產(chǎn)環(huán)境就根據(jù)自己需要同步的目錄就可以
# 安裝httpd
yum install httpd
# 上傳一些文件到/var/www/html下
(2) 安裝 rsync
sudo dnf install rsync -y
(3) 創(chuàng)建 rsync 配置文件
vi /etc/rsyncd.conf
添加下面的內(nèi)容:
# 指定rsync守護進程運行時的用戶身份(為了安全,一般設(shè)為nobody)
uid = nobody
# 指定rsync守護進程運行時的組身份
gid = nobody
# 是否啟用chroot(默認(rèn)是yes),設(shè)置為no可避免對文件路徑限制,有利于備份大路徑結(jié)構(gòu)
use chroot = no
# 最大并發(fā)連接數(shù),超出連接將被拒絕,防止資源耗盡
max connections = 20
# rsync守護進程運行時的日志文件
log file = /var/log/rsyncd.log
# PID文件路徑,用于進程管理
pid file = /var/run/rsyncd.pid
# 守護進程監(jiān)聽的端口,默認(rèn)873,確保防火墻已放通
port = 873
# 認(rèn)證用戶,僅這些用戶可以訪問該模塊(對應(yīng)下面的secrets file)
auth users = rsyncuser
# 指定認(rèn)證文件,格式為:用戶名:密碼,一行一個用戶
secrets file = /etc/rsync.password
# 是否啟用日志記錄同步的文件詳細(xì)信息
transfer logging = yes
# 設(shè)置為只讀,客戶端只能拉取數(shù)據(jù)
read only = false
# 是否允許客戶端查看該模塊(可選
list = yes
# 設(shè)置白名單,只允許設(shè)置的網(wǎng)段進行訪問
hosts allow = 10.0.0.0/24
# 設(shè)置黑名單,限制訪問
hosts deny = 0.0.0.0/32
# 在進行數(shù)據(jù)備份傳輸過程過程中,忽略一些I/O產(chǎn)生的傳輸錯誤
ignore errors
[webdata] # 模塊名,客戶端使用 ::webdata 來訪問這個模塊
path = /var/www/html # 實際要共享的本地目錄
comment = Web site sync # 模塊說明,可選
# 可以添加多個模塊
【溫馨提示】建議在寫配置文件時將注釋去掉,可能會影響某些參數(shù)生效
(4) 創(chuàng)建認(rèn)證文件
# 生產(chǎn)環(huán)境密碼復(fù)雜度設(shè)置高一點,我設(shè)置為123456
echo "rsyncuser:123456" > /etc/rsync.password
chmod 600 /etc/rsync.password
(5) 創(chuàng)建并啟用 systemd 服務(wù)文件
cat >> /etc/systemd/system/rsyncd.service << EOF
[Unit]
Description=Rsync Daemon
After=network.target
[Service]
ExecStart=/usr/bin/rsync --daemon --no-detach
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
[Install]
WantedBy=multi-user.target
EOF
啟用并啟動服務(wù):
systemctl daemon-reload
systemctl enable --now rsyncd
(6) 開啟防火墻端口
sudo firewall-cmd --add-port=873/tcp --permanent
sudo firewall-cmd --reload
# 或者直接關(guān)閉防火墻
3. 目標(biāo)服務(wù)器配置
(1) 安裝 rsync
dnf install rsync -y
(2) 創(chuàng)建并啟用 systemd 服務(wù)文件
cat >> /etc/systemd/system/rsyncd.service << EOF
[Unit]
Descriptinotallow=Rsync Daemon
After=network.target
[Service]
ExecStart=/usr/bin/rsync --daemon --no-detach
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
[Install]
WantedBy=multi-user.target
EOF
啟用并啟動服務(wù):
systemctl daemon-reload
systemctl enable --now rsyncd
(3) 創(chuàng)建密碼文件
echo "123456" > /etc/rsync.password
chmod 600 /etc/rsync.password
(4) 手動執(zhí)行同步測試
# 創(chuàng)建備份目錄
mkdir /backup/web -p
# 傳輸測試
rsync -avz --delete --password-file=/etc/rsync.password \
rsyncuser@10.0.0.110::webdata /backup/web
以上操作就可以實現(xiàn)文件同步功能了,下面將設(shè)置一個定時同步腳本,實現(xiàn)定時同步
4. 自動化定時同步
在backupserver上操作
(1) 創(chuàng)建同步腳本 /usr/local/bin/web_sync.sh
#!/bin/bash
rsync -az --password-file=/etc/rsync.password \
rsyncuser@10.0.0.110::webdata /backup/web/ \
>> /var/log/rsync_sync.log 2>&1
賦予權(quán)限:
chmod +x /usr/local/bin/web_sync.sh
(2) 添加定時任務(wù)
crontab -e
添加:
# 每小時同步一次
0 * * * * /bin/sh /usr/local/bin/web_sync.sh
這樣就可以實現(xiàn)每小時同步一次了,如果你想實時同步怎么做了?
別急,下篇文章就將介紹inotify+rsync實現(xiàn)文件實時同步。