1 基礎知識
1.1 Rsync簡介
可實作全量及增量、本地或遠端的資料同步備份的工具
官網:rsync(1) man page
相當于cp(本地複制)、scp(遠端複制)、rm(删除)指令的合體但比這三個指令更優秀
既能夠備份資料内容,也能夠備份屬性資訊
1.2 Rsync優缺點:
- 優點:
- 支援拷貝特殊檔案如連結檔案,裝置等
- 可以有排除指定檔案或目錄同步的功能,相當于打包指令tar的排除功能
- 可以做到保持元檔案或目錄的權限、時間、軟硬連結、屬主、組等所有屬性均不變
- 可時間增量同步、即隻同步發生變化的資料,是以資料的效率很高
- 可以使用rcp,rsh,ssh等方式來配合傳輸檔案達到加密傳輸
- 可以通過socket(守護程序方式)傳輸檔案和資料(服務端和用戶端)
- 支援匿名的、認證的(無需系統使用者)程序模式傳輸,可友善安全的進行資料備份及鏡像
- 缺點:
- 大量小檔案同步的時候,時間較長,有時候rsync程序可能會停止
- 同步10G這樣的大文時時,可能會中斷,未完整同步前,是隐藏檔案
- rsync本身不對資料加密,需配合ssh等實作加密
1.3 Rsync的工作方式
- 單個主機本地之間的資料傳輸(類似于cp)
- 借助rcp,ssh等通道來傳輸資料(類似于scp)
- 以守護程序(socket)的方式來傳輸資料(服務端和用戶端)
2 普通用法
2.1 基本參數
常用參數:avz或az
-v 詳細模式輸出,傳輸時的進度等資訊
-z 傳輸時進行壓縮以提高傳輸效率。--compress-level=NUM可按級别壓縮
-a 歸檔模式,表示以遞歸方式傳輸檔案,并保持檔案說有屬性,等于rtopgDI
-r 對子目錄以遞歸傳遞,即目錄下的所有目錄都同樣傳輸,注意是小寫r
-t 保持穩健時間資訊
-o 保持檔案屬主資訊
-p 保持檔案權限
-g 保持檔案屬組資訊
-P 顯示同步的過程及傳輸的進度等資訊
-D 保持裝置檔案資訊
-l 保留軟連結
-e 使用指定的shell程式替代傳輸用的rsh管道,如ssh
--exclude=PATTERN 指定排除不需要傳輸的檔案模式(和tar參數一樣)
--exclude-from=file 指定排除某個目錄中的某個檔案(和tar參數一樣)
--bwlimit=RATE 限制傳輸時的帶寬(避免全部占用完帶寬)
--partial 斷點續傳
--delete 讓目标目錄和源目錄資料保持一緻(不一緻會删除)
2.2 普通模式
- 本地模式文法:
rsync [OPTION...] 源路徑 目的路徑
- 遠端模式文法:
拉: rsync [OPTION...] [遠端使用者@]主機名或IP:源路徑 目标路徑
推: rsync [OPTION...] 源路徑 [遠端使用者@]主機名或IP:目标路徑
PS1:前面的是原路徑,後面的是目标路徑,推和拉的差別僅僅是遠端位址所在的位置
PS2:遠端使用者名可省略,省略代表用本機目前使用者去連接配接
- 應用舉例
- 備份本機hosts檔案到到tmp目錄
rsync -avz /etc/hosts /tmp
- 推送本機hosts檔案到另外一台主機tmp目錄
rsync -avz /etc/hosts [email protected]:/tmp/
- 拉取遠端主機hosts檔案本機tmp目錄
rsync -avz [email protected]:/etc/hosts /tmp/
- 配合ssh加密傳輸資料[-e]
rsync -avz -e 'ssh -p 22' /etc/hosts [email protected]:/tmp/
- 同步時排除某些檔案[--exclude]
rsync -avz --exclude=a.txt /backup/ [email protected]:/tmp/
rsync -avz --exclude-from=paichu.txt /backup/ [email protected]:/tmp/
--exclude參數使用相對路徑,可以排除單個和多個檔案
也可以用--exclude-from=paichu.txt,排除這個檔案中指定的檔案
- 無差異同步[--delete]
rsync -avz --delete /backup/ [email protected]:/tmp/
--delete會把伺服器上有而本地沒有的資料全部删除,非常危險,慎用慎用
- 限速[--bwlimit]
sync -avz --bwlimit=100 /backup/ [email protected]:/tmp/
3. 守護程序模式(重點)
3.1 基礎說明
搭建服務端啟動守護程序(873端口),然後在用戶端推或拉資料進行備份,比普通遠端模式好的地方在于,免互動的備份資料,配合定時任務食用更加.
文法
拉: rsync [OPTION...] [USER@]HOST::SRC DEST
推: rsync [OPTION...] SRC [USER@]HOST::DEST
PS:推拉的差別同普通模式,用的更多的是推模式,因為拉的模式用戶端數量很大時,會非常消耗服務端資源,而推模式請求由用戶端發起,不占用服務端資源
3.2 伺服器端配置過程:
- 檢查和安裝rsync
rpm -qa rsync
線上安裝
yum install -y rsync
離線安裝
rpm -ivh rsync-3.1.2-10.el7.x86_64.rpm
先檢查是否有安裝,如果有則安裝
2.添加rsync服務的使用者
useradd -s /sbin/nologin -M rsync
id rsync
- 生成rsyncd.conf配置檔案并寫入内容
cat >/etc/rsync/rsyncd.conf <<"EOF"
##rsyncd.conf start##
uid = rsync
gid = rsync
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
fake super = yes
list = false
hosts allow = 192.168.1.66 192.168.1.95
#hosts deny = 0.0.0.0/32
auth users = jyy
secrets file = /etc/rsync/rsync.password
[backup]
comment = "backup dir by noah"
path = /backup
read only = false
EOF
關于配置檔案各行的說明見文檔最後
4) 建立共享目錄并授權rsync服務管理
mkdir -p backup
chown -R rsync.rsync /backup/ #配置檔案用的是rsync使用者
- 建立認證檔案并修改權限
echo "jyy:123456" >/etc/rsync/rsync.password
/etc/rsync/rsync.password
chmod 600 /etc/rsync.password
ls -l /etc/rsync.password
此處的使用者和密碼,非系統中的使用者和密碼
6) 啟動rsync服務加入開機啟動
#啟動rsync服務,systemctl start rsyncd 啟動也可
/usr/bin/rsync --daemon
netstat -nltp|grep 873
#設定開機啟動服務
echo "/usr/bin/rsync --daemon" >>/etc/rc.local
tail -1 /etc/rc.local
3.3 用戶端配置
- 檢查和安裝rsync
rpm -qa rsync
線上安裝
yum install -y rsync
離線安裝
rpm -ivh rsync-3.1.2-10.el7.x86_64.rpm
- 生成連結伺服器需要的密碼檔案
echo "123456" >/etc/rsync/rsync.password
chmod 600 /etc/rsync.password
#隻需要密碼不需要使用者名
啟動rsync用戶端。
#啟動rsync服務,systemctl start rsyncd 啟動也可
/usr/bin/rsync --daemon
3) 同步資料(推送)
rsync -avz --password-file=/etc/rsync/rsync.password
/etc/hosts [email protected]::backup
提示:在用戶端執行指令。ip後面跟的backup是伺服器配置檔案中的子產品名,不是備份路徑
4 配置檔案說明
- 配置檔案整體說明
uid = rsync #使用者,遠端的客戶機使用rsync使用者來通路共享目錄
gid = rsync #使用者組
use chroot = no #安全相關
max connections = 200 #最大連接配接數
timeout = 300 #逾時時間
pid file = /var/run/rsyncd.pid #程序對應的程序号檔案
lock file = /var/run/rsync.lock #鎖檔案,防止檔案不一緻
log file = /var/log/rsyncd.log #日志檔案
ignore errors #忽略錯誤
list = false #不允許清單(ls)
hosts allow = 192.168.1.0/24 #白名單,允許的網段
#hosts deny = 0.0.0.0/32 #黑名單,拒絕的網段
auth users = jyy #連結的虛拟使用者,非系統使用者
secrets file = /etc/rsync/rsync..password #虛拟使用者的賬号密碼檔案
[backup] #子產品名稱,可以有多個,稱為多子產品
comment = "backup dir by noah" 子產品描述資訊
path = /backup #伺服器提供的共享目錄
read only = false #可寫
注意不要在配置檔案中某一行後面用#号寫注釋,識别不了的,注釋用的#号必須寫在行首
2) 黑白名單三種情況說明:
- 隻有白名單,白名單網段或主機資訊允許。其餘阻止
- 隻有黑名單,黑名單網段或主機資訊阻止,其餘允許
-
黑白名單都有,相當于隻有黑名單的方式
建議使用白名單方式
注:報錯1:rsync: chgrp "." (in backup) failed: Permission denied (13)
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
關閉SELinux:
1、臨時關閉(不用重新開機機器):
setenforce 0 ##設定SELinux 成為permissive模式
##setenforce 1 設定SELinux 成為enforcing模式
2、修改配置檔案需要重新開機機器:
修改/etc/selinux/config 檔案
将SELINUX=enforcing改為SELINUX=disabled
重新開機機器即可
本文檔參考rsync操作和部署文檔 · linux運維 · 看雲。