系統環境:CentOS 6.3 rsync服務器
CentOS 6.3 rsync客戶端
IP地址分別為:10.1.4.44服務器、10.1.4.41客戶端
所需軟件包:rsync-3.0.9.tar.gz
一、rsync 服務器
rsync,remote synchronize思意就知道它是一款實現遠程同步功能的軟件,它在同步文件的同時,可以保持原來文件的權限、時間、軟硬鏈接等附加信息。 rsync是用 “rsync 算法”提供了一個客戶機和遠程文件服務器的文件同步的快速方法,而且可以通過ssh方式來傳輸文件,這樣其保密性也非常好,另外它還是免費的軟件。
rsync 包括如下的一些特性:
能更新整個目錄和樹和文件系統;
有選擇性的保持符號鏈接、硬鏈接、文件屬於、權限、設備以及時間等;
對於安裝來說,無任何特殊權限要求;
對於多個文件來說,內部流水線減少文件等待的延時;
能用rsh、ssh 或直接端口作為傳輸入端口;
支持匿名rsync 同步文件,是理想的鏡像工具;
rsync 服務器架設比較簡單,可能我們安裝好rsync後,並沒有發現配置文件,以及rsync服務器啟動程序,因為每個管理員可能對rsync 用途不一樣,所以一般的發行版只是安裝好軟件就完事了,讓管理員來根據自己的用途和方向來自己架設rsync服務器;因為這個rsync應用比較廣,能在同一台主機進行備份工作,還能在不同主機之間進行工作。在不同主機之間的進行備份,是必須架設rsync 服務器的。
二、 rsync服務器安裝
rysnc的官方網站:http://rsync.samba.org可以從上面得到最新的版本。目前最新版是3.0.9。
[root@server ~]# wget http://rsync.samba.org/ftp/rsync/src/rsync-3.0.9.tar.gz
[root@server ~]# tar xvf rsync-3.0.9.tar.gz
[root@server ~]# cd rsync-3.0.9
[root@server rsync-3.0.9]# ./configure --prefix=/usr
[root@server rsync-3.0.9]# make
[root@server rsync-3.0.9]# make install 注:在用源碼包編譯安裝之前,您得安裝gcc等編譯開具才行
三、 rsync服務器的配置文件rsyncd.conf
rsync的主要有以下三個配置文件:
rsyncd.conf(主配置文件)
rsyncd.secrets(密碼文件)
rsyncd.motd(rysnc服務器信息)
服務器配置文件(/etc/rsyncd/rsyncd.conf),該文件默認不存在,請創建:
[root@server etc]# mkdir rsyncd 注:在/etc目錄下創建一個rsyncd的目錄,我們用來存放rsyncd.conf 、rsyncd.secrets、rsyncd.mond文件
[root@server rsyncd]# touch rsyncd.conf 注:創建rsyncd.conf ,這是rsync服務器的配置文件
[root@server rsyncd]# touch rsyncd.secrets 注:創建rsyncd.secrets ,這是用戶密碼文件
[root@server rsyncd]# chmod 600 rsyncd.secrets 注:為了密碼的安全性,我們把權限設為600
[root@server rsyncd]# ls -lh rsyncd.secrets
-rw------- 1 root root 12 9月 14 11:56 rsyncd.secrets
[root@server rsyncd]# touch rsyncd.motd
[root@server rsyncd]# ll
總用量 12
-rw-r--r-- 1 root root 643 9月 14 11:55 rsyncd.conf
-rw-r--r-- 1 root root 172 9月 14 11:58 rsyncd.motd
-rw------- 1 root root 12 9月 14 11:56 rsyncd.secrets
配置編輯: rsyncd.conf 、rsyncd.secrets 、rsyncd.motd 文件;
1、配置rsyncd.conf文件
rsyncd.conf 是rsync服務器主要配置文件,我們來個簡單的示例:
備份服務器上的/data/share目錄下所有文件,手動添加內容如下:
[root@server ~]# vim /etc/rsyncd/rsyncd.conf
# Distributed under the terms of the GNU General Public License v2
# Minimal configuration file for rsync daemon
# See rsync(1) and rsyncd.conf(5) man pages for help
# This line is required by the /etc/init.d/rsyncd script
pid file = /var/run/rsyncd.pid 注:告訴進程寫到 /var/run/rsyncd.pid 文件中
port = 873 注:指定運行端口,默認是873,您可以自己指定
address = 10.1.4.44 注:指定服務器IP地址
#uid = nobody 注:服務器端傳輸文件時,要發哪個用戶和用戶組來執行,默認是nobody
#gid = nobody 注:服務器端傳輸文件時,要發哪個用戶和用戶組來執行,默認是nobody
uid = root
gid = root
use chroot = yes
read only = yes
#limit access to private LANs
hosts allow=10.1.4.0/255.255.255.0
hosts deny=*
max connections = 5 注:客戶端最多連接數
motd file = /etc/rsyncd/rsyncd.motd
#This will give you a separate log file
log file = /var/log/rsync.log
#This will log every file transferred - up to 85,000+ per user, per sync
#transfer logging = yes
log format = %t %a %m %f %b
syslog facility = local3
timeout = 300
[samba_data] 注:模塊
path = /data/share 注:指定文件目錄所在路徑
list=no 注:list 意思是把rsync 服務器上提供同步數據的目錄在服務器上模塊是否顯示列出來。默認是yes 。如果你不想列出來,就no ;如果是no是比較安全的,至少別人不知道你的服務器上提供了哪些目錄。你自己知道就行了
ignore errors 注:忽略IO錯誤,詳細的請查文檔
auth users = root 注:認證用戶是root ,是必須在服務器上存在的用戶
secrets file = /etc/rsyncd/rsyncd.secrets 注:密碼存在rsyncd.secrets文件裡
注: 關於 auth users 是必須在服務器上存在的真實的系統用戶,如果你想用多個用戶,那就以,號隔開;比如 auth users = root , user1
2、配置rsyncd.secrets文件
密碼文件: rsyncd.secrets的內容格式
[root@server ~]# vim /etc/rsyncd/rsyncd.secrets
root:111111
user:111111
用戶名:密碼 注:root:111111
而我們在例子中rsyncd.secrets的內容如下類似的;在文檔中說,有些系統不支持長密碼,自己嘗試著設置一下吧。另外 rsyncd.secrets文件權限對其它用戶組是不可讀的。如果你設置錯了,可能rsync不工作。
注意:
1、將rsyncd.secrets這個密碼文件的文件屬性設為root擁有, 且權限要設為600, 否則無法備份成功! 出於安全目的,文件的屬性必需是只有屬主可讀。
#chown root.root rsyncd.secrets #修改屬主
#chmod 600 rsyncd.secrets #修改權限
2、這裡的密碼值得注意,為了安全,你不能把系統用戶的密碼寫在這裡。比如你的系統用戶 root 密碼是 abcdefg ,為了安全,你可以讓rsync 中的root 為 111111 。這和samba的用戶認證的密碼原理是差不多的;
3、配置rsyncd.motd 文件
它是定義rysnc 服務器信息的,也就是用戶登錄信息。比如讓用戶知道這個服務器是誰提供的等;類似ftp服務器登錄時,我們所看到的提示信息……。 當然這在全局定義變量時,並不是必須的,你可以用#號注掉,或刪除;我在這裡寫了一個 rsyncd.motd的內容為:
[root@server ~]# vim /etc/rsyncd/rsyncd.motd
++++++++++++++++++++++++++++++++++++++++++++++
Welcome to use the mike.org.cn rsync services!
2002------2012
++++++++++++++++++++++++++++++++++++++++++++++
四、架設rsync服務器的說明
1、全局定義
在rsync 服務器中,全局定義有幾個比較關健的,根據我們前面所給的配置文件 rsyncd.conf 文件;
pid file = /var/run/rsyncd.pid 注:告訴進程寫到 /var/run/rsyncd.pid 文件中
port = 873 注:指定運行端口,默認是873,您可以自己指定
address = 10.1.4.44 注:指定服務器IP地址
uid = nobody
gid = nobdoy
注:服務器端傳輸文件時,要發哪個用戶和用戶組來執行,默認是nobody。 如果用nobody 用戶和用戶組,可能遇到權限問題,有些文件從服務器上拉不下來。所以我就偷懶,為了方便,用了root 。不過您可以在定義要同步的目錄時定義的模塊中指定用戶來解決權限的問題。
use chroot = yes 注:用chroot,在傳輸文件之前,服務器守護程序在將chroot 到文件系統中的目錄中,這樣做的好處是可能保護系統被安裝漏洞侵襲的可能。缺點是需要超級用戶權限。另外對符號鏈接文件,將會排除在外。也就是說,你在rsync服務器上,如果有符號鏈接,你在備份服務器上運行客戶端的同步數據時,只會把符號鏈接名同步下來,並不會同步符號鏈接的內容;這個需要自己來嘗試
read only = yes 注:read only 是只讀選擇,也就是說,不讓客戶端上傳文件到服務器上。還有一個 write only選項,自己嘗試是做什麼用的吧
#limit access to private LANs
hosts allow=192.168.1.0/255.255.255.0 10.0.1.0/255.255.255.0
注:在您可以指定單個IP,也可以指定整個網段,能提高安全性。格式是ip 與ip 之間、ip和網段之間、網段和網段之間要用空格隔開
max connections = 5 注:客戶端最多連接數
motd file = /etc/rsyncd/rsyncd.motd 注:motd file 是定義服務器信息的,要自己寫 rsyncd.motd 文件內容。當用戶登錄時會看到這個信息。
log file = /var/log/rsync.log 注:rsync 服務器的日志
transfer logging = yes 注:這是傳輸文件的日志
log format = %t %a %m %f %b
syslog facility = local3
timeout = 300
2 模塊定義
模塊定義什麼呢?主要是定義服務器哪個目錄要被同步。每個模塊都要以[name]形式。這個名字就是在rsync 客戶端看到的名字,其實有點像Samba服務器提供的共享名。而服務器真正同步的數據是通過 path 來指定的。我們可以根據自己的需要,來指定多個模塊。每個模塊要指定認證用戶,密碼文件、但排除並不是必須的;
我們來個簡單的示例:
比如我們要備份服務器上的 /data/share 和/opt ,在/data/share中,我想把beinan和samba目錄排除在外;
[samba] 注:模塊,它為我們提供了一個鏈接的名字
path = /data/share 注:指定文件目錄所在路徑
auth users = root 注:認證用戶是root ,是必須在 服務器上存在的用戶
list=yes 注:list 意思是把rsync 服務器上提供同步數據的目錄在服務器上模塊是否顯示列出來。默認是yes 。如果你不想列出來,就no ;如果是no是比較安全的,至少別人不知道你的服務器上提供了哪些目錄。你自己知道就行了
ignore errors 注:忽略IO錯誤,詳細的請查文檔
secrets file = /etc/rsyncd/rsyncd.secrets 注:密碼存在rsyncd.secrets文件
comment =root home data 注:注釋可以自己定義,寫什麼都行,寫點相關的內容就行
exclude = beinan/ samba/ 注:exclude 是排除的意思,也就是說,要把/home目錄下的beinan和samba 排除在外; beinan/和samba/目錄之間有空格分開
[beinan] 注:模塊,它為我們提供了一個鏈接的名字
path = /opt 注:指定文件目錄所在路徑
list=no
comment = data
auth users = user1 注:是必段在服務器上存在的用戶
secrets file = /etc/rsyncd/rsyncd.secrets
ignore errors
五、啟動rsync 服務器及防火牆的設置
1、啟動rsync服務器
啟動rsync 服務器相當簡單,–daemon 是讓rsync 以服務器模式運行;
[root@server ~]#/usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf
注: 如果你找不到rsync 命令,你應該知道rsync 是安裝在哪了。比如rsync 可執行命令可能安裝在了 /usr/local/bin目錄;也就是如下的命令;
[root@server ~]#/usr/local/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf
當然您也可以寫一個腳本來開機自動啟動rysnc 服務器,你自己查查文檔試試,這個簡單。因為我用slackware 也有一個類似的腳本。我感覺不如直接手工運行方面,或者把這個命令寫入rc.local文件中,這樣也一樣能自動運行;
[root@server ~]# netstat -anp |grep :873
tcp 0 0 10.1.4.44:873 0.0.0.0:* LISTEN 5696/rsync
2 、rsync服務器和防火牆
Linux 防火牆是用iptables,所以我們至少在服務器端要讓你所定義的rsync 服務器端口通過,客戶端上也應該讓通過。
[root@server ~]#iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT
[root@server ~]#iptables -L 查看一下防火牆是不是打開了 873端口;
六、通過rsync客戶端來同步數據
語法詳解
在配置完rsync服務器後,就可以從客戶端發出rsync命令來實現各種同步的操作。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來指定密碼文件,這樣就可以在腳本中使用而無需交互式地輸入驗證密碼了,這裡需要注意的是這份密碼文件權限屬性要設得只有屬主可讀。
1 、rsync 服務器上的所提供的同步內容
在rsync服務器上查看提供了哪些可用的數據源。
[root@server ~]# rsync --list-only [email protected]::samba_data
++++++++++++++++++++++++++++++++++++++++++++++
Welcome to use the mike.org.cn rsync services!
2002------2012
++++++++++++++++++++++++++++++++++++++++++++++
Password:
drwxr-xr-x 4096 2012/09/14 12:04:57 .
drwxrwxrwx 4096 2012/09/14 12:04:57 caiwu
drwxrwxrwx 4096 2012/09/14 12:24:54 jishu
drwxrwxrwx 4096 2012/09/14 12:22:11 public
drwxrwxrwx 4096 2012/09/14 12:04:57 yanfa
注: 前面是rsync 所提供的數據源,也就是我們在rsyncd.conf 中所寫的[samba_data]模塊。而“linuxsir home data”是由[samba_data]模塊中的 comment = root home 提供的;為什麼[samba_data] 數據源列出來呢?因為我們在[samba_data]中已經把list=yes。
2、rsync客戶端安裝
rysnc的官方網站:http://rsync.samba.org可以從上面得到最新的版本。目前最新版是3.0.9。
[root@server ~]# wget http://rsync.samba.org/ftp/rsync/src/rsync-3.0.9.tar.gz
[root@client ~]# tar xvf rsync-3.0.9.tar.gz
[root@client ~]# cd rsync-3.0.9
[root@client rsync-3.0.9]# ./configure --prefix=/usr
[root@client rsync-3.0.9]# make
[root@client rsync-3.0.9]# make install 注:在用源碼包編譯安裝之前,您得安裝gcc等編譯開具才行
在rsync客戶端上查看提供了哪些可用的數據源:
[root@client ~]# rsync -avzP [email protected]::samba_data
++++++++++++++++++++++++++++++++++++++++++++++
Welcome to use the mike.org.cn rsync services!
2002------2012
++++++++++++++++++++++++++++++++++++++++++++++
Password:
receiving incremental file list
drwxr-xr-x 4096 2012/09/14 12:04:57 .
drwxrwxrwx 4096 2012/09/14 12:04:57 caiwu
drwxrwxrwx 4096 2012/09/17 11:57:00 jishu
drwxrwxr-x 4096 2012/09/17 11:31:59 jishu/技術IOS
drwxrwxr-x 4096 2012/09/17 11:31:25 jishu/技術之星
drwxrwxr-x 4096 2012/09/17 16:05:04 jishu/技術備份
drwxrwxr-x 4096 2012/09/17 11:31:50 jishu/技術文檔
drwxrwxr-x 4096 2012/09/17 11:31:40 jishu/技術資料完整
drwxrwxr-x 4096 2012/09/17 11:32:07 jishu/技術軟件包
drwxrwxrwx 4096 2012/09/17 16:06:34 public
drwxrwxrwx 4096 2012/09/14 12:04:57 yanfa
sent 70 bytes received 489 bytes 74.53 bytes/sec
total size is 0 speedup is 0.00
後面的root@ip中,root是指定密碼文件中的用戶名,之後的:: samba_data這是[samba_data]模塊名
3 、rsync 客戶端手動同步數據
[root@client ~]# rsync -avzP [email protected]::samba_data /data
Password: 這裡要輸入root的密碼,是服務器端提供的,在前面的例子中,我們用的是 111111,輸入的密碼並不顯示出來;輸好後就回車;
注: 這個命令的意思就是說,用root 用戶登錄到服務器上,把[samba_data] 數據,同步到本地目錄/data上。當然本地的目錄是可以你自己定義的,比如 /share也是可以的;當你在客戶端上,當前操作的目錄下沒有/data這個目錄時,系統會自動為你創建一個;當存在/data這個目錄中,你要注意它的寫權限。
說明:
-a 參數,相當於-rlptgoD,-r 是遞歸 -l 是鏈接文件,意思是拷貝鏈接文件;-p 表示保持文件原有權限;-t 保持文件原有時間;-g 保持文件原有用戶組;-o 保持文件原有屬主;-D 相當於塊設備文件;
-z 傳輸時壓縮;
-P 傳輸進度;
-v 傳輸時的進度等信息,和-P有點關系,自己試試。可以看文檔;
[root@client ~]# rsync -avzP --delete [email protected]::samba_data /data
--delete 選項:表示客戶端上的數據要與服務器端完全一致,如果 [samba_data]目錄中有服務器上不存在的文件,則刪除。最終目的是讓/data目錄上的數據完全與服務器上保持一致;用的時候要小心點,最好不要把已經有重要數所據的目錄,當做本地更新目錄,否則會把你的數據全部刪除;
[root@client ~]# rsync -avzp --delete --password-file=rsync.password [email protected]::samba_data /data
--password-file=rsync.password選項:這是當我們以linuxsir用戶登錄rsync服務器同步數據時,密碼將讀取 rsync.password 這個文件。這個文件內容只是linuxsir用戶的密碼。我們要如下做;
[root@client ~]# touch rsync.password
[root@client ~]# chmod 600 rsync.passwod
[root@client ~]# echo "111111"> rsync.password
[root@client ~]# rsync -avzp --delete --password-file=rsync.password [email protected]::samba_data /data
注: 這樣就不需要密碼了;其實這是比較重要的,因為服務器通過crond 計劃任務還是有必要的;
4、rsync 客戶端自動與服務器同步數據
服務器是重量級應用,所以數據的網絡備份還是極為重要的。我們可以在生產型服務器上配置好rsync 服務器。我們可以把一台裝有rysnc機器當做是備份服務器。讓這台備份服務器,每天在早上2點開始同步服務器上的數據;並且每個備份都是完整備份。有時硬盤壞掉,或者服務器數據被刪除,完整備份還是相當重要的。這種備份相當於每天為服務器的數據做一個鏡像,當生產型服務器發生事故時,我們可以輕松恢復數據,能把數據損失降到最低.
第一步:創建同步腳本和密碼文件
注: 我們在/etc/cron.daily.rsync中創建了一個文件名為:root.sh ,並且是權限是 755。
[root@client ~]# mkdir /etc/cron.daily.rsync
[root@client ~]# cd /etc/cron.daily.rsync
[root@client cron.daily.rsync]# touch root.sh
[root@client cron.daily.rsync]# chmod 755 root.sh
編輯root.sh,內容是如下的:
[root@client cron.daily.rsync]#vim root.sh
#!/bin/sh
#10.1.4.44 samba_data backup
/usr/bin/rsync -avzP --delete --password-file=/etc/rsyncd/rsyncroot.password [email protected]::samba_data /data/$(date +'%m-%d-%y')
:wq
執行一下配置的腳本語句:
[root@client cron.daily.rsync]# sh root.sh
創建密碼文件,root用戶用的是 rsyncroot.password,權限是600;
[root@client ~]# mkdir /etc/rsyncd/
[root@client ~]# cd /etc/rsyncd/
[root@client rsyncd]# touch rsyncroot.password
[root@client rsyncd]# chmod 600 rsyncroot.password
[root@client rsyncd]# ll
total 4
-rw------- 1 root root 7 Sep 14 17:30 rsyncroot.password
接著我們修改 rsyncroot.password的內容;
[root@client rsyncd]# echo "111111" > rsyncroot.password
然後我們再/目錄下創建/data目錄,意思是服務器端的/data/share數據同步到備份客戶端上的/data下。並按年月日歸檔創建目錄;每天備份都存檔;
[root@client ~]# cd /
[root@client /]# mkdir /data
第二步:修改crond服務器的配置文件、加入到計劃任務
[root@client ~]# crontab -e
加入下面的內容:
# Run daily cron jobs at 02:30 every day backup samba data:
30 02 * * * /usr/bin/run-parts /etc/cron.daily.rsync 1> /dev/null
計劃任務說明:
# 基本格式 :
# .----------------第1列表示分鐘1~59 每分鐘用*或者 */1表示
# | .------------- 第2列表示小時1~23(0表示0點
# | | .---------- 第3列表示日期1~31
# | | | .------- 第4列表示月份1~12
# | | | | .---- 第5列標識號星期0~6(0表示星期天)OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * *
第一行是注釋,是說明內容,這樣能自己記住。
第二行表示在每天早上02點30分的時候,運行/etc/cron.daily.rsync 下的可執行腳本任務;
第三步:重啟crond服務器;
[root@client ~]# service crond restart
Stopping crond: [ OK ]
Starting crond: [ OK ]
[root@client ~]# killall crond 注:殺死crond 服務器的進程;
[root@client ~]# ps aux |grep crond 注:查看一下是否被殺死;
[root@client ~]# /usr/sbin/crond 注:啟動 crond 服務器;
[root@client ~]# ps aux |grep crond 注:查看一下是否啟動了?
root 3872 0.0 0.1 5916 1192 ? Ss 12:02 0:00 crond
root 3951 0.0 0.1 5912 1184 ? Ss 14:06 0:00 /usr/sbin/crond
root 3953 0.0 0.0 4336 760 pts/0 S+ 14:06 0:00 grep crond
查看數據備份:
[root@client ~]# ll /data
total 24
drwxr-xr-x 6 root root 4096 Sep 14 12:04 09-17-12
drwxr-xr-x 6 root root 4096 Sep 14 12:04 09-18-12
本文出自 “運維工作奮斗” 博客,請務必保留此出處http://yanghuawu.blog.51cto.com/2638960/994841