什麼是Rsync?shell
rsync能夠實現增量備份,配合inotify能夠實現時事的數據備份vim
Rsync的三種工做模式安全
1)本地備份,至關於 cp 命令bash
將 /etc/hosts 文件拷貝到 /tmp/ 目錄下網絡
rsync -avz /etc/hosts /tmp/ssh
刪除一個目錄ide
先新建一個空目錄,而後使用 rsync 命令同步測試
mkdir /zhaoui
添加 --delete參數,目錄 zhao 爲空spa
rsync --delete /zhao/ /tmp/
命令解釋:之前面的目錄爲準,前面目錄有啥後面目錄有啥,前面目錄沒有的,後面目錄也不能有
2)經過網絡遠程 shell
push(推)
將本地的 /tmp/ 目錄中的內容推到 192.168.133.130 的 /opt/ 目錄下
rsync -avzP -e 'ssh -p 22' /tmp/ root@192.168.133.130:/opt/
pull(拉)
將 192.168.133.130 的 /tmp/ 目錄下的文件拉到本地的 /opt/ 目錄下
若是下面的命令 /tmp/ 寫爲 /tmp 則拉去的是 tmp 的整個目錄
rsync -avzP -e 'ssh -p 22' root@192.168.133.130:/tmp/ /opt/
3)daemon模式
daemon是咱們平時工做中最長用的一種模式,本篇文章也主要是介紹的daemon模式
rsync 客戶端的經常使用參數
-a 歸檔模式,表示以遞歸方式傳輸文件,並保持全部文件屬性
-v 詳細模式輸出,傳輸時的進度等信息
-z 傳輸時進行壓縮以提升傳輸效率
-r 對子目錄以遞歸模式,即目錄下的全部目錄都一樣傳輸,注意是小寫r
-t 保持文件時間信息
-o 保持文件屬主信息
-p 保持文件權限
-g 保持文件屬組信息
-P 顯示同步的過程及傳輸時的進度等信息
-D 保持設備文件信息
-l 保留軟鏈接
配置 daemon 模式
在配置 daemon 模式前須要準備兩臺虛擬機,個人虛擬機是CentOS6.7 64位
兩臺的系統都同樣,詳細截圖以下
uname -r
cat /etc/redhat-release
正常狀況下系統默認就已經安裝 rsync,因此咱們須要先檢查一下兩臺機器是否已經安裝
這裏我只截圖了一張,可是兩臺必須都有 rsync 哈
rpm -qa | grep rsync
rsync daemon 端操做以下
rsync 默認沒有配置文件,那麼咱們就手動在 daemon 端建立配置文件
touch /etc/rsyncd.conf
編輯 rsyncd.conf 文件
vim /etc/rsyncd.conf
文件內容以下
#Rsync server
#yuci
uid = rsync
gid = rsync
use chroot = no
max connections = 2000
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 192.168.0.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
###################################
[backup]
comment = www by yuci
path = /backup
添加 rsync 用戶
useradd -s /sbin/nologin -M rsync
啓動 rsync
rsync --daemon
檢查 873 端口是否開啓
netstat -tlunp | grep 873
建立共享目錄
mkdir /backup
並將 /backup 目錄的屬主改成 rsync 用戶
chown -R rsync /backup/
由於後面還須要用到 inotify 配合腳本作實時同步,因此須要建立一個密碼文件
用戶就是以前 rsyncd.conf 文件中的 auth rsync 用戶
echo "rsync_backup::123456" > /etc/rsync.password
安全考慮還須要更改該文件的權限
chmod 600 /etc/rsync.password
將該服務加到開機自動中
echo "rsync --daemon" >> /etc/rc.local
tail -1 /etc/rc.local
到此爲止,rsync 的 daemon 端操做完成
rsync 客戶端的操做
仍是在 client 端查看系統中安裝了 rsync 軟件
rpm -qa | grep rsync
建立一個密碼文件,內容只須要有密碼便可
由於咱們下面鏈接時,必需要指定鏈接的用戶,並修改這個文件的權限
echo "123456" > /etc/rsync.password
chmod 600 /etc/rsync.password
如今開始測試服務是否搭建成功,在測試前介紹一下環境
服務端:daemon 地址 192.168.133.131
客戶端:client 地址 192.168.133.130
如今我在 client 端測試推送功能,在 133.130 機器的 /tmp/ 目錄裏我建立了從1到5的5個目錄,嘗試推送到 133.131 的 /backup 目錄中
rsync -avz /tmp/ rsync_backup@192.168.133.131::backup --password-file=/etc/rsync.password
在 133.131 上查看 /backup 目錄
推送成功。
繼續返回到 133.130 上測試拉取服務
我將 133.130 的 /tmp 目錄清空,嘗試拉取 133.131 上的 /backup 目錄中的文件
rsync -avz rsync_backup@192.168.133.131::backup /tmp/ --password-file=/etc/rsync.password
拉取成功。
能夠經過如下腳本配合定時任務完成簡單的數據備份
腳本內容以下
#!/bin/bash
path=/backup
dir="`ifconfig eth0 | awk -F '[ :]+' 'NR==2 {print $4}'`_$(date +%F)"
mkdir $path/$dir -p && \
/bin/cp /var/spool/cron/root $path/$dir/cron_root_$(date +%F) && \
/bin/cp /etc/rc.local $path/$dir/rc.local_$(date +%F) && \
rsync -az $path/ rsync_backup@192.168.133.131::backup/ --password-file=/etc/rsync.password
定時任務,每一小時同步一次增量備份(定時任務作好寫絕對路徑)
00 01 * * * /bin/sh /root/bak.sh > /dev/null 2>&1
每一小時同步一次,在某些狀況下彷佛達不到預期的標準,那麼就須要配合 inotify 進行實時同步了
安裝 inotify 軟件
安裝 inotify 軟件的前提 rsync 服務安裝成功,能夠在客戶端推送拉取數據
另外:inotify 是在客戶端配置安裝的軟件,別裝錯了
檢查系統的內核版本,必需要在 2.6.16 以上才能夠
uname -r
查看是否有如下三個文件,有這三個文件才表示系統支持 inotify 服務
ls -l /proc/sys/fs/inotify/
編譯安裝 inotify
tar zxf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure --prefix=/usr/local/inotify-tools-3.14
make && make install
作一個軟鏈接,取出版本號
ln -s /usr/local/inotify-tools-3.14/ /usr/local/inotify
inotify 安裝目錄下的各目錄介紹
bin #inotify執行命令(二進制)
include #inotify程序所需用的頭文件
lib #動態連接的庫文件
share #幫助文檔
手動測試監控,下面的實驗是在本機上操做
由於測試監控的是 133.130 上的 /backup 目錄,因此須要建立一個 backup 目錄,監控 create 命令
mkdir /backup
/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d%m%y %H:%M' --format '%T %w%f' -e create /backup
(-m 持續監聽狀態)
在新開一個窗口,在 /backup 目錄下建立文件和目錄,在以前的窗口查看有無反應
在新窗口下操做
touch test.txt
mkdir zhao
在以前的窗口中查看
檢測成功。那麼咱們只須要結合 rsync 的經過推送命令,就能夠實現實時同步了。
最終的實時同步腳本命令
#!/bin/bash
host01=192.168.133.131
src=/backup
dst=backup/
user=rsync_backup
rsync_passfile=/etc/rsync.password
inotify_home=/usr/local/inotify/
#panduan
if [ ! -e "$src" ] \
|| [ ! -e "${rsync_passfile}" ] \
|| [ ! -e "${inotify_home}/bin/inotifywait" ] \
|| [ ! -e "/usr/bin/rsync" ];
then
echo "Check File and Folder"
exit 9
fi
${inotify_home}/bin/inotifywait -mrq --format '%w%f' -e create,close_write,delete,attrib $src | \
while read line
do
cd $src && rsync -aruz -R --delete ./ --timeout=100 $user@$host01::$dst --password-file=${rsync_passfile} > /dev/null 2>&1
done
exit 0