Rsync服務,
第1章 Rsync開篇介紹1.1 rsync的定義
Rsync是一款開源的、快速的、多功能的、可實現全量及增量的本地或遠端資料同步備份的優秀工具。Rsync軟體適用於unix/linux/windows等多種作業系統平台
① 全量備份:第一次傳輸資料過程中使用全量備份,將全部資料進行傳輸覆蓋
② 增量備份:在第一次傳輸完畢後再進行傳輸使用增量備份,只傳輸差異部分資料
1.2 rsync的簡介
Rsync英文全稱為Remote synchronization, Rsync具有可使本地和遠程兩台主機之間的資料快速複製同步鏡像、遠程備份的功能,在本地主機的不同分區或目錄之間全量及增量的複製資料。另外,利用Rsync還可以實現刪除檔案和目錄的功能。
Centos5,Rsync2.x對比方法,把所有的檔案對比一遍,然後在進行同步。
Centos6,Rsync3.x對比方法,一邊比對差異,一邊對差異的部分進行同步。
#查看當前虛擬機器系統中rsync版本資訊
1 [root@backup ~]# rsync --version2 3 rsync version 3.0.6 protocol version 304 5 Copyright (C) 1996-2009 by Andrew Tridgell, Wayne Davison, and others.6 7 Web site: http://rsync.samba.org/
#查看用戶端man rsync
#查看服務端配置man rsyncd.conf
1.3 實現差異複寫的原理
1.串連兩台伺服器,確認兩台伺服器之間可以正常進行資料傳遞
2.利用演算法檢測目標主機與當前主機資料資訊是否一致
3.確認無誤將增量變化的資料進行傳遞(預設情況)
在同步備份資料時,預設Rsync通過其獨特的“quick check”演算法,僅同步大小或者最後修改時間發生變化的檔案或目錄,當然也可以根據許可權,屬主等屬性的變化同步,但需要指定相應的參數,甚至可以實現只同步一個檔案裡有變化的內容部分。
1.4 rsync的實現方法介紹
具有使本地和遠程兩台主機之間的資料快速複製同步鏡像,遠程備份功能,可以在本地主機的不同分區或目錄之間全量及增量的複製資料。
類似的命令(1v4):scp cp ls rm [與scp cp命令不同的是rsync實現差異複寫或同步]
1.5 rsync特性總結說明1.5.1 支援拷貝普通檔案與特殊檔案如連結檔案,裝置等1.5.2 可以有排除指定檔案或目錄同步的功能,相當於打包命令tar的排除功能
1 tar zcvf backup_1.tar.gz /opt/data -exclude=oldboy
說明:在打包/opt/data時就排除了oldboy命名的目錄和檔案
1.5.3 可以做到保持原檔案或目錄的許可權、時間(訪問/修改/建立)、軟永久連結、屬主、組等所有屬性均不改變-p1.5.4 可實現增量同步處理,既只同步發生變化的資料,因此資料轉送效率很高(tar -N)
# 將備份/home目錄自2008-01-29以來修改過的檔案
1 tar-N 2008-01-29 -zcvf /backups/inc-backup_$(date +%F).tar.gz /home
# 將備份/home目錄昨天以來修改過的檔案
1 tar-N $(date -d yesterday "+%F") -zcvf /backups/inc-backup_$(date +%F ).tar.gz /home
# 添加檔案到已經打包的檔案(對壓縮檔不起作用)
1 tar -rf all.tar *.gif
說明:這條命令是將所有.gif的檔案增加到打包的all.tar裡面去。-r表示增加檔案
1.5.5 可以使用rcp、rsh、ssh等方式來配合進行隧道加密傳輸檔案(rsync本身不對資料加密)1.5.6 可以通過socket(進程方式)傳輸檔案和資料(服務端和用戶端)[重點掌握****]1.5.7 支援匿名的或認證(無需系統使用者)的進程模式傳輸,可實現方便安全的進行資料備份及鏡像1.6 rsync軟體的優缺點
rsync優點:
1.增量備份,支援socket(daemon),集中備份(支援推拉,都是以用戶端為參照物)
2.遠程Shell通道模式還可以加密(SSH)傳輸,socket(daemon)需要加密傳輸,可以利用vpn服務或ipsec服務
rsync缺點:
1.大量小檔案即時同步的比對時間較長,有時候同步過程中,rsync進程可能會停止
2.同步10G這樣的大檔案有時也會出問題,未完整同步前是隱藏檔案,可以通過快傳--partial等參數實現
3.一次性遠程拷貝可以用scp,大量小檔案要達成一個包再拷貝
第2章 Rsync企業工作情境說明2.1 利用定時任務cron+rsync方式實現資料同步
同步網站內部技術人員資料資訊,定時同步設定檔rc.local
說明:定時任務最小周期為1分鐘
2.2 利用即時任務cron+rsync方式實現資料同步(解決伺服器單點故障)
同步網站外部存取使用者資料資訊,即時同步方式sersync+rsync;inotify+rsync;lrsyncd+rsync
2.3 *生產情境叢集架構伺服器備份方案項目(上機)
藉助crond+rsync把客戶服務器資料同步到備份伺服器
全網伺服器資料備份解決方案提出及負責實施200x.03-200x.09
1、針對公司重要資料備份混亂狀況和領導提出備份全網資料的解決方案
2、通過本地打包備份,然後Rsync結合inotifg應用把全網資料統一備份到一個固定儲存伺服器,然後在儲存伺服器上通過指令碼檢查並警示管理員備份結果
3、定期將IDC機房的資料備份放入公司內部伺服器,防止機房地震及火災問題導致資料丟失
第3章 Rsync工作方式介紹3.1 本地主機間同步方式
Local: rsync [OPTION...] SRC... [DEST]
3.1.1 執行個體
1 [root@backup ~]# rsync /etc/hosts /opt/
3.2 通過ssh遠程隧道方式
Access via remote shell:
拉Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
推Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
3.2.1 文法說明
1) Rsync為同步的命令
2) [OPTION...]為同步時的參數選項
3) [USER@]HOST...為Rsyng同步的遠端串連使用者和主機地址;
[USER@]表示資料轉送到遠程伺服器上時傳輸資料的使用者的身份資訊;
HOST表示遠程主機資訊(IP地址資訊 主機名稱資訊)
4) SRC為源,即待拷的分區、檔案或目錄等,和HOST之間用一個冒號串連
[遠程伺服器的資料資源(拉);本機伺服器的資料資源(推)]
5) [DEST]即目的分區(目的地)、檔案或目錄等
[表示本地目錄或檔案資訊(拉);遠程目錄或檔案資訊(推)]
拉取(get),表示從遠端主機把資料同步到執行命令的本地主機相應目錄;
推送(put),表示從本地主機執行命令把本地的資料同步到遠端主機指定目錄下。
3.2.2 執行個體
1.檔案
1 #拉[Pull]2 [root@backup ~]# rsync -rp root@172.16.1.31:/opt/hosts /etc/3 4 #推[Push]5 [root@backup ~]# rsync -rp /etc/hosts root@172.16.1.31:/opt #這裡預設目前使用者就是root,可以省略,即rsync -rp /etc/hosts 172.16.1.31:/opt
2.目錄
1 #推2 [root@backup ~]# rsync -rp /etc/sysconfig root@172.16.1.31:/opt/ #表示把目錄本身及子檔案推送過去3 4 [root@backup ~]# rsync -rp /etc/sysconfig/ root@172.16.1.31:/opt/ #表示只把目錄下面的內容推送過去(目錄本身不存在)
3.2.3 rsync參數匯總說明
參數 |
參數說明 |
-v |
詳細模式輸出,傳輸時的資料等資訊 |
-z |
傳輸時以壓縮的形式以提高傳輸效率 --compress-level-NUM可按層級進行壓縮,區域網路可不用壓縮 |
-a |
歸檔模式,表示以遞迴方式傳輸檔案,並保持所有檔案屬性,等於-rlptgoD |
-r |
對子目錄以遞迴模式處理,及目錄下的所有目錄都同樣傳輸 |
-t |
保持檔案時間資訊 |
-o |
保持檔案屬主資訊 |
-p |
保持檔案許可權 |
-g |
保持檔案屬組資訊 |
-l |
保留軟連結 |
-D |
保持裝置檔案資訊 |
-P |
顯示同步的過程及傳輸時的進度等資訊 |
-e |
使用的通道協議,指定替代rsh的shell程式(隧道模式下使用) -e實現指定ssh加密隧道傳輸 [root@nfs01 ~]# rsync -avz -e "ssh -p 22" /etc/hosts 172.16.1.31:/backup |
--exclude=PATTERN |
指定排除不需要傳輸的檔案模式,相當於tar |
--exclude-from=file |
檔案名稱所在的目錄檔案,即可以實現排除多個檔案,相當於tar |
--bwlimit=RATE |
限制I/O頻寬,限速 案例如下 |
--delete |
刪除那些DST中SRC沒有的檔案,從而使目標目錄SRC和來源目錄資料DST一致,即無差異同步資料 |
***保持同步目錄及檔案屬性: -avzP 相當於-vzrtopgDIP |
3.2.3.1 案例:某DBA做資料同步,頻寬佔滿導致使用者無法訪問網站
問題:沒有進行限速設定
1 rsync -avz dbfile 10.0.0.41:/backup
解決方案:
1 rsync -avz --bwlimit=100 dbfile 172.16.1.41:/backup
3.3 ***rsync daemon守護進程方式(需要有服務端和用戶端)
1.規劃
backup伺服器作為rsync服務端
以rsync用戶端伺服器作為參照伺服器,將資料推到rsync服務端
2.部署環境
主機名稱 |
網卡eth0 |
eth1 |
用途 |
backup |
10.0.0.41 |
172.16.1.41 |
rsync服務端 |
nfs01 |
10.0.0.31 |
172.16.1.31 |
rsync用戶端 |
3.3.1 服務端配置-rsync(將服務端配置到backup伺服器上)3.3.1.1 01-查看rsync軟體是否存在
1 rpm -qa rsync
3.3.1.2 02-安裝rsync軟體
1 yum install rsync -y
3.3.1.3 03-編輯rsync軟體設定檔--設定檔參考資料man rsyncd.conf
(編寫好設定檔以便進行後面的步驟)
1 vim /etc/rsyncd.conf 2 3 #設定檔描述資訊 4 #creat by Liu at 2017-10-02 5 ##rsyncd.conf start## 6 #設定檔全域配置(全域變數) 7 uid = rsync #指定rsync服務運行時,向磁碟進行讀取和寫入的操作者 8 gid = rsync 9 use chroot = no #安全相關參數10 max connections = 200 #在同一時間,伺服器串連rsync時最大的串連數11 timeout = 300 #逾時時間定義(s),備份完資料後進行逾時自動切斷串連12 pid file = /var/run/rsyncd.pid #存放進程對應id號的PID檔案13 (01.停止進程更方便;02.判斷服務是否運行)14 lock file = /var/run/rsync.lock #進程的鎖檔案(當兩或多個檔案同時傳輸到一個目的地時,給其中一個檔案加鎖表示等待該檔案處理完畢後再處理另一個檔案)15 log file = /var/log/resyncd.log #程式啟動並執行記錄檔,包括出錯資訊等16 ignore errors #忽略錯誤程式,繼續處理其他檔案17 read only = false #是否唯讀,這裡設定false表示擁有讀寫權限進行傳輸18 list = false #是否可以列表19 hosts allow = 172.16.1.0/24 #准許訪問rsync伺服器的客戶範圍(白名單)20 #hosts deny = 0.0.0.0/32 #禁止訪問rsync伺服器的客戶範圍(黑名單)21 auth users = rsync_backup #不存在的使用者,只用於開門認證22 secrets file = /etc/rsync.password #對不存在的使用者進行串連認證時的密鑰檔案23 24 #設定檔模組配置(局部變數【需要遵循全域變數】)25 [backup] #[模組名稱]以下為局部變數,添加多模組資訊無需重啟,即時生效26 path = /backup #模組資料對應的統一備份位置(路徑)27 comment = "backup dir by oldboy" #注釋,備忘資訊28 ##rsyncd.conf end##
3.3.1.4 04-建立rsync軟體備份目錄的系統管理使用者
1 useradd -s /sbin/nologin -M rsync 2 3 id rsync
3.3.1.5 05-建立rsync配置資訊中的安全認證檔案並修改許可權(secrets file密鑰)
1 echo "rsync_backup:oldboy123" >/etc/rsync.password 2 3 chmod 600 /etc/rsync.password
賦予密碼檔案許可權,只有rsync使用者可以讀寫純文字密碼
3.3.1.6 06-建立rsync配置資訊中的備份目錄並進行授權
1 mkdir -p /backup 2 3 chown -R rsync.rsync /backup
3.3.1.7 07-啟動rsync軟體程式進程以獲得socket資訊(以守護進程的方式)
1 rsync --daemon2 3 ps -ef |grep rsync4 5 #加入開機自啟動6 7 echo "/usr/bin/rsync --daemon" >>/etc/rc.local
至此,服務端配置操作完成
3.3.2 用戶端配置-其他伺服器為用戶端3.3.2.1 01-查看rsync軟體是否存在
1 rpm -qa rsync
3.3.2.2 02-安裝rsync軟體
1 yum install rsync -y
3.3.2.3 03-建立rsync配置資訊中的安全認證檔案
1 echo "oldboy123" >/etc/rsync.password 2 3 chmod 600 /etc/rsync.password
至此,用戶端配置操作完成
3.3.2.4 04-測試rsync軟體在用戶端
Access via rsync daemon:
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
執行個體:互動方式傳輸資料資訊
1 [root@nfs01 ~]# rsync -avz /etc rsync_backup@172.16.1.41::backup #推(本機使用者認證+定義好的模組)2 3 Password:輸入認證使用者的密碼oldboy1234 5 [root@nfs01 ~]# rsync -avz rsync_backup@172.16.1.41::backup/oldboy /tmp #拉(服務端使用者認證)6 7 Password:輸入rsync_backup的密碼
擴充:實現免互動方式rsync傳輸資料資訊(守護進程)
1 #這裡要保證backup目錄下不存在etc 2 3 [root@backup backup]# rsync -avz /etc rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
3.4 rsync知識點補充3.4.1 設定檔內容總結
模組之上內容為全域變數資訊,針對所有模組成效
模組之下內容為局部變數資訊,只針對指定模組生效
說明:無論是全域變數還是局部變數發生變化,都建議重啟rsync服務使配置生效
3.4.2 刪除rsync軟體程式進程
殺手三人組
① kill進程pid號
說明:需要知道進程號資訊,並且在殺死進程後有提示說明
② killall 進程名
說明:殺死進程後有提示說明
1 [root@backup ~]# killall rsync2 3 [root@backup ~]# killall rsync4 5 rsync: no process killed
③ pkill 進程號[模糊殺手,用時需小心]
說明:殺死進程後沒有提示資訊
pkill殺手的特性注釋(以例子說明):
當用pkill殺進程sh指令碼時,遠程服務就會斷開。原因是當pkill殺死sh的同時會連同其他含有sh資訊的進程一同殺死,這裡就是殺死了sshd導致遠程斷開。
附:rsync重啟方式介紹
1 [root@backup ~]# ps -ef |grep rsync 2 3 root 3436 1 0 11:46 ? 00:00:00 rsync --daemon 4 root 3710 1752 0 15:02 pts/1 00:00:00 grep --color=auto rsync 5 6 [root@backup ~]# cat /var/run/rsyncd.pid #查看PID檔案 7 8 3436 9 10 [root@backup ~]# kill `cat /var/run/rsyncd.pid`11 12 [root@backup ~]# kill `cat /var/run/rsyncd.pid` #依舊要多殺幾次13 14 [root@backup ~]# ps -ef |grep rsync15 16 root 3710 1752 0 15:02 pts/1 00:00:00 grep --color=auto rsync17 18 [root@backup ~]# rsync --daemon #實現重啟
3.4.3 設定rsync軟體開機自啟動
法一:配置/etc/rc.local檔案
法二:配置/etc/init.d/目錄
建立指令碼資訊(if case)→設定指令檔許可權→編輯開機檔案參數→加入啟動服務列表
方法三:利用xinetd服務啟動rsync(確定rsync關閉狀態)->有一定影響,盡量不使用
3.4.4 rsync --daemon啟動擴充參數
--daemon #<==表示以守護進程方式啟動rsync服務
--address #<==綁定指定IP地址提供服務
--config=FILE #<==更改設定檔路徑,而不是預設的/etc/rsyncd.conf
--port=PORT #<==更改其他連接埠提供服務,而不是預設的873連接埠
3.4.5 定義變數資訊實現免秘鑰互動
1 [root@nfs01 ~]# export RSYNC_PASSWORD=oldboy123 2 3 [root@nfs01 ~]# rsync -avz /etc/services rsync_backup@172.16.1.41::backup