Rsync是一款開源的、快速的、多功能的、可實現全量及增量的本地或遠程數據同步備份的優秀工具
rsync軟件使用方法:
rsync命令 1v4mysql
[root@nfs01 backup]# cp /etc/hosts /tmp [root@nfs01 backup]# ll /tmp/hosts -rw-r--r-- 1 root root 371 May 6 16:11 /tmp/hosts [root@nfs01 backup]# rsync /etc/hosts /tmp/host_rsync [root@nfs01 backup]# ll /tmp/host_rsync -rw-r--r-- 1 root root 371 May 6 16:12 /tmp/host_rsync
scp -rp /etc/hosts root@172.16.1.41:/backup root@172.16.1.41's password: hosts 100% 371 42.8KB/s 00:00
-r --- 遞歸複製傳輸數據
-p --- 保持文件屬性信息不變linux
[root@nfs01 ~]# rsync -rp /etc/hosts 172.16.1.41:/backup/hosts_rsync root@172.16.1.41's password:
rsync遠程備份目錄:nginx
[root@nfs01 ~]# rsync -rp /oldboy 172.16.1.41:/backup --- 備份的目錄後面沒有 / root@172.16.1.41's password: [root@backup ~]# ll /backup total 0 drwxr-xr-x 2 root root 48 May 6 16:22 oldboy [root@backup ~]# tree /backup/ /backup/ └── oldboy ├── 01.txt ├── 02.txt └── 03.txt 1 directory, 3 files [root@nfs01 ~]# rsync -rp /oldboy/ 172.16.1.41:/backup --- 備份的目錄後面有 / root@172.16.1.41's password: [root@backup ~]# ll /backup total 0 -rw-r--r-- 1 root root 0 May 6 16:24 01.txt -rw-r--r-- 1 root root 0 May 6 16:24 02.txt -rw-r--r-- 1 root root 0 May 6 16:24 03.txt
總結: 在使用rsync備份目錄時:
備份目錄後面有 / -- /oldboy/ : 只將目錄下面的內容進行備份傳輸
備份目錄後面沒有/ -- /oldboy : 會將目錄自己以及下面的內容進行傳輸備份web
rm命令 [root@nfs01 ~]# rsync -rp --delete /null/ 172.16.1.41:/backup root@172.16.1.41's password: --delete 實現無差別同步數據
有一個存儲數據信息的目錄, 目錄中數據存儲了50G數據, 如何將目錄中的數據快速刪除 rm /目錄/* -rf
替代查看文件命令 ls 面試
[root@backup ~]# ls /etc/hosts /etc/hosts [root@backup ~]# rsync /etc/hosts -rw-r--r-- 371 2019/05/06 11:55:22 hosts
redis
sql
全量備份:shell
vim
安全
rsync命令語法格式
SYNOPSIS
Local: rsync [OPTION...] SRC... [DEST]
本地備份數據:
src: 要備份的數據信息
dest: 備份到什麼路徑中
遠程備份數據:
Access via remote shell:
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
[USER@] --- 以什麼用戶身份拉取數據(默認以當前用戶)
hosts --- 指定遠程主機IP地址或者主機名稱
SRC --- 要拉取的數據信息
dest --- 保存到本地的路徑信息
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
SRC --- 本地要進行遠程傳輸備份的數據
[USER@] --- 以什麼用戶身份推送數據(默認以當前用戶)
hosts --- 指定遠程主機IP地址或者主機名稱
dest --- 保存到遠程的路徑信息
守護進程方式備份數據 備份服務
01. 能夠進行一些配置管理
02. 能夠進行安全策略管理
03. 能夠實現自動傳輸備份數據
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
大量服務器備份場景
#pull拉取數據命令 Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST] #pull拉取數據示例 [root@backup ~]# rsync -avz root@172.16.1.41:/etc/hostname ./ #拉取遠程文件 [root@backup ~]# rsync -avz root@172.16.1.41:/root/ /backup/ #拉取遠程目錄下的全部文件 [root@backup ~]# rsync -avz root@172.16.1.41:/root /backup/ #拉取遠程目錄以及目錄下的全部文件 Pull #拉取, 下載 rsync #備份命令 [options] #選項 [USER@] #目標主機的系統用戶 HOST #目主機IP地址或域名 SRC... #目標主機源文件 [DEST] #下載至本地哪一個位置 #push推送數據命令 Push: rsync [OPTION...] SRC... [USER@]HOST:DEST #push推送數據示例 rsync -avz /backup/2018-10-01 root@172.16.1.41:/tmp/ Push #推送, 上傳 rsync #備份命令 [options] #選項 SRC... #本地源文件 [USER@] #目標主機的系統用戶 HOST #目主機IP地址或域名 [DEST] #目標對應位置
#pull拉取數據命令 Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST] #1.拉取rsync備份服務的"backup模塊"至本地/mnt目錄 [root@nfs01 ~]# rsync -avz rsync_backup@172.16.1.41::backup/ /mnt/ --password-file=/etc/rsync.password rsync #命令 [OPTION...] #選項 [USER@] #遠程主機用戶(虛擬用戶) HOST:: #遠程主機地址 SRC... #遠程主機模塊(不是目錄) [DEST] #將遠程主機數據備份至本地什麼位置 #push推送數據命令 Push: rsync [OPTION...] SRC... [USER@]HOST::DEST #2.將本地/mnt目錄推送至rsync備份服務器的"backup模塊" [root@nfs01 ~]# rsync -avz /mnt/ rsync_backup@172.16.1.41::backup/ --password-file=/etc/rsync.password rsync #命令 [OPTION...] #選項 SRC... #遠程主機模塊(不是目錄) [USER@] #遠程主機用戶(虛擬用戶) HOST:: #遠程主機地址 [DEST] #將遠程主機模塊備份至本地什麼位置
客戶端---服務端
rsync守護進程服務端配置:
第一個歷程: 下載安裝軟件
rpm -qa|grep rsync yum install -y rsync
第二個歷程: 編寫配置文件
man rsyncd.conf vim /etc/rsyncd.conf created by HQ at 2017 rsyncd.conf start uid = rsync --- 指定管理備份目錄的用戶
gid = rsync --- 指定管理備份目錄的用戶組
port = 873 --- 定義rsync備份服務的網絡端口號
fake super = yes --- 將rsync虛擬用戶假裝成爲一個超級管理員用戶
use chroot = no --- 和安全相關的配置
max connections = 200 --- 最大鏈接數 同時只能有200個客戶端鏈接到備份服務器
timeout = 300 --- 超時時間(單位秒)
pid file = /var/run/rsyncd.pid --- 記錄進程號碼信息 1.讓程序快速中止進程 2. 判斷一個服務是否正在運行
lock file = /var/run/rsync.lock --- 鎖文件
log file = /var/log/rsyncd.log --- rsync服務的日誌文件 用於排錯分析問題
ignore errors --- 忽略傳輸中的簡單錯誤
read only = false --- 指定備份目錄是可讀可寫
list = false --- 使客戶端能夠查看服務端的模塊信息
hosts allow = 172.16.1.0/24 --- 容許傳輸備份數據的主機(白名單)
hosts deny = 0.0.0.0/32 --- 禁止傳輸備份數據的主機(黑名單)
auth users = rsync_backup --- 指定認證用戶
secrets file = /etc/rsync.password --- 指定認證用戶密碼文件 用戶名稱:密碼信息
[backup] --- 模塊信息
comment = "backup dir by oldboy"
path = /backup --- 模塊中配置參數 指定備份目錄
第三個歷程: 建立rsync服務的虛擬用戶
[root@nfs01 ~]# rsync -avz /backup/ rsync_backup@172.16.1.41::backup/
useradd rsync -M -s /sbin/nologin
第四個歷程: 建立備份服務認證密碼文件
echo "rsync_backup:oldboy123" >/etc/rsync.password chmod 600 /etc/rsync.password
第五個歷程: 建立備份目錄並修改屬主屬組信息
mkdir /backup chown rsync.rsync /backup/
第六個歷程: 啓動備份服務
systemctl start rsyncd systemctl enable rsyncd systemctl status rsyncd
須要熟悉rsync守護進程名稱語法:
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
src: 要推送備份數據信息
[USER@]: 指定認證用戶信息
HOST: 指定遠程主機的IP地址或者主機名稱
::DEST: 備份服務器的模塊信息
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
rsync守護進程客戶端配置:
第一個歷程: 建立一個祕密文件
echo "oldboy123" >/etc/rsync.password chmod 600 /etc/rsync.password
第二個歷程: 進行免交互傳輸數據測試
rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file
=/etc/rsync.password
rsync命令參數詳細說明
-v, --verbose 顯示詳細的傳輸信息 -a, --archive 命令的歸檔參數 包含: rtopgDl -r, --recursive 遞歸參數 -t, --times 保持文件屬性信息時間信息不變(修改時間) -o, --owner 保持文件屬主信息不變 -g, --group 保持文件屬組信息不變 PS: 如何讓-o和-g參數生效,須要將配置文件uid和gid改成root,須要將 fake super參數進行註釋 -p, --perms 保持文件權限信息不變 -D, 保持設備文件信息不變 -l, --links 保持連接文件屬性不變 -L, 保持連接文件數據信息不變 -P, 顯示數據傳輸的進度信息 --exclude=PATTERN 排除指定數據不被傳輸 --exclude-from=file 排除指定數據不被傳輸(批量排除) --bwlimit=RATE 顯示傳輸的速率 100Mb/8=12.5MB 企業案例: 馬路(帶寬-半) 人人網地方 --delete 無差別同步參數(慎用) 我有的你也有,我沒有的你也不能有
a. 守護進程多模塊功能配置
sa sa_data.txt dev dev_data.txt dba dba_data.txt [backup] comment = "backup dir by oldboy" path = /backup [dba] comment = "backup dir by oldboy" path = /dba [dev] comment = "backup dir by oldboy" path = /devdata
b. 守護進程的排除功能實踐
準備環境:
[root@nfs01 /]# mkdir -p /oldboy [root@nfs01 /]# mkdir -p /oldboy/{a..c} [root@nfs01 /]# touch /oldboy/{a..c}/{1..3}.txt [root@nfs01 /]# tree /oldboy /oldboy ├── 01.txt ├── 02.txt ├── a │?? ├── 1.txt │?? ├── 2.txt │?? └── 3.txt ├── b │?? ├── 1.txt │?? ├── 2.txt │?? └── 3.txt └── c ├── 1.txt ├── 2.txt └── 3.txt
實例01: 將/oldboy目錄下面 a目錄數據所有備份 b目錄不要備份1.txt文件 c整個目錄不要作備份
--exclude=PATTERN
絕對路徑方式:
[root@nfs01 /]# rsync -avz /oldboy --exclude=/oldboy/b/1.txt --exclude=/oldboy/c/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password sending incremental file list oldboy/ oldboy/01.txt oldboy/02.txt oldboy/a/ oldboy/a/1.txt oldboy/a/2.txt oldboy/a/3.txt oldboy/b/ oldboy/b/2.txt oldboy/b/3.txt
相對路徑方式:
[root@nfs01 /]# rsync -avz /oldboy --exclude=b/1.txt --exclude=c/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password sending incremental file list oldboy/ oldboy/01.txt oldboy/02.txt oldboy/a/ oldboy/a/1.txt oldboy/a/2.txt oldboy/a/3.txt oldboy/b/ oldboy/b/2.txt oldboy/b/3.txt sent 502 bytes received 177 bytes 1,358.00 bytes/sec total size is 0 speedup is 0.00
實例02: 將/oldboy目錄下面 a目錄數據所有備份 b目錄不要備份1.txt文件 c整個目錄1.txt 3.txt文件不要備份
--exclude-from=file --- 批量排除
第一個歷程: 編輯好一個排除文件
[root@nfs01 /]# cat /oldboy/exclude.txt b/1.txt c/1.txt c/3.txt exclude.txt
第二個歷程: 實現批量排除功能
[root@nfs01 /]# rsync -avz /oldboy --exclude-from=/oldboy/exclude.txt rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password sending incremental file list oldboy/ oldboy/01.txt oldboy/02.txt oldboy/a/ oldboy/a/1.txt oldboy/a/2.txt oldboy/a/3.txt oldboy/b/ oldboy/b/2.txt oldboy/b/3.txt oldboy/c/ oldboy/c/2.txt
c. 守護進程來建立備份目錄
[root@nfs01 /]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup/10.0.0.31/ --password-file=/etc/rsync.password sending incremental file list created directory 10.0.0.31 hosts sent 226 bytes received 75 bytes 602.00 bytes/sec total size is 371 speedup is 1.23
PS: 客戶端沒法在服務端建立多級目錄
d. 守護進程的訪問控制配置
守護進程白名單和黑名單功能
PS: 建議只使用一種名單
e. 守護進程的列表功能配置
[root@nfs01 /]# rsync rsync_backup@172.16.1.41:: backup "backup dir by oldboy" dba "backup dir by oldboy" dev "backup dir by oldboy"
使用3臺服務器主機名分別爲web0一、backup 、nfs
主機信息見下表:
角色 | 外網IP(WAN) | 內網IP(LAN) | 主機名 | |
---|---|---|---|---|
WEB | eth0:10.0.0.7 | eth1:172.16.1.7 | web01 | |
NFS | eth0:10.0.0.31 | eth1:172.16.1.31 | nfs01 | |
Rsync | eth0:10.0.0.41 | eth1:172.16.1.41 | backup |
客戶端需求
1.客戶端提早準備存放的備份的目錄,目錄規則以下:/backup/nfs_172.16.1.31_2018-09-02
2.客戶端在本地打包備份(系統配置文件、應用配置等)拷貝至/backup/nfs_172.16.1.31_2018-09-02
3.客戶端最後將備份的數據進行推送至備份服務器
4.客戶端天天凌晨1點定時執行該腳本
5.客戶端服務器本地保留最近7天的數據, 避免浪費磁盤空間
服務端需求
1.服務端部署rsync,用於接收客戶端推送過來的備份數據
2.服務端須要天天校驗客戶端推送過來的數據是否完整
3.服務端須要天天校驗的結果通知給管理員
4.服務端僅保留6個月的備份數據,其他的所有刪除
注意:全部服務器的備份目錄必須都爲/backup
建議備份的數據內容以下:
# 1.開機自啓動配置文件 設備掛載配置文件 本地內網配置文件 (系統配置文件)
/etc/rc.local /etc/fstab /etc/hosts
# 2.cron定時任務 firewalld防火牆 腳本目錄 (重要目錄)
/var/spool/cron/ /etc/firewalld /server/scripts
# 3.系統日誌文件
/var/log/ /系統安全日誌、sudo日誌、內核日誌、rsyslog日誌
# 4.應用程序服務配置文件 nginx、PHP、mysql、redis.....
客戶端備份實現思路,天天凌晨01點定時執行一次腳本(打包->標記->推送->保留最近7天的文件)
[root@nfs scripts]# vim /server/scripts/client_rsync_backup.sh #!/usr/bin/bash # 1.定義變量 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin Host=$(hostname) Addr=$(ifconfig eth1|awk 'NR==2{print $2}') Date=$(date +%F) Dest=${Host}_${Addr}_${Date} Path=/backup # 2.建立備份目錄 [ -d $Path/$Dest ] || mkdir -p $Path/$Dest # 3.備份對應的文件 cd / && \ [ -f $Path/$Dest/system.tar.gz ] || tar czf $Path/$Dest/system.tar.gz etc/fstab etc/rsyncd.conf && \ [ -f $Path/$Dest/log.tar.gz ] || tar czf $Path/$Dest/log.tar.gz var/log/messages var/log/secure && \ # 4.攜帶md5驗證信息 [ -f $Path/$Dest/flag ] || md5sum $Path/$Dest/*.tar.gz >$Path/$Dest/flag_$Date # 5.推送本地數據至備份服務器 export RSYNC_PASSWORD=123456 rsync -avz $Path/ rsync_backup@172.16.1.41::backup # 6.本地保留最近7天的數據 find $Path/ -type d -mtime +7 | xargs rm -rf
2.客戶端編寫定時任務,讓備份天天凌晨1點執行 00 01 * * * /bin/bash /server/scripts/client_rsync_backup.sh &>/dev/null 3.服務端校驗客戶端推送數據的完整性, (校驗->存儲校驗結果->將保存的結果經過郵件發送給管理員->保留最近180天的數據) # 1.服務端配置郵件功能 [root@backup /]# yum install mailx -y [root@backup /]# vim /etc/mail.rc # 文件最後添加 set from=2543843664@qq.com # 郵件來源(發件人) set smtp=smtps://smtp.qq.com:465 # smtp服務器地址 set smtp-auth-user=2543843664@qq.com # 發件人郵箱賬號 set smtp-auth-password=xcvzpqgrjtmuecaa # smtp客戶端受權密碼,登陸郵箱設置,並不是郵箱密碼! set smtp-auth=login # 須要登陸認證 set ssl-verify=ignore # 忽略證書警告 set nss-config-dir=/etc/pki/nssdb/ # 證書所在目錄 # 2.服務端校驗、以及郵件通知腳本 [root@backup ~]# mkdir /server/scripts -p [root@backup ~]# vim /server/scripts/check_backup.sh #!/usr/bin/bash # 1.定義全局的變量 export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin # 2.定義局部變量 Path=/backup Date=$(date +%F) # 3.查看flag文件,並對該文件進行校驗, 而後將校驗的結果保存至result_時間 find $Path/ -type f -name "flag_$Date"|xargs md5sum -c >$Path/result_${Date} # 4.將校驗的結果發送郵件給管理員 mailx -s "Rsync Backup $Date" 2543843664@qq.com <$Path/result_${Date} # 5.刪除超過7天的校驗結果文件, 刪除超過180天的備份數據文件 find $Path/ -type f -name "result*" -mtime +7|xargs rm -f find $Path/ -type d -mtime +180|xargs rm -rf 4.服務端編寫定時任務腳本 00 05 * * * /bin/bash /server/scripts/check_backup.sh &>/dev/null 擴展多臺客戶端 5.對其餘客戶端重複1. 2. 步便可
rsync服務部署安裝過程 linux系統安裝部署服務流程: a 下載安裝軟件 yum b 編寫配置文件 c 搭建服務環境 備份的目錄/目錄權限 d 啓動服務程序 開機自動啓動 e 測試服務功能