rsync參數詳解、利用ssh、rsync 實現數據的定時同步

rsync 簡介

rsyncremote synchronize)是一個遠程數據同步工具,可通過 LAN/WAN 快速同步多臺主機之間的文

件。也可以使用 rsync 同步本􀨄硬盤中的不同目錄。

rsync 是用於替代 rcp 的一個工具,rsync 使用所謂的 rsync算法 進行數據同步,這種算法只傳送兩個文件

的不同部分,而不是每次都整份傳送,因此速度相當快。您可以參考 How Rsync Works A Practical Overview 進一步瞭解 rsync 的運作機制。

    rsync 的初始作者是 Andrew Tridgell Paul Mackerras,目前由 [url]http://rsync.samba.org[/url] 維護。rsync 支持大多數的類 Unix 系統,無論是 LinuxSolaris 還是 BSD上 都經過了良好的測試。 CentOS系統默認就安裝了 rsync 軟件包。 此外,在 windows 平臺下也有相應的版本,如 cwrsync DeltaCopy 等。

 

rsync 具有如下的􀫎本特性:

1. 可以鏡像保存整個目錄樹和文件系統

2. 可以很容易做到保持原來文件的權限、時間、軟硬鏈接等

3. 無須特殊權限即可安裝

4. 優化的流程,文件傳輸效率高

5. 可以使用 rshssh 方式來傳輸文件,當然也可以通過直接的 socket 連接

6. 支持匿名傳輸,以方便進行網站鏡象

 

在使用 rsync 進行遠程同步時,可以使用兩種方式:遠程 Shell 方式(建議使用 ssh,用戶驗證由 ssh

責)和 C/S 方式(即客戶連接遠程 rsync 服務器,用戶驗證由 rsync 服務器負責)。

 

Rsync的參數詳細解釋

 

-v, --verbose                  詳細模式輸出
-q, --quiet                       精簡輸出模式
-c, --checksum               打開校驗開關,強制對文件傳輸進行校驗
-a, --archive                   歸檔模式,表示以遞歸方式傳輸文件,並保持所有文件屬性,等於-rlptgoD
-r, --recursive                 對子目錄以遞歸模式處理
-R, --relative                  使用相對路徑信息
-b, --backup                  創建備份,也就是對於目的已經存在有同樣的文件名時,將老的文件重新命名爲~filename。可以使用--suffix選項來指定不同的備份文件前綴。
--backup-dir                  將備份文件(~filename)存放在在目錄下。
-suffix=SUFFIX             定義備份文件前綴
-u, --update                   僅僅進行更新,也就是跳過所有已經存在於DST,並且文件時間晚於要備份的文件。(不覆蓋更新的文件)
-l, --links                         保留軟鏈結
-L, --copy-links              想對待常規文件一樣處理軟鏈結
--copy-unsafe-links        僅僅拷貝指向SRC路徑目錄樹以外的鏈結
--safe-links                     忽略指向SRC路徑目錄樹以外的鏈結
-H, --hard-links              保留硬鏈結
-p, --perms                    保持文件權限
-o, --owner                    保持文件屬主信息
-g, --group                     保持文件屬組信息
-D, --devices                 保持設備文件信息
-t, --times                      保持文件時間信息
-S, --sparse                   對稀疏文件進行特殊處理以節省DST的空間
-n, --dry-run                  現實哪些文件將被傳輸
-W, --whole-file             拷貝文件,不進行增量檢測
-x, --one-file-system      不要跨越文件系統邊界
-B, --block-size=SIZE   檢驗算法使用的塊尺寸,默認是700字節
-e, --rsh=COMMAND 指定使用rshssh方式進行數據同步
--rsync-path=PATH      指定遠程服務器上的rsync命令所在路徑信息
-C, --cvs-exclude          使用和CVS一樣的方法自動忽略文件,用來排除那些不希望傳輸的文件
--existing                      僅僅更新那些已經存在於DST的文件,而不備份那些新創建的文件
--delete                         刪除那些DSTSRC沒有的文件
--delete-excluded          同樣刪除接收端那些被該選項指定排除的文件
--delete-after                傳輸結束以後再刪除
--ignore-errors             及時出現IO錯誤也進行刪除
--max-delete=NUM     最多刪除NUM個文件
--partial                        保留那些因故沒有完全傳輸的文件,以是加快隨後的再次傳輸
--force                          強制刪除目錄,即使不爲空
--numeric-ids                不將數字的用戶和組ID匹配爲用戶名和組名
--timeout=TIME IP       超時時間,單位爲秒
-I, --ignore-times          不跳過那些有同樣的時間和長度的文件
--size-only                    當決定是否要備份文件時,僅僅察看文件大小而不考慮文件時間
--modify-window=NUM 決定文件是否時間相同時使用的時間戳窗口,默認爲0
-T --temp-dir=DIR      DIR中創建臨時文件
--compare-dest=DIR   同樣比較DIR中的文件來決定是否需要備份
-P 等同於 --partial
--progress                    顯示備份過程
-z, --compress             對備份的文件在傳輸時進行壓縮處理
--exclude=PATTERN  指定排除不需要傳輸的文件模式
--include=PATTERN   指定不排除而需要傳輸的文件模式
--exclude-from=FILE   排除FILE中指定模式的文件
--include-from=FILE   不排除FILE指定模式匹配的文件
--version                      打印版本信息
--address                     綁定到特定的地址
--config=FILE             指定其他的配置文件,不使用默認的rsyncd.conf文件
--port=PORT              指定其他的rsync服務端口
--blocking-io               對遠程shell使用阻塞IO
-stats                           給出某些文件的傳輸狀態
--progress                   在傳輸時現實傳輸過程
--log-format=formAT  指定日誌文件格式
--password-file=FILE FILE中得到密碼
--bwlimit=KBPS         限制I/O帶寬,KBytes per second
-h, --help                    顯示幫助信息

 

