rsync遠程同步

發起rsync遠程同步的叫做發起端  響應遠程同步的叫備份源 


1.配置ssh備份源  

新建操作用戶 

root@rs-s ~]# useradd rget

[root@rs-s ~]# passwd rget

[root@rs-s ~]# useradd rput

[root@rs-s ~]# passwd rput

確認sshd服務正常運行,設置允許rget、rput訪問

[root@rs-s ~]# vim /etc/ssh/sshd_config

... ...

UseDNS no                        //找到這個選項修改成“no”

AllowUsers rget rput        //添加這個選項

[root@rs-s ~]# service  sshd  restart


2.設置備份源文件和目錄的ACL

要備份哪個文件夾就設置哪個

在linux中文件可有ACL 規則可以打開/etc/fstab

在default後面加上,ACL        (服務支持訪問控制列表)

配置完後重啓

設置權限以及ACL

root@localhost ~]# chown -R rput:rput /var/www/html      讓rput有html目錄的屬主權限

[root@localhost ~]# setfacl -R -m user:nginx:rwx /var/www/html/upload    遞歸添加ACL條目

[root@localhost ~]# setfacl -m default:user:nginx:rwx /var/www/html/upload     設置默認ACL

以下是清空ACL規則命令

[root@localhost ~]# setfacl -R -b /var/www/html/upload/             這條命令可以清楚所有ACL             改用“-x user:...”可只刪除指定ACL條目

  可以用這條命令查看新增的ACL

root@localhost ~]# getfacl /var/www/html/upload/

……

user::rwx

user:nginx:rwx

……

default:user::rwx

default:user:nginx:rwx

3.

應用示例

用戶backuper,允許下行同步

操作的目錄爲 /var/www/html/

首先新建配置文件 

[root@localhost ~]# vi /etc/rsyncd_users.db

backuper:pwd123

othername:123456

……

[root@localhost ~]# chmod 600 /etc/rsyncd_users.db

root@localhost ~]# vi /etc/rsyncd.conf

uid = nobody

gid = nobody

use chroot = yes

address = 192.168.4.4                //自己的IP               

port 873

log file = /var/log/rsyncd.log

pid file = /var/run/rsyncd.pid

hosts allow = 192.168.4.0/24       //允許誰訪問

[wwwroot]

    path = /var/www/html

    comment = Document Root of www1.benet.com

    read only = yes

    dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z           //不再壓縮這些格式

    auth users = backuper                                    //這行和下行都是用戶認證信息

    secrets file = /etc/rsyncd_users.db


4.

啓用rsync服務

通過--daemon獨自提供服務

[root@localhost ~]# rsync --daemon

[root@localhost ~]# netstat -anpt | grep rsync

tcp       0    0 192.168.4.200:873     0.0.0.0:*       LISTEN      21182/rsync

[root@localhost ~]# kill $(cat /var/run/rsyncd.pid


5.rsync命令的用法

rsync命令的用法

§基本格式:rsync [選項] 原始位置 目標位置

§常用選項:

-a:歸檔模式,遞歸併保留對象屬性,等同於 -rlptgoD

-v:顯示同步過程的詳細(verbose)信息

-z:在傳輸文件時進行壓縮(compress)

-H:保留硬連接文件

-A:保留ACL屬性信息

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

--checksum:根據對象的校驗和來決定是否跳過文件

-rlptgoD含義:

-r:遞歸模式,包含目錄及子目錄中所有文件

-l:對於符號鏈接文件仍然複製爲符號鏈接文件

-p:保留文件的權限標記

-t:保留文件的時間標記

-g:保留文件的屬組標記(僅超級用戶使用)

-o:保留文件的屬主標記(僅超級用戶使用)

-D:保留設備文件及其他特殊文件

備份操作類型

備份操作類型

§本地同步

rsync  ...  本地目錄1  本地目錄2

§rsync+ssh同步

rsync  ...  SSH源  本地目錄

rsync  ...  本地目錄  SSH源

§rsync+rsync同步

rsync  ...  rsync源  本地目錄

