rsync

rsync服務器地址172.16.249.100  node3

rsync客戶端地址172.16.249.242  node4


rsync配置文件

rsync的主要有以下三個配置文件rsyncd.conf(主配置文件)、rsyncd.secrets(密碼文件)、rsyncd.motd(rysnc服務器信息)

rsync的主要有以下三個配置文件rsyncd.conf(主配置文件)、rsyncd.secrets(密碼文件)、rsyncd.motd(rysnc服務器信息)
[root@node3 /]# vim /etc/rsyncd.conf
uid = rsync
gid = rsync
use chroot = no
max connections = 2000  注:客戶端最多連接數
timeout = 600
pid file=/var/run/rsyncd.pid  注:告訴進程寫到/var/run/rsyncd.pid文件中
lock file=/var/run/rsyncd.lock
log file=/var/log/rsyncd.log  注:rsync 服務器的日誌;
log format=%t %a %m %f %b 注:設定日誌格式
ignore errors
read only=false  注:read only 是隻讀選擇,如果爲yes就是不讓客戶端上傳文件到服務器上。
list = false
hosts allow = 172.16.0.0/16
hosts deny = 0.0.0.0/32
#auth users = rsync_backup
#secrets file = /etc/rsync.password
###################################
[backup]
comment = back server by zhoushuyu 22:00 2016-3-3
path = /backup

模塊定義:主要是定義服務器哪個目錄要被同步。每個模塊都要以[name]形式。這個名字就是在rsync 客戶端看到的名字,其實有點象Samba服務器提供的共享名。而服務器真正同步的數據是通過path 指定的。我們可以根據自己的需要,來指定多個模塊。每個模塊要指定認證用戶,密碼文件、但排除並不是必須的。
[rhel4home]  注:模塊它爲我們提供了一個鏈接的名字,在本模塊中鏈接到了/home目錄;要用[name] 形式
path=/home #指定文件目錄所在位置,這是必須指定的
auth users=root #認證用戶是root  ,是必須在服務器上存在的用戶
list=yes #list 意思是把rsync 服務器上提供同步數據的目錄在服務器上模塊是否顯示列出來。默認是yes 。如果你不想列出來,就no ;如果是no是比較安全的,至少別人不知道你的服務器上提供了哪些目錄。你自己知道就行了;
ignore errors
secrets file=/etc/rsync.password  #密碼存在哪個文件
comment= zhoushuyu home data  #註釋可以自己定義
##############rsyncd.conf stop###########

設定密碼文件
[root@node3 /]# cat /etc/rsync.password
rsync_backup:123456
root:123456
[root@node3 /]# chmod 600 /etc/rsync.password
[root@node3 /]# chown root.root /etc/rsync.password


啓動rsync服務

#/usr/bin/rsync --daemon  --config=/etc/rsyncd/rsyncd.conf  #--config用於指定rsyncd.conf的位置,如果在/etc下可以不寫
由於rsyncd.conf在/etc下,故可以使用如下命令來啓動rsync
/usr/bin/rsync --daemon

關於防火牆的問題
Linux的防火牆是用iptables,所以我們至少在服務器端要讓你所定義的rsync 服務器端口通過,客戶端上也應該讓通過。
#iptables -A INPUT -p tcp -m state --state NEW  -m tcp --dport 873 -j ACCEPT
#iptables -L  查看一下防火牆是不是打開了 873端口
如果你不太懂防火牆的配置,可以先service iptables stop 將防火牆關掉。


rsync客戶端同步

[root@node2 ~]# rsync -avzP [email protected]::rhel4home rhel4home 
Password: 這裏要輸入root的密碼,是服務器端/etc/rsync.password提供的。輸入的密碼並不回顯,輸好就回車。
注: 這個命令的意思就是說,用root用戶登錄到服務器上,把rhel4home數據,同步到本地當前目錄rhel4home上。當然本地的目錄是可以你自己 定義的。如果當你在客戶端上當前操作的目錄下沒有rhel4home這個目錄時,系統會自動爲你創建一個;當存在rhel4home這個目錄中,你要注意 它的寫權限。

在客戶端執行如下命令:

[root@node2 ~]# rsync -avzP --delete [email protected]::rhel4home rhel4home
Password: 
receiving incremental file list
deleting x.sh

sent 60 bytes  received 166 bytes  64.57 bytes/sec
total size is 0  speedup is 0.00
這回我們引入一個--delete 選項,表示客戶端上的數據要與服務器端完全一致,如果 linuxsirhome目錄中有服務器上不存在的文件,則刪除。最終目的是讓linuxsirhome目錄上的數據完全與服務器上保持一致;用的時候要 小心點,最好不要把已經有重要數所據的目錄,當做本地更新目錄,否則會把你的數據全部刪除。

設定密碼文件

[root@node2 ~]# rsync -avzP --delete --password-file=/etc/rsync.password [email protected]::rhel4home rhel4home
receiving incremental file list
deleting x.sh
./

