rsync 遠程同步 實時同步備份 兩種免交互的方式實現實時備份


rsync 遠程同步: 一款快速增量備份工具 Remote Sync,遠程同步 支持本地復制,或者與其他SSH、rsync主機同步

作用:做數據備份

備份方式:

     完全備份

     增量備份

 

rsync客戶端 好處:

優點:   第一次同步時 rsync 會復制全部內容,但在下一次只傳輸修改過的文件。支持增量備份

         選擇性的保持 : 符號鏈接,硬鏈接,文件屬性,權限 及時間 等

              傳輸前執行壓縮。適用於異地備份 ,鏡像服務器等應用 

              安全,使用ssh做為傳輸端口。 sftp  ,ssh  

rsync命令的基本用法:

格式:rsync 【選項】 源文件 目標文件

常見的選項:

-a,--archive(存檔) 歸檔模式,表示以遞歸的方式傳輸文件,並且保持文件屬性,等同於加了參數-rlptgoD

-r,–recursive 對子目錄以遞歸模式處理

-l,--links 表示拷貝鏈接文件

-p , --perms 表示保持文件原有權限

-t , --times 表示保持文件原有時間

-g , --group 表示保持文件原有屬用戶組

-o , --owner 表示保持文件原有屬主

-D , --devices 表示塊設備文件信息

-z , --compress 表示壓縮傳輸

-H 表示硬連接文件

-A 保留ACL屬性信息

-P 顯示傳輸進度

--delete 刪除那些目標位置有而原始位置沒有的文件

常見的選項:

-a,--archive(存檔) 歸檔模式,表示以遞歸的方式傳輸文件,並且保持文件屬性,等同於加了參數-rlptgoD

-z , --compress 表示壓縮傳輸

-P 顯示傳輸進度

--delete 刪除那些目標位置有而原始位置沒有的文件

[root@DaMoWang ~]# rpm -q centos-release
centos-release-7-5.1804.el7.centos.2.x86_64
[root@DaMoWang ~]# rpm -q rsync
rsync-3.1.2-4.el7.x86_64

創建備份目錄

[root@DaMoWang ~]# mkdir -p /var/www/html/
[root@DaMoWang ~]# rsync -azP --delete /var/www/html/  root@192.168.94.29:/backup #把本機的html下的文件備份備份服務器的/backup目錄

下面實現實時備份的兩種方法

你打算幾點備份? 業務最不忙的時候? 

3:00   人都休息。    找一個人最少的時間去備份?  

每天晚上3點起來備份   敲密碼???

都不是 , 首先實現無交互 , 在無交互的基礎上實現實時備份

使用ssh密鑰實現無交互備份

[root@DaMoWang ~]# ssh-keygen    #生成密鑰對
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):     #一路回車
Enter passphrase (empty for no passphrase):     #回車
Enter same passphrase again:       #回車
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:+oFKlgZfDbR1PdvG+uq6wWutYQaOxWHUZU2wyRcaw0g root@DaMoWang.localdomain
The key's randomart image is:
+---[RSA 2048]----+
|      . ooE=*+o  |
|     . + .oo+*.. |
|      o o   ==.  |
|       = .  ..+  |
|  .   . S    o   |
|   o o * o  .    |
|    * + o *. .   |
|   + . . +.+. .  |
|    .   ..==o.   |
+----[SHA256]-----+

查看生成的公鑰和私鑰:

[root@DaMoWang ~]# ls /root/.ssh/
authorized_keys  id_rsa  id_rsa.pub  known_hosts  #id_rsa(私鑰)  id_rsa.pub(公鑰)

將公鑰上傳到備份服務器上:

[root@DaMoWang ~]# ssh-copy-id root@192.168.94.29
root@192.168.94.29's password:   #最后一次輸入密碼 Now try logging into the machine, with "ssh 'root@192.168.94.29'", and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting.

現在已經是無交互免密了 

測試