rsync  ...  本地目錄  rsync源

6.rsync同步操作示例

下行SSH源:/var/www/html  → /wwwroot

(就是本地複製本地用SSH  rsync不安全)

ssh:

[root@localhost ~]# mkdir /wwwroot

[root@localhost ~]# rsync -avzH --delete [email protected]:/var/www/html/ /wwwroot

[email protected]'s password:

receiving incremental file list

created directory /wwwroot

html/

html/index.html

html/style/

……

以上操作就是把html目錄裏的東西同步到/wwwroot裏

rsync:

[root@localhost ~]# mkdir /myweb

[root@localhost ~]# rsync -avzH --delete [email protected]::wwwroot /myweb

Password:

receiving incremental file list

./

index.html

index.php

……

以上操作時把剛剛新建的wwwroot被分到/myweb中 

用戶backuper是在上面的配置文件中寫的

wwwroot 是在 /etc/rsyncd.conf    中加載的。 



7. rsync源的免交互處理  (創建公鑰對)


在CentOS6.4中證書上傳很方便 

然後根據不用的備份源 執行不同的方案 

1)ssh備份源的無交互式登錄

ssh-keygen -t rsa    //生成

ssh-copy-id [email protected]  //上傳               

ssh-copy-id [email protected] //最好把rput的也上傳了


2)rsync備份源 


設置環境變量:RSYNC_PASSWORD

或者,使用 --password-file= 選項調用密碼文件

export RSYNC_PASSWORD=pwd123  (填寫你的密碼就好了 backuper的)

  然後執行腳本


腳本內容

[root@localhost ~]# vi /root/rsync_get_wwwroot.sh

#!/bin/bash

CMD="/usr/bin/rsync"

RSYNC_USER="backuper"

RSYNC_PASSWROD="pwd123"              //用戶backuper的密碼

ARGS="-az --delete"

SRC="192.168.4.4::wwwroot"           

DST="/wwwroot"

mkdir -p $DST

$CMD $ARGS $RSYNC_USER@$SRC $DST

給這個腳本700權限 

crontab -e 編寫任務計劃

開機自啓

service crond restart

chkconfig crond on 


配置rsync+inotify實時同步 

一、vLinux內核的inotify機制

§從版本2.6.13開始提供

§可以監控文件系統的變動情況,並作出通知響應

§輔助軟件:inotify-tools

1)調整inotify內核參數

max_queue_events:監控隊列大小

max_user_instances:最多監控實例數

max_user_watches:每個實例最多監控文件數

[root@localhost ~]# vi /etc/sysctl.conf

……

fs.inotify.max_queued_events = 16384

fs.inotify.max_user_instances = 1024

fs.inotify.max_user_watches = 1048576

[root@localhost ~]# sysctl -p


操作都是在備份源上做的 

2)安裝inotify-tools輔助工具

inotifywait:用於持續監控,實時輸出結果

inotifywatch:用於短期監控,任務完成後再出結果

root@localhost ~]# inotifywait -mrq -e modify,create,move,delete /var/www/html

Setting up watches.  Beware: since -r was given, this may take a while!

Watches established.

/var/www/html/ CREATE index.php

/var/www/html/ MODIFY index.php

/var/www/html/ MOVED_FROM index.php

/var/www/html/ MOVED_TO test.php



-m,持續進行監控

-r,遞歸監控所有子對象

-q,簡化輸出信息


-e,指定要監控哪些事件類型


3)

通過inotifywait觸發rsync同步操作

使用while死循環來不斷獲取監控結果

一旦偵測到目標變化,inotifywait將終結運行,則運行rsync進行備份

[root@localhost ~]# vi /opt/inotify_rsync.sh

#!/bin/bash

INOTIFY_CMD="inotifywait -rq -e modify,create,attrib,move,delete /var/www/html/"

RSYNC_CMD="rsync -azH --delete /var/www/html/ [email protected]:/var/www/html"

while true

do

    $INOTIFY_CMD  &>  /dev/null

    $RSYNC_CMD  &>  /dev/null

done

給權限 

執行


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章