sent 63 bytes  received 169 bytes  464.00 bytes/sec
total size is 0  speedup is 0.00
在客戶端 
touch /etc/rsync.password
chmod 600 /etc/rsync.password
echo 123456 >  /etc/rsync.password  密碼爲123456
在服務器端
[root@node3 mageedu]# ls -l /etc/rsync.password
-rw------- 1 root root 32 3月   4 02:16 /etc/rsync.password
[root@node3 mageedu]# cat /etc/rsync.password 
rsync_backup:123456
root:123456
注:這裏需要注意的是這份密碼文件權限屬性要設得只有屬主可讀。
  這樣就不需要密碼了;其實這是比較重要的,因爲服務器通過crond 計劃任務還是有必要的。

創建定時任務

[root@node2 ~]# mkdir -pv /etc/cron.daily.rsync
[root@node2 ~]# cd /etc/cron.daily.rsync/
[root@node2 cron.daily.rsync]# touch rhel4home.sh
[root@node2 cron.daily.rsync]# chmod 755 ./*.sh
[root@node2 cron.daily.rsync]# mkdir /etc/rsyncd
[root@node2 cron.daily.rsync]# touch /etc/rsyncd/rsyncrhel4root.password
[root@node2 cron.daily.rsync]# cd /etc/rsyncd/
[root@node2 rsyncd]# chmod 600 rsyncrhel4root.password
[root@node2 rsyncd]# echo 123456 >rsyncrhel4root.password
[root@node2 rsyncd]# cd /etc/cron.daily
[root@node2 cron.daily]# touch rhel4home.sh
[root@node2 cron.daily]# chmod 755 rhel4home.sh
內容是
#!/bin/bash
#backup 172.16.249.100 /home
/usr/bin/rsync -avzP --password-file=/etc/rsyncd/rsyncrhel4root.password [email protected]::rhel4home /home/rhel4homebak/$(date +'%m-%d-%y')

[root@node2 rsyncd]# mkdir /home/rhel4homebak
/home目錄下創建rhel4homebak目錄,意思是服務器端的rhel4home數據同步到備份服務器上的/home/rhel4homebak下。並按年月日歸檔創建目錄;每天備份都存檔。


[root@node2 rsyncd]# crontab -e
# Run daily cron jobs at 6:30 everyday backup rhel4 data:
30 6 * * * /etc/cron.daily/rhel4home.sh
配置好後,要重啓crond 服務器
[root@node2 ~]# killall crond
[root@node2 ~]# /usr/sbin/crond
[root@node2 ~]# ps -aux | grep crond
root      31421  0.0  0.1 126304  1312 ?        Ss   05:58   0:00 /usr/sbin/crond
root      31423  0.0  0.0 112656   972 pts/0    R+   05:58   0:00 grep --color=auto crond


rsync語法

rsync的命令格式可以爲:
  
  1. rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST 
  2. rsync [OPTION]... [USER@]HOST:SRC DEST 
  3. rsync [OPTION]... SRC [SRC]... DEST 
  4. rsync [OPTION]... [USER@]HOST::SRC [DEST] 
  5. rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST 
  6. rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
  rsync有六種不同的工作模式:
  1. 拷貝本地文件;當SRC和DES路徑信息都不包含有單個冒號":"分隔符時就啓動這種工作模式。
  2.使用一個遠程shell程序(如rsh、ssh)來實現將本地機器的內容拷貝到遠程機器。當DST路徑地址包含單個冒號":"分隔符時啓動該模式。
  3.使用一個遠程shell程序(如rsh、ssh)來實現將遠程機器的內容拷貝到本地機器。當SRC地址路徑包含單個冒號":"分隔符時啓動該模式。
  4. 從遠程rsync服務器中拷貝文件到本地機。當SRC路徑信息包含"::"分隔符時啓動該模式。
  5. 從本地機器拷貝文件到遠程rsync服務器中。當DST路徑信息包含"::"分隔符時啓動該模式。
  6. 列遠程機的文件列表。這類似於rsync傳輸,不過只要在命令中省略掉本地機信息即可。
  -a 以archive模式操作、複製目錄、符號連接 相當於-rlptgoD
  rsync中的參數
  -r 是遞歸 
  -l 是鏈接文件,意思是拷貝鏈接文件;-p 表示保持文件原有權限;-t 保持文件原有時間;-g 保持文件原有用戶組;-o 保持文件原有屬主;-D 相當於塊設備文件;
  -z 傳輸時壓縮;
  -P 傳輸進度;
  -v 傳輸時的進度等信息,和-P有點關係,自己試試。可以看文檔;
  -e ssh的參數建立起加密的連接。
  -u只進行更新,防止本地新文件被重寫,注意兩者機器的時鐘的同時
  --progress是指顯示出詳細的進度情況
  --delete是指如果服務器端刪除了這一文件,那麼客戶端也相應把文件刪除,保持真正的一致
  --password-file=/password/path/file來指定密碼文件,這樣就可以在腳本中使用而無需交互式地輸入驗證密碼了,這裏需要注意的是這份密碼文件權限屬性要設得只有屬主可讀。


參考文檔

http://www.cnblogs.com/itech/archive/2009/08/10/1542945.html

http://10851431.blog.51cto.com/10841431/1746583

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