Rsync檔案同步備份
阿新 • • 發佈:2021-08-07
Rsync檔案同步備份
Rsync檔案同步備份
什麼是Rsync
rsync是一款開源、快速、多功能、可實現全量及增量的本地或遠端資料同步備份的優秀工具。rsync軟體適用於Unix/linux/Windows/macos等多種作業系統平臺。
- 全量備份:將所有資料都進行一次備份
- 增量備份:基於全量備份來說,只給增加的部分做備份
遠端檔案傳輸
# 語法
scp [選項] [原始檔] [使用者名稱@主機IP]:[位置]
# 選項
-r:遞迴複製
[root@backup ~]# scp -r /etc/passwd [email protected]:/tmp
# 注意:scp不支援增量,只能全量備份
服務埠
協議 | 埠 |
---|---|
ssh | 22 |
telnet | 23 |
ftp | 21 |
http | 80 |
https | 443 |
rdp | 3389 |
rsync | 873 |
RPCbind | 111 |
mysql | 3306 |
php | 9000 |
redis | 6379 |
Rsync簡介
- rsync官網:TP
- rsync埠:873
- rsync模式:C/S client/server
注意:利用rsync還可以實現刪除檔案和目錄的功能,這又相當於rm命令,一個rsync相當於scp、cp、rm,但是還優於他們的每一個命令。
Rsync的三種傳輸模式
rsync命令注意:
- 1.傳遞的目錄加/只同步該目錄下的所有檔案
- 2.傳遞的目錄不加/同步該目錄本身和目錄下的所有檔案
三種傳輸模式
- 本地方式:類似於cp命令
Local: rsync [OPTION...] SRC... [DEST]
## 拷貝/etc目錄到/tmp下
[root@backup ~]# rsync -av /etc /tmp/
## 拷貝/etc/目錄下的所有檔案到/tmp
[root@backup ~]# rsync -av /etc/ /tmp/
- 遠端方式:類似於scp命令
Access via remote shell: Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST] rsync 選項... 使用者名稱@主機IP:原始檔 目標 ## 將172.16.1.31伺服器上的/opt目錄及下面的所有檔案拉到本地的/etc/目錄下 rsync -avz [email protected]:/opt /etc/ Push: rsync [OPTION...] SRC... [USER@]HOST:DEST rsync 選項... 原始檔 使用者名稱@主機IP:目標 ## 將本地/etc目錄及下面的所有檔案遠端傳輸給172.16.1.31伺服器的/opt目錄下 [root@backup ~]# rsync -avz /etc [email protected]:/opt 缺點:必須使用系統使用者,用root使用者還得知道root的密碼
- 守護程序:c/s結構(伺服器和客戶端)
Access via rsync daemon:
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
## rsync的選項
-a:archive 歸檔拷貝,等於-tropgDl
-v:顯示拷貝的詳細資訊
-z:壓縮資料拷貝
-r: # 遞迴傳輸目錄及子目錄,即目錄下得所有目錄都同樣傳輸。
-t: # 保持檔案時間資訊
-o: # 保持檔案屬主資訊
-p: # 保持檔案許可權
-g: # 保持檔案屬組資訊
-l: # 保留軟連線
-P: # 顯示同步的過程及傳輸時的進度等資訊
-D: # 保持裝置檔案資訊
-L: # 保留軟連線指向的目標檔案
-e: # 使用的通道協議,指定替代rsh的shell程式
--exclude=PATTERN # 指定排除不需要傳輸的檔案模式
--exclude-from=file # 檔名所在的目錄檔案
--bwlimit=100 # 限速傳輸
--partial # 斷點續傳
--delete # 讓目標目錄和源目錄資料保持一致
--password-file=xxx # 使用密碼檔案
rsync服務實戰
環境準備
主機角色 | 外網IP(WAN) | 內網IP(LAN) | 主機名稱 |
---|---|---|---|
Rsync服務端 | 10.0.0.41 | 172.16.1.41 | backup |
Rsync客戶端 | 10.0.0.31 | 172.16.1.31 | nfs |
安裝rsync
[root@backup ~]# yum -y install rsync
配置rsync
查詢rsync的配置檔案路徑
[root@backup ~]# rpm -qc rsync
[root@backup ~]# rpm -qc rsync
/etc/rsyncd.conf
/etc/sysconfig/rsyncd
1.修改配置
[root@backup ~]# vim /etc/rsyncd.conf
uid = www
gid = www
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = dsr_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[nfs_backup]
comment = welcome to oldboyedu backup!
path = /opt/backup1/nfs_data
#####################################
[web_backup]
comment = welcome to oldboyedu backup!
path = /opt/backup2/web_bak
[root@backup ~]# cat /etc/rsyncd.conf
# 服務啟動的使用者
uid = www
# 服務啟動的使用者組
gid = www
# 服務監聽的埠
port = 873
# 假的超級使用者
fake super = yes
# 禁錮指定的目錄,不允許使用者跳出到其他目錄
use chroot = no
# 最大連線數
max connections = 200
# 超時時間
timeout = 600
# 忽略錯誤
ignore errors
# 只讀為false,可讀可寫
read only = false
# 不允許其他使用者查詢模組名
list = false
# 虛擬使用者,rsync同步需要使用的使用者
auth users = dsr_backup
# 存放虛擬使用者密碼的檔案
secrets file = /etc/rsync.passwd
# rsync服務的日誌存放路徑
log file = /var/log/rsyncd.log
#####################################
# 模組名
[nfs_backup]
# 同步的描述資訊
comment = welcome to oldboyedu backup!
# 同步的路徑
path = /opt/backup1/nfs_data
#####################################
# 模組名
[web_backup]
# 同步的描述資訊
comment = welcome to oldboyedu backup!
# 同步的路徑
path = /opt/backup2/web_bak
2.建立服務啟動的使用者
[root@backup ~]# groupadd www -g 666[root@backup ~]# useradd www -u 666 -g 666 -s /sbin/nologin -M
3.建立虛擬使用者的密碼檔案
密碼檔案的格式使用者名稱:密碼[root@backup ~]# echo 'dsr_backup:123' > /etc/rsync.passwd[root@backup ~]# cat /etc/rsync.passwd dsr_backup:123
4.rsync要求密碼檔案的許可權必須是600
[root@backup ~]# chmod 600 /etc/rsync.passwd [root@backup ~]# ll /etc/rsync.passwd -rw-------. 1 root root 17 Jul 6 20:06 /etc/rsync.passwd
5.建立備份目錄
[root@backup ~]# mkdir -p /opt/backup1/nfs_data[root@backup ~]# mkdir -p /opt/backup2/web_bak
6.修改同步路徑的屬主和屬組
[root@backup ~]# chown www.www /opt/backup1/nfs_data[root@backup ~]# chown www.www /opt/backup1[root@backup ~]# chown www.www /opt/backup2/web_bak/[root@backup ~]# chown www.www /opt/backup2
7.啟動rsync服務
[root@backup ~]# systemctl start rsyncd
8.加入開機自啟
[root@backup ~]# systemctl enable rsyncd
9.驗證服務啟動(程序,埠)
[root@backup ~]# ps -ef|grep [r]syncroot 7405 1 0 Jul06 ? 00:00:00 /usr/bin/rsync --daemon --no-detach[root@backup ~]# netstat -lntup|grep 873tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 7405/rsync tcp6 0 0 :::873 :::* LISTEN 7405/rsync
客戶端操作
需要互動
[root@nfs ~]# rsync -avz /etc [email protected]::backup
報錯1
[root@nfs ~]# rsync -avz /etc [email protected]::bakPassword:@ERROR: auth failed on module bakrsync error: error starting client-server protocol (code 5) at main.c(1649)[sender=3.1.2]排查思路:1.密碼檔案的許可權不是6002.密碼檔案裡的密碼和手動輸入的密碼不一致3.密碼檔名字和配置檔案中的名字不一致
報錯2
[root@nfs ~]# rsync -avz /backup/123.txt [email protected]::bakPassword:sending incremental file list123.txtrsync: mkstemp ".123.txt.P2Kfee" (in bak) failed: Permission denied (13)sent 89 bytes received 120 bytes 139.33 bytes/sectotal size is 0 speedup is 0.00rsync error: some files/attrs were not transferred (see previous errors) (code 23) atmain.c(1179) [sender=3.1.2]排查思路:1.沒有關閉selinux2.備份路徑的許可權不是配置檔案中指定的uid許可權
報錯3
[root@nfs ~]# rsync -avz /var [email protected]::bak --passwordfile=/tmp/rsync.passERROR: password file must not be other-accessiblersync error: syntax or usage error (code 1) at authenticate.c(196) [sender=3.1.2]排查思路:客戶端的密碼檔案許可權必須也是600
免互動操作
# 1.建立密碼檔案(客戶端的密碼檔案只寫密碼不寫使用者)[root@nfs ~]# echo '123' > /tmp/rsync.pass[root@nfs ~]# chmod 600 /tmp/rsync.pass[root@nfs ~]# rsync -avz /var [email protected]::backup --password-file=/tmp/rsync.pass# 2.使用rsync的環境變數[root@nfs ~]# export RSYNC_PASSWORD=123[root@nfs ~]# rsync -avz /var [email protected]::backup
無差異同步
## 為了保證資料的一致性[root@nfs data]# rsync -avz --delete /opt/data [email protected]::backup
企業中rsync實戰案例
環境搭建
角色 | 外網IP(WAN) | 內網IP(LAN) | 主機名 |
---|---|---|---|
rsync客戶端 | eth0:10.0.0.7 | eth1:172.16.1.7 | web01 |
rsync客戶端 | eth0:10.0.0.31 | eth1:172.16.1.31 | nfs |
rsync服務端 | eth0:10.0.0.41 | eth1:172.16.1.41 | backup |
客戶端需求
1.客戶端提前準備存放的備份的目錄,目錄規則如下:/backup/nfs_172.16.1.31_2018-09-02
[root@nfs ~]# mkdir -p /backup/$(hostname)_$(hostname -I|awk '{print $2}')_$(date +%F)[root@web01 ~]# mkdir -p /backup/$(hostname)_$(hostname -I|awk '{print $2}')_$(date +%F)
2.客戶端在本地打包備份(系統配置檔案、應用配置等)拷貝至/backup/nfs_172.16.1.31_2018-09-02
tar zcf /backup/$(hostname)_$(hostname -I|awk '{print $2}')_$(date +%F)/passwd.tgz /etc/passwd
3.客戶端最後將備份的資料進行推送至備份伺服器
echo '123' > /tmp/rsync.passwdchmod 600 /tmp/rsync.passwdrsync -az /backup/$(hostname)_$(hostname -I|awk '{print $2}')_$(date +%F) [email protected]::backup --password-file=/tmp/rsync.passwd
4.客戶端每天凌晨1點定時執行該指令碼
crontab -e00 01 * * * /bin/sh /root/backup.sh &> /dev/null
5.客戶端伺服器本地保留最近7天的資料, 避免浪費磁碟空間
find /backup !-mtime -7|xargs rm -f
服務端需求
1.服務端部署rsync,用於接收客戶端推送過來的備份資料
部署rsync守護程序模式
2.服務端需要每天校驗客戶端推送過來的資料是否完整
1.在客戶端打包完成之後,先要生成一個md5值儲存到檔案裡2.在服務端使用md5sum -c來校驗資料的完整性
3.服務端需要每天校驗的結果通知給管理員
# 1.配置郵件# 2.將校驗的結果通過郵件傳送到管理員的郵箱md5sum -c md5.check |mail md5校驗資料 [email protected]
4.服務端僅保留6個月的備份資料,其餘的全部刪除
find /backup ! -mtime -180|xargs rm -f
客戶端指令碼
#!/bin/bashbak_dir=backupHOSTNAME=$(hostname)IP=$(hostname -I|awk '{print $2}')DATE=$(date +%F)tar_dir=$bak_dir/${HOSTNAME}_${IP}_${DATE}mkdir -p /$tar_dircd /etctar zcf /$tar_dir/passwd.tgz passwdecho '123' > /tmp/rsync.passwdchmod 600 /tmp/rsync.passwdmd5sum /$tar_dir/passwd.tgz > /$tar_dir/md5.checkrsync -az /$tar_dir [email protected]::backup --password-file=/tmp/rsync.passwdfind /$bak_dir ! -mtime -7|xargs rm -f[root@nfs ~]# crontab -e*/6 * * * * /bin/ntpdate time1.aliyun.com &>/dev/null00 01 * * * /bin/sh /root/backup.sh &> /dev/null
服務端腳
#!/bin/bashbak_dir=backupHOSTNAME=$(hostname)IP=$(hostname -I|awk '{print $2}')DATE=$(date +%F)tar_dir=$bak_dir/${HOSTNAME}_${IP}_${DATE}md5sum -c /$bak_dir/*/*.check|mail -s "備份資料校驗結果${DATE}"[email protected] &> /dev/nullfind /$bak_dir ! -mtime -180|xargs rm -f[root@backup ~]# crontab -e*/5 * * * * /bin/ntpdate time1.aliyun.com &>/dev/null00 01 * * * /bin/sh /root/backup.sh &> /dev/null
如何配置rsync服務多備份目錄
[root@backup ~]# vim /etc/rsyncd.conf#-------------------------------# 模組名[bak]# 同步的描述資訊comment = xxx# 同步的路徑path = /backup#------------------------------[bak2]comment = aaapath = /backup2## 根據配置檔案創建出對應的目錄[root@backup ~]# mkdir /backup2[root@backup ~]# chown rsync.rsync /backup2/## 只要改完配置檔案一定要重啟服務[root@backup ~]# systemctl restart rsyncd## 客戶端同步[root@nfs ~]# rsync -avz /etc [email protected]::bak2
rsync擴充套件結合inotify使用
安裝inotify
yum -y install inotify-tools
inotify命令
/usr/bin/inotifywait -mrq --format '%Xe %w %f' -ecreate,modify,delete,attrib,close_write /backup