一、rsync支持單向的完全備份和增量備份,兩者各有優劣(雙向數據同步差點)。rsync同步文件前需要先登錄到目標主機進行用戶身份驗證,身份認證的協議可以使用ssh協議和rsync協議。當使用ssh協議時,使用的是Linux的系統用戶;當使用rsync協議時,使用的是非系統用戶(虛擬用戶)。
二、rsync特性:
更新整個目錄樹和文件系統
可以有選擇的保留符號鏈接、硬鏈接、文件屬性、權限、設備以及時間等
安裝時,無任何特殊權限要求
多文件傳輸效率高
可以使用ssh或自定義端口進行傳輸。
軟件名稱:rsync。
三、使用ssh協議進行數據傳輸:
使用普通系統用戶,則需要普通用戶對目錄有相應的權限,可以使用acl賦予其用戶權限
下載格式:rsync -avz 系統用戶名@服務器地址:/服務器目錄/* /本地目錄
-a 歸檔模式,遞歸並保留文件屬性
-v 顯示同步過程
-z 在進行文件傳輸時進行壓縮
rsync2下載rsync1中的文件
上傳格式:rsync -avz /本地目錄 系統用戶名@服務器地址:/服務器目錄/*
rsync2中的文件上傳到rsync1中
可以使用密鑰的形式進行免密操作。
ssh-keygen -t rsa -b 2048
ssh-copy-id root@目標服務器地址
兩台設備都需要操作,輸入一次密碼即可。再次傳輸時,不需輸入密碼。
四、使用rsync協議進行數據傳輸,這一項只需要在服務器端進行配置即可。
1、vi /etc/rsyncd.conf 配置主配置文件
address = 192.168.171.137 綁定服務器端地址
port 873 服務端口
log file = /var/log/rsyncd.log 日志的存放位置
pid = /var/run/rsyncd.pid 進程pid文件位置
[web] 共享名
comment = backup 描述
path = /test1 實際的文件目錄
read only = no 是否允許讀取
dont compress = *.gz *.bz2 *.zip 哪些文件不需要進行壓縮傳輸
auth users = zhangsan 虛擬用戶名稱
secrets file = /etc/rsyncd_users.db 虛擬用戶密碼的存放位置及密碼文件名稱
2、vi /etc/rsyncd_users.db 編寫用戶及對應的密碼
用戶名:密碼的形式
3、chmod 600 /etc/rsyncd_users.db 修改文件權限
4、rsync --daemon 啟動服務
5、映射用戶對其備份的目錄有權限
setfacl -m u:nobody:rwx /test1
6、測試
下載格式:rsync -avz rsync://用戶名@服務器端IP地址/共享名 /本地目錄
上傳格式:rsync -avz /本地目錄 rsync://用戶名@服務器端IP地址/共享名
擴展:--delete 可以將服務器端中沒有的,但是在客戶端有的文件刪除。
若要想免密傳輸,則需要在客戶端設置一環境變量。
export RSYNC_PASSWORD=虛擬用戶密碼
五、rsync+inotifywait+腳本實現實時備份
1、下載安裝inotifywait
wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
yum -y install gcc*
tar xzf inotify-tools-3.14.tar.gz
./configure && make && make install
2、編寫腳本
#!/bin/bash
detection="inotifywait -mrq -e create,delete,modify /test1" #檢測/test1目錄下,新建、刪除、寫入動作
action="rsync -avz /test1/* root@192.168.171.138:/test2" #將/test1目錄下的文件傳輸到另外一台設備的/test2目錄下,用戶是root。也可以使用普通系統用戶或虛擬用戶
$detection | while read directory event file #while判斷是否收到監控記錄
do
$action
done
需要做免密驗證
六、實現雙向數據傳輸(unsion+inotify)
需要軟件包:unison-2.13.16.tar.gz ocaml-3.10.0.tar.gz inotify-tools-3.14.tar.gz
前兩個軟件一定要注意軟件版本。我是centos7.5安裝的,其他版本安裝失敗。
1、安裝inotify-tools-3.14.tar.gz
yum -y install gcc*
tar -xzf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure && make && make install
2、安裝ocaml-3.10.0.tar.gz (unison依賴此軟件)
tar -xzf ocaml-3.10.0.tar.gz
cd ocaml-3.10.0
./configure (** Objective Caml configuration completed successfully ** 出現這個表示成功)
make world opt
make install
3、安裝unison-2.13.16.tar.gz
tar -xzf unison-2.13.16.tar.gz
cd unison-2.13.16
make UISTYLE=text THREADS=true STATIC=true (因為Makefile文件已經存在,不需要./configure。)
cp unison /usr/local/bin/
unison -version
可以出現版本號,代表安裝成功。同樣的,另外一台也需要進行相同的安裝即可。
4、編寫腳本,使其可以自動檢測文件變化,自動進行文件同步。
#!/bin/bash
detection="inotifywait -mrq -e create,delete,modify /test1"
action="/usr/local/bin/unison -bash /test1/ ssh://192.168.171.138//test2/"
$detection | while read directory event file
do
$action
done
腳本兩邊都是上面的代碼,唯一不同點是:其中的 IP//目錄 是對端的 IP//目錄。
5、建立ssh互信。
ssh-keygen -t rsa -b 2048 (一直回車)
ssh-copy-id root@對端IP地址 (第一次需輸入一次yes)
輸入密碼即可
6、測試
有時候在一端刪除,另外一端還存在,這個沒有影響,當下次同步的時候,會自動同步。