一、rsync
(一)、rsync簡介
rsync是Linux和Unix下一款遠程數據同步工具,rsync第一次會把數據全量同步到遠端服務器,之後會對比兩個文件的不同,傳輸差異文件,實現增量同步
優點:安全性高、備份迅速,使用同步算法,只同步有變化的文件 備份文件保持原有文件的屬性軟硬連接,且支持排除備份等
缺點:在數據同步之前需要掃描所有的文件進行對比才能進行差異化同步,如果同步文件達到百萬級或者千萬級,掃描文件同步將變得非常的耗時,降低了同步的效率
(二)、rsync基本命令介紹(1V4)
rsync是一個強大的命令,他可以同時實現複製,刪除,查看,遠程同步等功能
1. rsync==cp
root@nfs01 test]# rsync -a aa.txt aa.txt.bak
[root@nfs01 test]# ls
aa.txt aa.txt.bak
2、 rsync==scp
[root@nfs01 test]# rsync -rp /test/ 10.0.0.41:/test/
[email protected]'s password:
3 、rsync==rm
[root@nfs01 test]# mkdir /null
[root@nfs01 test]# rsync -r --delete /null/ /test/
[root@nfs01 test]# ls
4、 rsync==ls
[root@nfs01 test]# rsync /etc/hosts
-rw-r--r-- 352 2018/09/15 01:51:11 hosts
(三)、rsync工作方式
1、本地備份方式
語法:Local: rsync [OPTION...] SRC... [DEST]
練習:[root@nfs01 test]# rsync -a /etc/hosts /tmp/hosts.bak
[root@nfs01 test]# ll /tmp/hosts.bak
-rw-r--r-- 1 root root 352 Sep 15 01:51 /tmp/hosts.bak
2、遠程數據備份方式
語法:
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
練習:[root@nfs01 test]# rsync -avz /backup/ [email protected]:/backup/
[email protected]'s password:
sending incremental file list
./sent 1703 bytes received 333 bytes 370.18 bytes/sec
total size is 1622 speedup is 0.80
- 小提示:如果不指定user信息表示以當前用戶進行登陸
3、守護進程傳輸模式
語法:
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
- 小提示:這裏的SRC與遠程傳輸方式不同,這裏的指的是模塊信息
守護進程方式部署流程
一、服務端部署流程
1)檢查軟件是否安裝
[root@backup ~]# rpm -qa rsync
rsync-3.0.6-12.el6.x86_64
2)編寫配置文件(注意默認是沒有的,需要手動創建)[root@backup ~]# vim /etc/rsyncd.conf
#rsync_config
#created by HQ at 2017
##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
read only = false
list = false
hosts allow = 172.16.1.0/24
hosts deny = 0.0.0.0/32
auth users = jiang
secrets file = /etc/rsync.password
[backup]
comment = "practice and use"
path = /backup
~
-- INSERT --
配置參數詳細說明
配置參數 | 說明 |
---|---|
uid = rsync | 指定rsync服務運行的時候,向磁盤進行讀取和寫入操作的操作者 |
gid = rsync | 指定rsync服務運行的時候,向磁盤進行讀取和寫入操作的操作組 |
use chroot = no | 進行數據同步存儲時,安全相關參數,默認內網進行數據同步,可以關閉 |
max connections = 200 | 定義向備份服務器進行數據存儲的併發連接數 |
timeout = 300 | 定義與備份服務器建立的網絡連接,在多長時間沒有數據傳輸時,就釋放連接 |
pid file = /var/run/rsyncd.pid | 服務程序運行時,會將進程的pid信息存儲到一個指定的pid文件中 |
lock file = /var/run/rsync.lock | 定義鎖文件,主要用於配合max connections 參數,當達到最大連接就禁止繼續訪問 |
log file = /var/log/rsyncd.log | 定義服務的日誌文件保存路徑信息 |
[backup] | 指定備份目錄的模塊名稱信息 |
path = /backup | 指定數據進行備份的目錄信息 |
ignore errors | 在進行數據備份傳輸過程過程中,忽略一些I/O產生的傳輸錯誤 |
list = false | 確認是否可以將服務配置的模塊信息,在客戶端可以查看顯示 |
hosts allow = 172.16.1.0/24 | 設置備份目錄允許進行網絡數據備份的主機地址或網段信息,即設置白名單 |
hosts deny = 0.0.0.0/32 | 設置備份目錄禁止進行網絡數據備份的主機地址或網段信息,即設置黑名單 |
auth users = jiang | 指定訪問備份數據目錄的認證用戶信息,爲虛擬定義的用戶,不需要進行創建 |
secrets file = /etc/rsync.password | 設置訪問備份數據目錄進行認證用戶的密碼文件信息,會在文件中設置認證用戶密碼信息 |
3)、創建備份服務管理用戶
useradd rsync -M -s /sbin/nologin
4)創建備份目錄
mkdir /backup
chown -R rsync.rsync /backup
5)創建認證文件
echo "jiang:jiang123" >>/etc/rsync.password
chmod 600 /etc/rsync.password
6)啓動rsync服務
rsync --daemon
二、客戶端部署流程
1)確認軟件是否安裝
[root@backup ~]# rpm -qa rsync
rsync-3.0.6-12.el6.x86_64
2)創建認證密碼文件
echo "jiang" >>/etc/rsync.password
chmod 600 /etc/rsync.password
3)、進行數據備份測試
[root@nfs01 tmp]# rsync -avz /etc/hosts [email protected]::backup --password-file=/etc/rsync.password
sending incremental file list
hosts
二、利用inotify實現實時同步
(一)、inotify簡介
Inotify 是一個 Linux 內核特性,它監控文件系統,並且及時向專門的應用程序發出相關的事件警告,比如刪除、讀、寫和卸載操作等。要使用 inotify,必須具備一臺帶有 2.6.13 或更新內核的 Linux 機器
(二)、實時同步概念
一、爲什麼要使用實時同步
- 因爲定時任務有缺陷,一分鐘以內的數據無法進行同步,容易造成數據丟失
二、實時同步的工作原理
1、 創建要存儲數據的目錄
2、 利用實時同步的軟件監控我們進行備份的數據目錄
3、 利用rsync服務進行數據推送傳輸備份(三)、實時同步軟件部署
1)、安裝inotify軟件
yum install -y inotify-tools
2)、編寫實時同步的腳本
#!/bin/bash
####################
inotifywait -mrq --format "%w%f" -e create,delete,moved_to,close_write /data|\
while read line
do
rsync -az --delete /data/ [email protected]::backup --password-file=/etc/rsync.password
done
說明:在編寫同步腳本之前需要保證rsyc守護進程方式同步正常(四)、inotify命令說明
inotifywait
-m|--monitor 始終保持事件監聽狀態
-r 進行遞歸監控
-q|--quiet 將無用的輸出信息,不進行顯示
--timefmt <fmt> 設定日期的格式
man strftime 獲取更多時間參數信息
--format <fmt> 命令執行過程中,輸出的信息格式
-e 指定監控的事件信息
man inotifywait 查看所有參數說明和所有可以監控的事件信息
總結主要用到的事件信息:
create創建、delete刪除、moved_to移入、close_write修改
PS:因爲rsync是單線程方式監控目錄,所以如果文件數量達到百萬級會降低實時同步的效率,這時候我們可以考慮使用sersync+rsync的方式進行實時同步,sersync是國內開發者開發的一款軟件,使用c++ 編寫而成,他的優點:多線程方式工作,提高同步效率,使用方便,配置簡單,感興趣的小夥伴可以自行研究