[root@DaMoWang html]# touch {1..5}.txt  #創建測試文件
[root@DaMoWang html]# ls
1.txt  2.txt  3.txt  4.txt  5.txt  
[root@DaMoWang ~]#  rsync -azP --delete /var/www/html/  root@192.168.94.29:/backup  #推送到備份服務器
sending incremental file list
./
1.txt
              0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=5/6)
2.txt
              0 100%    0.00kB/s    0:00:00 (xfr#2, to-chk=4/6)
3.txt
              0 100%    0.00kB/s    0:00:00 (xfr#3, to-chk=3/6)
4.txt
              0 100%    0.00kB/s    0:00:00 (xfr#4, to-chk=2/6)
5.txt
              0 100%    0.00kB/s    0:00:00 (xfr#5, to-chk=1/6)

切換到備份服務器查看

[root@DaMoWang html]# ssh root@192.168.94.29  #切換到備份服務器
[root@DaMoWang ~]# ip a   #已經切換到備份服務器
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:7d:b5:99 brd ff:ff:ff:ff:ff:ff
    inet 192.168.94.29/24 brd 192.168.94.255 scope global noprefixroute ens33  
       valid_lft forever preferred_lft forever
    inet6 fe80::a1f6:1d30:fbb2:f090/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@DaMoWang ~]# cd /backup/  
[root@DaMoWang backup]# ls    #查看備份目錄下是否成功備份 
1.txt  2.txt  3.txt  4.txt  5.txt

 [root@DaMoWang backup]# exit
 登出
 Connection to 192.168.94.29 closed.

創建密碼文件實現無交互備份

配置備份服務器的rsync配置文件

[root@DaMoWang ~]# vim /etc/rsyncd.conf     #修改rsync的配置文件

# 用戶
uid = rsync
# 組
gid = rsync
# 程序安全設置
use chroot = no
# 客戶端連接數
max connections = 200
# 超時時間
timeout = 300
# 本機ip
address = 192.168.94.29

# 監聽端口
port 873
# 進程號文件位置
pid file = /var/run/rsyncd.pid
# 進程鎖
lock file = /var/run/rsync.lock
# 日志文件位置
log file = /var/log/rsyncd.log
# 共享模塊名稱
[backup]
# 使用目錄
path = /backup/
# 有錯誤時忽略
ignore errors
# 可讀可寫
read only = false
# 阻止訪問遠程列表
list = false
# 允許IP
hosts allow = 192.168.94.0/24
# 禁止IP
hosts deny = 0.0.0.0/32
# 虛擬用戶
auth users = rsync_backup
# 存放用戶和密碼的文件
secrets file = /etc/rsync.password
# 排除的壓縮類型
dont compress = .gz .bz2 .tgz .zip .rar .z
# 共享模塊名稱
[nfsbackup]
# 使用目錄
path = /data/
# 有錯誤時忽略
ignore errors
# 可讀可寫(true或false)
read only = no
# 阻止遠程列表(不讓通過遠程方式看服務端有什么)
list = false
# 允許IP
hosts allow = 192.168.94.0/24
# 禁止IP
hosts deny = 0.0.0.0/32
# 虛擬用戶
auth users = rsync_backup
# 存放用戶和密碼的文件
secrets file = /etc/rsync.password

#保存退出
#把密碼文件的權限改成600
[root@DaMoWang ~]# chmod 600 /etc/rsync.password
[root@DaMoWang ~]# echo “rsync_backup:475541270” > /etc/tc/rsync.password    #設置密碼到密碼文件中
[root@DaMoWang ~]# useradd -M -s /sbin/nologin rsync  
[root@DamOWang ~]# chmod +R rsync /backup
  

服務器端配置完成 , 下面把客戶端里添加密碼文件即可實現面交互

[root@DaMoWang ~]# echo "475541270" > /etc/rsync.password
[root@DaMoWang ~]# mkdir /backup #創建共享目錄
[root@DaMoWang ~]# cd /backup
[root@DaMoWang backup]# touch {1..5}.txt  #創建測試文件
[root@DaMoWang backup]# rsync -azp /backup/ rsync_backup@192.168.94.29::backup --password-file=/et
c/rsync.password  #推送數據到備份服務器
sending incremental file list
./
1.txt
              0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=5/6)
2.txt
              0 100%    0.00kB/s    0:00:00 (xfr#2, to-chk=4/6)
3.txt
              0 100%    0.00kB/s    0:00:00 (xfr#3, to-chk=3/6)
4.txt
              0 100%    0.00kB/s    0:00:00 (xfr#4, to-chk=2/6)
5.txt
              0 100%    0.00kB/s    0:00:00 (xfr#5, to-chk=1/6)

切換到備份服務器查看是否備份成功

[root@DaMoWang backup]# ssh root@192.168.94.29  #切換到備份服務器
Last login: Sat Jul 21 02:37:28 2018 from 192.168.94.100  #本機ip 192.168.94.100
[root@DaMoWang ~]# ip a   #已經切換到備份服務器
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:7d:b5:99 brd ff:ff:ff:ff:ff:ff
    inet 192.168.94.29/24 brd 192.168.94.255 scope global noprefixroute ens33  
       valid_lft forever preferred_lft forever
    inet6 fe80::a1f6:1d30:fbb2:f090/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@DaMoWang ~]# cd /backup/  
[root@DaMoWang backup]# ls    #查看備份目錄下是否成功備份 
1.txt  2.txt  3.txt  4.txt  5.txt
[root@DaMoWang backup]# exit
登出
Connection to 192.168.94.29 closed.

配置rsync+inotify實現實時同步

inotify概述:

Linux內核從2.6.13版本開始提供了inotify通知接口,用來監控文件系統的各種變化情況,如文件存取、刪除、移動等。利用這一機制,可以非常方便地實現文件異動告警、增量備份,並針對目錄或文件的變化及時作出響應

使用rsync工具與inotify機制相結合,可以實現觸發式備份(實時同步),只要原始位置的文檔發生變化,則立即啟動增量備份操作,否則處於靜態等侍狀態,這樣一來,就避免了按固定周期備份存在的延遲性、周期過密等問題

#使用網絡yum源或者源碼安裝inotify工具
[root@DaMoWang ~]# yum -y install inotify-tools
[root@DaMoWang ~]# inotifywait -h     #查看選項 參數

常用參數:
-e 用來指定要監控哪些事件
這些事件包括: create創建,move移動,delete刪除,modify修改文件內容,attrib屬性更改
-m 表示持續監控
-r 表示遞歸整個目錄
-q 表示簡化輸出信息

[root@DaMoWang ~]# inotifywait -mrq -e create,close_write,move,delete,modify /var/www/html/    #輸入命令后會監控目錄變化 , 打開另一個終端來測試

 

在另一個終端登錄,在/var/www/html目錄進行相關的操作,然后,回到原來的終端查看監控變化情況

[root@DaMoWang ~]# echo aaa > /var/www/html/a.html
[root@DaMoWang ~]# mkdir /var/www/html/test
[root@DaMoWang ~]# cp /etc/passwd /var/www/html/test/
[root@DaMoWang ~]# rm -rf /var/www/html/test/passwd

查看變化:

/var/www/html/ CREATE a.html
/var/www/html/ MODIFY a.html
/var/www/html/ CREATE,ISDIR test
/var/www/html/test/ CREATE passwd
/var/www/html/test/ MODIFY passwd
/var/www/html/test/ DELETE passwd
#使用inotifywait輸出的監控結果中,每行記錄中依次包括目錄、事件、文件。據此可以識別變動情況

編寫觸發式同步腳本

只要使用inotifywait檢測到事件時,自動執行rsync進行同步操作即可

#!/bin/bash
inotifywait -mrq -e create,close_write,move,delete,modify /var/www/html/  | while read a b c
do     
rsync -azP --delete /var/www/html/ root@192.168.94.29:/backup(或者rsync -azp /backup/ rsync_backup@192.168.94.29::backup --password-file=/et
c/rsync.password)

done

加上執行權限並在后台運行即可


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM