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