博客地址:http://www.moonxy.comhtml
1、前言web
rsync 命令是一個遠程數據同步工具,可經過 LAN/WAN 快速同步多臺主機間的文件,能夠理解爲 remote sync(遠程同步)。rsync 使用所謂的 "rsync算法" 來使本地和遠程兩個主機之間的文件達到同步,這個算法只傳送兩個文件的不一樣部分,而不是每次都整份傳送,所以速度至關快。rsync 不只能夠遠程同步數據(相似於 scp),還能夠本地同步數據(相似於 cp),但不一樣於 cp 或 scp 的一點是,rsync 不會覆蓋之前的數據(若是數據已經存在),而是先判斷已經存在的數據和新數據的差別,只有當源數據或目標數據出現不一致時,纔會把不相同的部分覆蓋。rsync 是一個功能很是強大的工具,其命令也有不少功能特點選項。若是沒有安裝 rsync 命令,可使用 "yum install -y rsync" 安裝。算法
2、rsync 的命令格式shell
rsync [OPTION]... SRC DESTvim
rsync [OPTION]... SRC [USER@]host:DESTcentos
rsync [OPTION]... [USER@]HOST:SRC DEST服務器
rsync [OPTION]... [USER@]HOST::SRC DEST網絡
rsync [OPTION]... SRC [USER@]HOST::DESTdom
rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]ssh
其中 SRC 表示源文件,DEST 表示目標文件。
對應於以上六種命令格式,rsync 有六種不一樣的工做模式:
1)拷貝本地文件。當SRC和DES路徑信息都不包含有單個冒號":"分隔符時就啓動這種工做模式。如:rsync -a /data /backup
2)使用一個遠程shell程序(如rsh、ssh)來實現將本地機器的內容拷貝到遠程機器。當DST路徑地址包含單個冒號":"分隔符時啓動該模式。如:rsync -avz *.c foo:src
3)使用一個遠程shell程序(如rsh、ssh)來實現將遠程機器的內容拷貝到本地機器。當SRC地址路徑包含單個冒號":"分隔符時啓動該模式。如:rsync -avz foo:src/bar /data
4)從遠程rsync服務器中拷貝文件到本地機。當SRC路徑信息包含"::"分隔符時啓動該模式。如:rsync -av root@192.168.78.192::www /databack
5)從本地機器拷貝文件到遠程rsync服務器中。當DST路徑信息包含"::"分隔符時啓動該模式。如:rsync -av /databack root@192.168.78.192::www
6)列遠程機的文件列表。這相似於rsync傳輸,不過只要在命令中省略掉本地機信息便可。如:rsync -v rsync://192.168.78.192/www
-a, --archive 歸檔模式,表示以遞歸方式傳輸文件,並保持全部文件屬性,等於-rlptgoD。 -r, --recursive 對子目錄以遞歸模式處理。 -v, --verbose 詳細模式輸出。 -u, --update 僅僅進行更新,也就是跳過全部已經存在於DST,而且文件時間晚於要備份的文件,不覆蓋更新的文件。 -l, --links 保留軟連接。 -L, --copy-links 想對待常規文件同樣處理軟鏈結。 -p, --perms 保持文件權限。 -o, --owner 保持文件屬主信息。 -g, --group 保持文件屬組信息。 -D, --devices 保持設備文件信息。 -t, --times 保持文件時間信息。 -e, --rsh=command 指定使用rsh、ssh方式進行數據同步。 -C, --cvs-exclude 使用和CVS同樣的方法自動忽略文件,用來排除那些不但願傳輸的文件。 --existing 僅僅更新那些已經存在於DST的文件,而不備份那些新建立的文件。 --delete 刪除那些DST中有,SRC沒有的文件。 -P 等同於 --partial。 --progress 顯示備份過程。 -z, --compress 對備份的文件在傳輸時進行壓縮處理。 --exclude=PATTERN 指定排除不須要傳輸的文件模式。 --include=PATTERN 指定不排除而須要傳輸的文件模式。 --exclude-from=FILE 排除FILE中指定模式的文件。 --include-from=FILE 不排除FILE指定模式匹配的文件。 --config=FILE 指定其餘的配置文件,不使用默認的rsyncd.conf文件。 --port=PORT 指定其餘的rsync服務端口。 --progress 在傳輸時現實傳輸過程。 --password-file=FILE 從FILE中獲得密碼。
這些還只是 rsync 的一部分選項,其中經常使用的有 a、v、L、--delete 和 --exclude 這幾個,一般 -av 或 -avL 連用,其中 -a 選項等同於 -rlptgoD,-a 選項後面能夠跟一個 --no-OPTION,表示關閉 -rlptgoD 中的某一個,好比 -a--no-l 等同於 -rptgoD。
3、rsync 應用實例
3.1 將本地的 test1 目錄直接複製成 test2 目錄
單機模式,直接將一個目錄的文件備份到另一個目錄下,以下:
# rsync -avL test1/ test2/
如下爲遠程模式,將源端看作客戶端,遠端看作服務器。
3.2 經過 ssh 的方式備份
首先啓動服務端的ssh服務:
# service sshd start
接下來就能夠在客戶端使用rsync命令來備份服務端上的數據了,SSH方式是經過系統用戶來進行備份的,以下:
rsync -avL --progress -e ssh work@192.168.1.121:/www/* /databack/experiment/rsync work@172.16.78.192's password: receiving file list ... 5 files to consider test/ a 0 100% 0.00kB/s 527:35:41 (1, 20.0% of 5) b 67 100% 65.43kB/s 0:00:00 (2, 40.0% of 5) c 0 100% 0.00kB/s 527:35:41 (3, 60.0% of 5) dd 100663296 100% 42.22MB/s 0:00:02 (4, 80.0% of 5) sent 96 bytes received 98190 bytes 11563.06 bytes/sec total size is 100663363 speedup is 1024.19
上面的信息描述了整個的備份過程,以及總共備份數據的大小。
這個實例表示 pull(拉取),從服務器拉取文件到本地目錄,一樣也能夠 push(推送),表示將本地文件推送到服務器上面來備份。若是不經過密鑰,則像上面同樣還要輸入密碼來交互。能夠設置 ssh 密鑰,生成公鑰和私鑰,這樣在同步時,就不須要輸入密碼了,適合於 shell 腳本。
3.3 經過後臺服務的方式
默認安裝好rsync程序後,並不會自動建立rsync的主配置文件,須要手工來建立,其主配置文件爲 "/etc/rsyncd.conf"。
配置文件 rsyncd.conf 由全局配置和若干模塊配置組成。配置文件的語法爲:
1)模塊以 [模塊名] 開始
2)參數配置行的格式是 name = value ,其中 value 能夠有兩種數據類型:
字符串(能夠不用引號定界字符串)
布爾值(1/0 或 yes/no 或 true/false)
3)以 # 或 ; 開始的行爲註釋
4)\ 爲續行符
全局參數
在文件中 [module] 以外的全部配置行都是全局參數。固然也能夠在全局參數部分定義模塊參數,這時該參數的值就是全部模塊的默認值。
模塊參數
模塊參數主要用於定義 rsync 服務器哪一個目錄要被同步。模塊聲明的格式必須爲 [module] 形式,這個名字就是在 rsync 客戶端看到的名字,相似於 Samba 服務器提供的共享名。而服務器真正同步的數據是經過 path 來指定的。能夠根據本身的須要,來指定多個模塊,模塊中能夠定義如下參數:
a. 基本模塊參數
b. 模塊控制參數
c. 模塊文件篩選參數
d. 模塊用戶認證參數
rsync 認證口令文件的權限必定是 600,不然客戶端將不能鏈接服務器。
rsync 認證口令文件中每一行指定一個 用戶名:口令 對,格式爲:username:passwd
通常來講口令最好不要超過8個字符。若您只配置匿名訪問的 rsync 服務器,則無需設置上述參數。
e. 模塊訪問控制參數
客戶主機列表定義能夠是如下形式:
單個IP地址。例如:192.168.0.1
整個網段。例如:192.168.0.0/24,192.168.0.0/255.255.255.0
可解析的單個主機名。例如:centos,centos.bsmart.cn
域內的全部主機。例如:*.bsmart.cn
"*"則表示全部。
多個列表項要用空格間隔。
f. 模塊日誌參數
設置了"log file"參數時,在日誌每行的開始會添加"%t [%p]"。
可使用的日誌格式定義符以下所示:
%a - 遠程IP地址
%h - 遠程主機名
%l - 文件長度字符數
%p - 該次 rsync 會話的 PID
%o - 操做類型:」send」 或 「recv」
%f - 文件名
%P - 模塊路徑
%m - 模塊名
%t - 當前時間
%u - 認證的用戶名(匿名時是 null)
%b - 實際傳輸的字節數
%c - 當發送文件時,記錄該文件的校驗碼
建立該文件並添加以下內容:
vi /etc/rsyncd.conf uid=root gid=root max connections=4 log file=/var/log/rsyncd.log pid file=/var/run/rsyncd.pid lock file=/var/run/rsyncd.lock secrets file=/etc/rsyncd.passwd hosts allow=192.168.1.0/24 [www] comment= backup web path=/www read only = no exclude=test auth users=work
建立密碼文件,採用這種方式不能使用系統用戶對客戶端進行認證,因此須要建立一個密碼文件,其格式爲 "username:password",用戶名能夠和密碼能夠隨便定義,最好不要和系統賬戶一致,同時要把建立的密碼文件權限設置爲600,這在前面的模塊參數作了詳細介紹。
編輯 secrets file 並保存後賦予 600 權限,若是權限不對,則不能完成同步,以下:
echo "work:abc123" > /etc/rsyncd.passwd chmod 600 /etc/rsyncd.passwd
啓動 rsyncd 服務,以下:
# rsync --daemon --config=/etc/rsyncd.conf
啓動後查看873端口是否啓動,以下:
# netstat-lnp |grep 873
完成以上工做,如今就能夠對數據進行同步了,以下:
rsync -avz --progress work@192.168.1.121::www /databack/experiment/rsync Password: receiving file list ... 6 files to consider ./ files... a 0 100% 0.00kB/s 528:20:41 (1, 50.0% of 6) b 67 100% 65.43kB/s 0:00:00 (2, 66.7% of 6) c 0 100% 0.00kB/s 528:20:41 (3, 83.3% of 6) dd 100663296 100% 37.49MB/s 0:00:02 (4, 100.0% of 6) sent 172 bytes received 98276 bytes 17899.64 bytes/sec total size is 150995011 speedup is 1533.75
發現此時也要輸入密碼才能進行數據同步,此次咱們添加一個選項 --password-file=/tmp/rsync.password ,這時當咱們以work用戶登陸 rsync 服務器同步數據時,密碼將讀取 /tmp/rsync.password 這個文件。這個文件內容只是work用戶的密碼。
# touch /tmp/rsync.password # chmod 600 /tmp/rsync.password # echo "123456" > /tmp/rsync.password
而後執行以下同步命令時就再也不須要輸入密碼了,適合於 shell 腳本:
# rsync -avzP --password-file=/tmp/rsync.password work@172.16.1.135::www /databack/experiment/rsync
綜上
rsync採用主從式構架,在應用上可分爲 PUSH 和 PULL 兩種主要模式,以因應不一樣的環境因素,進而達到部署的目的。
PULL模式
在同一網段的環境下,由備份主機向服務器進行同步並將數據備份過來以完成備份工做。這種模式是最廣泛被採用的部署方式。
如上,由備份主機啓動備份工做,向被備份端要求備份。可將備份時的負載大部分由備份主機承受。固然,PULL模式也支持跨網段或遠端進行同步備份工做,以下圖:
PUSH模式
PUSH模式的執行方式恰好與PULL模式偏偏相反。以下圖所示,在同一網段的環境下,由服務器主動發出同步要求並將數據同步至備份主機上,以完成備份的工做。
在實際中,這種模式一般被採用於較特殊的環境下,例如服務器被部署在防火牆內且沒法由外部連入,所以必須改由服務器主動將數據送至備份主機上。以下圖:
4、Linux 網絡配置
網絡知識包含的內容不少,此處只講解經常使用的設置 ip、設置主機名和設置 DNS 的操做。
4.1 ifconfig 查看網卡 IP
ifconfig 相似於 Windows 中的 ipconfig,後面不加任何選項和參數時,只打印當前網卡IP的信息(如子網掩碼、網關等)。也能夠跟某一個網卡名稱,如 eth0、eth1 等。使用 -a 選項,能夠列出全部的網卡信息。
查看幫助後有以下顯示:
If no arguments are given, ifconfig displays the status of the cur-rently active interfaces. If a single interface argument is given, it displays the status of the given interface only; if a single -a argu-ment is given, it displays the status of all interfaces, even those that are down. Otherwise, it configures an interface.
網卡的配置的文件爲 /etc/sysconfig/network-scripts/ifcfg-eth0,若是是網卡 eth1,則配置文件是/etc/sysconfig/network-scripts/ifcfg-eth1。修改配置文件後可使用 "service network restart" 來重啓網卡。
4.2 給一個網卡設定多個 IP
在 Linux 系統中,網卡是能夠設定多重 IP 的,必定要注意 DEVICE 要寫成 "eth0:1",以下:
[root@ryan ~]# cd /etc/sysconfig/network-scripts [root@ryan network-scripts]# cp ifcfg-eth0 ifcfg-eth0\:1
修改 ifcfg-eth0:1 的配置:
[root@ryan network-scripts]# vim ifcfg-eth0\:1 DEVICE=eth0 HWADDR=00:0C:29:3C:83:B1 TYPE=Ethernet UUID=56bf1079-0ba8-4227-ada7-b574493732f4 ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=static IPADDR=192.168.1.122 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 DNS1=114.114.114.114 DNS2=8.8.8.8
而後重啓網絡服務:
[root@ryan network-scripts]# service network restart
再次查看網卡IP,以下:
[root@ryan network-scripts]# ifconfig eth0 Link encap:Ethernet HWaddr 00:0C:29:3C:83:B1 inet addr:192.168.1.121 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe3c:83b1/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:15703 errors:0 dropped:0 overruns:0 frame:0 TX packets:1800 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1103283 (1.0 MiB) TX bytes:247293 (241.4 KiB) eth0:1 Link encap:Ethernet HWaddr 00:0C:29:3C:83:B1 inet addr:192.168.1.122 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
能夠看到多了一個 eth0:1。
4.3 查看網卡鏈接狀態
[root@ryan network-scripts]# mii-tool eth0
eth0: negotiated 100baseTx-FD, link ok
"link ok" 說明網卡爲鏈接狀態。若是顯示 "no link" 說明網卡壞了或者沒有鏈接網線。
4.4 更改主機名
安裝完系統以後,主機名默認爲 localhost,使用 hostname 命令能夠查看 Linux 的主機名。以下:
[root@ryan network-scripts]# hostname ryan
CentOS 6.x 修改主機名的配置文件爲 /etc/sysconfig/network:
[root@ryan network-scripts]# vim /etc/sysconfig/network NETWORKING=yes HOSTNAME=ryan
CentOS 7.x 修改主機名的配置文件爲 /etc/hostname。
4.5 設置 DNS
DNS 用來解析域名,Linux 下配置域名解析服務器的配置文件爲 /etc/resolv.conf:
[root@ryan network-scripts]# cat /etc/resolv.conf # Generated by NetworkManager nameserver 114.114.114.114 nameserver 8.8.8.8
resolv.conf 有固定的格式,必定要寫成 "nameserver IP" 的格式。
上面的是配置域名解析服務器,也能夠在本地直接配置域名解析,配置文件爲 /etc/hosts,手動添加 IP 和域名的映射關係,通常做爲臨時域名解析。以下:
[root@ryan ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.1.111 www.baidu.com
保存文件以後,再 ping www.baidu.com 就會返回 192.168.1.111的地址了,表示已經映射成功了。
/etc/hosts 的格式很簡單,每一行爲一條記錄,分紅兩部分,第1部分爲 IP,第2部分是域名,能夠配置多個域名,並用空格分開,如上四個域名:localhost localhost.localdomain localhost4 localhost4.localdomain4 都映射到 127.0.0.1。而且 /etc/hosts 文件的域名解析優先級高於配置的域名解析服務器文件 /etc/resolv.conf 的優先級。
附錄:
參考以下: