正確、有效的備份方案是保障系統及數據安全的重要手段,在服務器中,一般會結合計劃任務、Shell腳原本執行本地備份,爲了進一步提升備份的可靠性,使用異地備份也是很是有必要的。html
好比針對web站點的同步備份,若是想要實現快速、安全、高效的異地備份,就須要使用到——rsync。web
rsync(Remote Sync,遠程同步)是一個開源的快速備份工具,能夠在不一樣主機之間鏡像同步整個目錄樹,支持增量備份,保持連接和權限,且採用優化的同步算法,傳輸前執行壓縮,所以很是適用於異地備份、鏡像服務器等應用。算法
rsync的官方站點:http://rsync.samba.org/ ,目前最新版本是3.1.3,由Wayne Davison.進行維護,做爲一種最經常使用的文件備份工具,rsync每每是Linux和UNIX系統默認安裝的基本組件之一。vim
rsync是一款快速增量備份工具,支持: (1)本地複製; (2)與其餘SSH同步; (3)與rsync主機同步。
在遠程同步任務中,負責發起rsync同步操做的客戶機稱爲發起端,而負責相應來自客戶機的rsync同步操做的服務器稱爲同步源。在同步過程當中,同步源負責提供文檔的原始位置,發起端應對該位置有讀取權限。如圖:
安全
配置rsync源服務器大體分爲三步: (1)創建rsync配置文件; (2)爲備份帳戶建立數據文件; (3)啓動rsync服務。
在CentOS 7系統以前/etc/rsyncd.conf文件默認不存在,CentOS 7開始已經有這樣的文件,而且其中放置了模板參考信息(根據實際狀況編寫須要的內容,注意格式)。服務器
[root@localhost ~]# vim /etc/rsyncd.conf uid = nobody //啓用匿名用戶 gid = nobody use chroot = yes //禁錮在源目錄 address = 192.168.1.1 //監聽地址 port 873 //監聽端口 log file = /var/log/rsyncd.log //日誌文件存放位置 pid file = /var/run/rsyncd.pid //存放進程ID的文件位置 hosts allow = 192.168.1.0/24 //容許訪問的客戶機地址 [wwwroot] //共享模塊名稱 path = /var/www/html //源目錄的實際路徑 comment = aaa //描述(能夠省略) read only = no //是否爲只讀 dont compress = *.gz *.bz2 *.rar *.zip //同步時再也不壓縮的文件類型 auth users = backuper //受權帳戶 secrets file = /etc/rsyncd_users.db //存放帳戶信息的數據文件
基於安全性考慮,對於rsync的同步源最好僅容許以只讀方式作同步。另外,同步能夠採用匿名的方式,只要將其中的「auth users」和「secrets file」配置項去除便可!tcp
根據rsync的配置文件內容,建立帳號數據文件。每行一個用戶,用戶和密碼之間用冒號進行分隔。ide
[root@localhost ~]# vim /etc/rsyncd_users.db backuper:123456
因爲帳號信息採用明文存放,所以須要調整文件權限,避免帳號信息泄露。工具
[root@localhost ~]# chmod 600 /etc/rsyncd_users.db
備份用戶應對源目錄具備讀取權限。優化
[root@localhost ~]# ls -ld /var/www/html drwxr-xr-x. 2 root root 6 11月 15 2016 /var/www/html
[root@localhost ~]# rsync --daemon [root@localhost ~]# netstat -anpt | grep rsync tcp 0 0 192.168.1.1:873 0.0.0.0:* LISTEN 44001/rsync
若是須要重啓rsync服務,須要:
[root@localhost ~]# kill $(cat /var/run/rsyncd.pid) //中止服務 [root@localhost ~]# rsync --daemon //啓動服務
[root@localhost ~]# kill -9 $(cat /var/run/rsyncd.pid)
或者直接使用「netstat -anpt | grep rsync」命令查出進程號,使用「kill 進程號」同樣。
使用第一種方法中止rsync服務必須刪除存放rsync服務進程的文件:
[root@localhost ~]# rm -rf /var/run/rsyncd.pid
配置好rsync同步源服務器以後,客戶端就可使用rsync工具來執行遠程同步了。
rsync命令的選項: -r:遞歸模式,包含目錄及子目錄中全部文件 -l:對於符號連接文件仍然複製爲符號連接文件 -p:保留文件的權限標記 -t:保留文件的時間標記 -g:保留文件的屬組標記(僅超級用戶使用) -o:保留文件的屬主標記(僅超級用戶使用) -D:保留設備文件及其餘特殊文件 -a:歸檔模式,遞歸併保留對象屬性,等同於 -rlptgoD -v:顯示同步過程的詳細(verbose)信息 -z:在傳輸文件時進行壓縮(compress) -H:保留硬鏈接文件 -A:保留ACL屬性信息 --delete:刪除目標位置有而原始位置沒有的文件 --checksum:根據對象的校驗和來決定是否跳過文件
rsync是一款快速增量備份工具,支持:
(1)本地複製;
(2)與其餘SSH同步;
(3)與rsync主機同步。
[root@localhost ~]# rsync /etc/passwd 123.txt //相似於cp命令
[root@localhost ~]# rsync -av root@192.168.1.2:/root/123.txt . root@192.168.1.2's password:
[root@localhost ~]# rsync -avz backuper@192.168.1.1::wwwroot /root 或者 [root@localhost ~]# rsync -avz rsync://backuper@192.168.1.1/wwwroot /root
這兩種命令效果是同樣!
上傳只需將目錄調換順序便可(確保對上傳的目錄具備寫入權限)!
在同步源端輸入如下命令,方可執行寫入權限
[root@localhost ~]# chmod o+w /var/www/html [root@localhost ~]# ls -ld /var/www/html drwxr-xrwx. 2 root root 6 8月 17 16:47 /var/www/html [root@localhost ~]# rsync -avz /root backuper@192.168.1.1::wwwroot
可是在現實工做環境中,備份工做一般是按計劃重複執行的,好比:
[root@localhost ~]# vim /root/123.pass 123456 //任意建立一個文件用於存放rsync受權用戶的密碼信息 [root@localhost ~]# chmod 600 /root/123.pass //必須設定600權限,不然執行時將會報錯 [root@localhost ~]# crontab -e //建立計劃任務 30 22 * * * /usr/bin/rsync -az --delete --password-file=/root/123.pass backuper@192.168.1.1::wwwroot /a //天天晚上22:30執行腳本 [root@localhost ~]# systemctl restart crond //從新啓動crond服務
關於crond計劃任務配置文件的格式(從上到下):