一、首先做ssh的認證讓文件同步的時候

 
1ssh 信任的建立
//用於雙機直接相互傳輸問題免密碼
1)更改兩個節點上hosts文件#vi /etc/hosts
///////////////////////////////////
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1       node1  node1   localhost.localdomain   localhost
::1     localhost6.localdomain6 localhost6
192.168.1.31            node1
192.168.1.32            node2
///////////////////////////////////
:wq

 

2 //生成ssh本機的密鑰
//三次回車後完成
#ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa):

Created directory '/root/.ssh'.

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:

d6:00:5b:43:55:3b:8d:be:1a:c9:1e:7c:cb:9a:8f:21 [email][email protected][/email]

 

3
進入到用戶的主目錄下,默認爲root用戶的主目錄
#cd /root
其他用戶爲,soft

 

使用ls -al  察看是否是否存在.ssh這個文件夾
可以看到兩個文件
[root@web1 /]# cd /root/.ssh

[root@web1 .ssh]# ls

id_rsa  id_rsa.pub

 

其中id_rsa爲私鑰,id_rsa.pub爲公鑰。
4
//登陸到在node2
//重複上面123步,在node2上建立相應的密鑰。

 

5
//重新登陸到node1
//將公鑰改名,並添加到另一臺電腦的公鑰內。
#cd /root/.ssh
# mv id_rsa.pub ha1
//修改公鑰的姓名
# scp ha1 [email protected]:/root/.ssh/

//把公鑰傳輸到另一臺電腦上

 

6
//登陸到node2
#cd /root/.ssh

#cat ha1 >> id_rsa.pub

//web1的密鑰添加到node2的公鑰中去
#mv id_rsa.pub authorized_keys

// AuthorizedKeysFile 指令指定了用於公鑰認證的公鑰文件(默認 ~/.ssh/authorized_keys)位置,每行一個公鑰。此文件中空行和以'#'開頭的行將被當作註釋忽略
//修改文件名陳爲ssh可以識別的key文件authorized_keys

 

7
//將密鑰傳回到node1上,
#scp authorized_keys [email protected]:/root/.ssh/

 

//信任建立。
//然後檢測
#ssh node2
即可登陸到另外的機器上。

 

二、在node1上安裝rxync
1、安裝rsync程序

 

tar -zxvf rsync-3.0.4.tar        #解開壓縮包
cd rsync-3.0.4

./configure --prefix=/usr/local/rsync 
編譯與安裝
make

make install

 

2、/etc下創建rsync.conf文件
vi /etc/rsyncd.conf

  

use chroot = no

max connections = 4

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /var/log/rsyncd.log

 

          [web]              

          comment = replication

          uid = root                     

          gid = root              

          path = /www    

          ignore errors                 

          read .ly = no                

          write .ly = no               

          list= no

          auth users = root     

          secrets file = /etc/rsyncd.secrets

3、在/etc下創建/etc/rsyncd.secrets 文件
此文件格式爲 用戶名:密碼
root:12345678

4、在/etc/service 添加一行
rsync           873/tcp

5、添加環境變量,/etc/profile添加一行
#echo “export PATH=$PATH:/usr/local/rsync/bin” >> /etc/profile

#source /etc/profile
5、啓動rsync服務
#rsync --daemon

6、讓服務器開機的時候自啓動
 echo "/usr/local/rsync/bin/rsync --daemon" >> /etc/rc.local
在node2上做相應的配置

 

創建一個腳本,
 vi /usr/local/rsync/replcation

#!/bin/sh

 

# This . does personal backups to a rsync backup server. You will end up

 

export PATH=$PATH:/bin:/usr/bin:/usr/local/bin

 

# directory to backup

DIR=/www/bcmedia/

# the name of the primary

SERVER=node1

 

##############################################

 

OPTS="-a -p -t -g -o --delete --partial"

 

# now the actual transfer

rsync $OPTS root@$SERVER:$DIR $DIR

 

//通過這個腳本同步node1上的數據

 

vi /usr/local/rsync/replcation1

#!/bin/sh

 

# This . does personal backups to a rsync backup server. You will end up

 

export PATH=$PATH:/bin:/usr/bin:/usr/local/bin

 

# directory to backup

DIR=/www/bcmedia/

# the name of the primary

SERVER=node1

 

##############################################

 

OPTS="-a -p -t -g -o --delete --partial"

 

# now the actual transfer

rsync $OPTS $DIR  root@$SERVER:$DIR

//通過這個腳本把當前的數據同步到node1
 
#給予這兩個腳本可執行的權限

 

chmod 770 /usr/local/rsync/replcation

chmod 770 /usr/local/rsync/replcation1

 

添加到定時任務裏
node1
[root@web2 ~]# crontab -e

0 */3 * * * /usr/local/rsync/replcation

0 */4 * * * /usr/local/rsync/replcation1

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