博文目錄
1、rsync概述
一、rsync命令的基本用法
2、配置rsync
一、配置同步身份驗證的rsync
二、rsync按期同步
三、配置inotify+rsync實時同步算法
rsync(Remote Sync,遠程同步)是一個開源的快速備份工具,能夠在不一樣主機之間鏡像同步整個目錄樹,支持增量備份,保持連接和權限,且採用優化的同步算法,傳輸前執行壓縮,所以很是適用於異地備份、鏡像服務器等應用。rsync的官方站點是http://rsync.samba.org/ 做爲一種經常使用的文件備份工具,rsync每每是Linux和UNIX系統默認安裝的基本組件之一。數據庫
[root@centos01 ~]# rpm -q rsync rsync-3.0.9-18.el7.x86_64
在遠程同步任務中,負責發起rsync同步 操做的客戶機稱爲發起端,而負責響應來自客戶機的rsync同步操做的服務器稱爲同步源。在同步過程當中,同步源負責提供文檔的原始位置,發起端應對該位置具備讀取權限。rsync做爲同步源時以守護進程運行,爲其餘客戶機提供備份源。配置rsync同步源須要創建配置文件rsync.conf,建立備份帳號,而後將rsync程序以守護進程(「--daemon」選項)方式運行。
vim
絕大多數的備份程序要求指定原始位置、目標位置,rsync命令也同樣。最簡單的rsync用法相似於cp命令。例如,能夠將文件/etc/fstab、目錄/boot/grub同步備份到/opt目錄下,其中,「-r」選項表示遞歸整個目錄樹,「-l」選項用來備份連接文件。centos
備份的基本格式爲「rsync [選項] 原始位置 目標位置」,其中經常使用的一些命令選項以下:bash
- -r:遞歸模式,包含目錄及子目錄中的全部文件;
- -l:對於符號連接文件仍然複製爲符號連接文件;
- -v:顯示同步過程的詳細信息;
- -a:歸檔模式,保留文件的權限、屬性等信息,等同於組合選項「-rlptgoD」;
- -z:在傳輸文件時進行壓縮;
- -p:保留文件的權限標記;
- -t:保留文件的時間標記;
- -g:保留文件的屬組標記(僅超級用戶使用);
- -o:保留文件的屬主標記(僅超級用戶使用);
- -H:保留硬鏈接文件;
- -A:保留ACL屬性信息;
- -D:保留設備文件及其餘特殊文件;
- --delete:刪除目標位置有而原始位置沒有的文件;
- --checksum:根據校驗和(而不是文件大小、修改時間)來決定是否跳過文件;
[root@centos01 ~]# cp /etc/rsyncd.conf /etc/rsyncd.conf.bak <!--備份rsync主配置文件--> [root@centos01 ~]# vim /etc/rsyncd.conf <!--編輯主配置文件--> uid = nobody <!--管理rsync的用戶--> gid = nobody <!--管理rsync的組--> port 873 <!--rsync的端口號--> pid file = /var/run/rsyncd.pid <!--rsync進程id位置--> dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 <!--同步在壓縮的文件類型--> auth users = bob <!--驗證帳戶--> secrest file = /etc/rsync_user.db <!--密碼數據庫--> address = 192.168.100.10 <!--rsync服務監聽的ip地址--> hosts allow = 192.168.100.0/24 <!--容許192.168.100.0網段訪問--> read only = yes <!--容許讀取權限--> [root@centos01 ~]# rsync --daemon <!--啓動rsync服務--> [root@centos01 ~]# netstat -anptu | grep rsync <!--監聽rsync服務是否正常啓動--> tcp 0 0 192.168.100.10:873 0.0.0.0:* LISTEN 1422/rsync [root@centos01 ~]# kill 1422 <!--中止服務使用kill結束進程--> [root@centos01 ~]# vim /etc/rc.d/rc.local <!--設置開機自動啓動rsync服務--> /usr/bin/rsync --daemon <!--rsync啓動服務添加到配置文件中--> [root@centos01 ~]# chmod +x /etc/rc.d/rc.local <!--添加執行權限--> [root@centos01 ~]# mkdir centos7 <!--建立centos7目錄--> [root@centos01 ~]# rsync -alv /mnt/* ./centos7/ <!--將mnt目錄下的文件複製到centos7目錄裏--> [root@centos01 ~]# mkdir benet <!--建立目錄--> [root@centos01 ~]# mkdir xsh <!--建立目錄--> [root@centos01 ~]# echo "11111" > ./benet/1.txt <!--寫入數據--> [root@centos01 ~]# echo "22222" > ./xsh/2.txt <!--寫入數據--> [root@centos01 ~]# rsync -av --delete ./benet/ ./xsh <!--將源benet目錄中數據同步到目錄xsh目錄,刪除xsh目錄中的歷史數據--> sending incremental file list ./ deleting 2.txt 1.txt sent 92 bytes received 34 bytes 252.00 bytes/sec total size is 6 speedup is 0.05 [root@centos01 ~]# cd xsh <!--進入xsh目錄--> [root@centos01 xsh]# ls <!--查看是否同步成功--> 1.txt [root@centos01 ~]# rsync -av ./xsh/ root@192.168.100.20:/ <!--將本地xsh目錄中的數據,同步到遠程主機192.168.100.20的根目錄中--> The authenticity of host '192.168.100.20 (192.168.100.20)' can't be established. ECDSA key fingerprint is SHA256:PUueT9fU9QbsyNB5NC5hbSXzaWxxQavBxXmfoknXl4I. ECDSA key fingerprint is MD5:6d:f7:95:0e:51:1a:d8:9e:7b:b6:3f:58:51:51:4b:3b. Are you sure you want to continue connecting (yes/no)? yes <!--輸入yes--> Warning: Permanently added '192.168.100.20' (ECDSA) to the list of known hosts. root@192.168.100.20's password: <!--輸入密碼--> sending incremental file list ./ 1.txt sent 92 bytes received 34 bytes 19.38 bytes/sec total size is 6 speedup is 0.05 [root@centos02 ~]# cd / <!--進入根目錄--> [root@centos02 /]# ls <!--查看目錄下文件--> 1.txt boot etc lib media opt root sbin sys usr bin dev home lib64 mnt proc run srv tmp var
[root@centos01 ~]# vim /etc/rsync_user.db <!--建立rsync驗證數據庫,帳戶是bob,密碼是pwd@123--> bob:pwd@123 [root@centos01 ~]# chmod 600 /etc/rsync_user.db <!--驗證數據庫文件添加600權限--> [root@centos01 ~]# vim /etc/rsyncd.conf <!--修改rsync主配置文件建立共享--> [accp] <!--同步共享模塊名字--> path = /accp <!--同步物理目錄--> comment = test <!--描述--> auth users bob <!--驗證帳戶--> secrets file = /etc/rsync_user.db <!--驗證的數據庫--> read only = yes <!--容許只讀權限--> [root@centos01 ~]# mkdir /accp <!--建立同步物理目錄--> [root@centos01 ~]# echo "accp.com" > /accp/qq.txt <!--寫入測試數據--> [root@centos01 ~]# rsync -av bob@192.168.100.10::accp ./xsh/ <!--客戶端同步數據,將遠程服務器192.168.100.10的accp數據同步到當前位置的xsh目錄--> receiving incremental file list ./ aa.txt sent 48 bytes received 118 bytes 332.00 bytes/sec total size is 4 speedup is 0.02 [root@centos01 ~]# rsync -av rsync://bob@192.168.100.10/accp ./xsh/ <!--第二種方式同步--> receiving incremental file list ./ aa.txt sent 48 bytes received 118 bytes 332.00 bytes/sec total size is 4 speedup is 0.02 [root@centos01 ~]# cd xsh/ <!--驗證是否同步成功--> [root@centos01 xsh]# ls aa.txt
[root@centos01 ~]# mount /dev/cdrom /mnt/ <!--切換Linux光盤安裝inotify--> mount: /dev/sr0 寫保護,將以只讀方式掛載 [root@centos01 ~]# tar zxvf /mnt/inotify-tools-3.14.tar.gz -C /usr/src/ <!--解壓縮inotify--> [root@centos01 ~]# cd /usr/src/inotify-tools-3.14/ <!--進入inotify目錄--> [root@centos01 inotify-tools-3.14]# ./configure <!--配置inotify--> [root@centos01 inotify-tools-3.14]# make && make install <!--編譯安裝inotify--> [root@centos01 ~]# cat /proc/sys/fs/inotify/max_queued_events <!--查看inotify監控事件隊列--> 16384 [root@centos01 ~]# cat /proc/sys/fs/inotify/max_user_instances <!--查看最多監控實例數--> 128 [root@centos01 ~]# cat /proc/sys/fs/inotify/max_user_watches <!--查看每一個實例最多監控文件數--> 8192 [root@centos01 ~]# vim /etc/sysctl.conf <!--修改inotify配置文件,加大三個參數的值--> fs.inotify.max_queued_events = 16384 fs.inotify.max_user_instances = 1024 fs.inotify.max_user_watches = 1048576 [root@centos01 ~]# sysctl -p <!--更新內核參數--> fs.inotify.max_queued_events = 16384 fs.inotify.max_user_instances = 1024 fs.inotify.max_user_watches = 1048576 [root@centos01 ~]# inotifywait -mrq -e modify,create,delete,move,attrib / accp/ <!--配置一次性監控,監控/accp目錄發生的變化--> [root@centos01 ~]# cd /accp/ <!--進入accp目錄,修改、刪除、建立數據測試是否監控成功--> [root@centos01 accp]# ls aa.txt [root@centos01 accp]# touch 11.txt [root@centos01 accp]# echo "111" > 1.txt [root@centos01 accp]# rm -rf 11.txt [root@centos01 ~]# inotifywait -mrq -e modify,create,delete,move,attrib / accp/ <!--查看監控狀態--> /accp/ CREATE 11.txt /accp/ ATTRIB 11.txt /accp/ CREATE 1.txt /accp/ MODIFY 1.txt /accp/ DELETE 11.txt
[root@centos01 ~]# vim rsync.sh <!--建立編寫實時同步腳本--> #!/bin/bash INW="inotifywait -mrq -e modify,create,delete,move,attrib /accp/" RSYNC="rsync -avzH /accp/ root@192.168.100.20:/baidu/ --delete" $INW | while read DIRECTORY EVENT FILE;do $RSYNC &> /dev/null done [root@centos01 ~]# chmod +x rsync.sh <!--腳本添加執行權限--> [root@centos01 ~]# ssh-keygen -t rsa <!--配置密鑰對--> [root@centos01 ~]# ssh-copy-id -i ./.ssh/id_rsa.pub root@192.168.100.20 <!--上傳ssh客戶端的公鑰到ssh服務器端--> [root@centos01 ~]# netstat -anptu | grep rsync <!--中止rsync服務從新啓動--> tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 7657 tcp6 0 0 :::873 :::* LISTEN 765 [root@centos01 ~]# kill 7657 <!--中止rsync服務--> [root@centos01 ~]# rsync --daemon <!--從新啓動--> [root@centos02 ~]# mkdir baidu <!--服務器端建立baidu目錄--> [root@centos02 ~]# cd baidu/ <!--進入baidu目錄--> [root@centos02 baidu]# echo "111" > 333.txt <!--插入數據--> [root@centos02 baidu]# ls <!--查看--> 333.txt [root@centos01 ~]# ./rsync.sh & <!--執行腳本--> [3] 11160 [root@centos02 ~]# cd /baidu/ <!--服務器端查看baidu目錄是否刪除歷史數據插入客戶端accp目錄下的數據--> [root@centos02 baidu]# ls w.txt [root@centos01 ~]# vim /etc/rc.d/rc.local <!--將rsync實時同步的腳本添加到開機自動啓動配置文件中--> /root/rsync.sh & <!--執行腳本的路徑添加進來--> [root@centos02 ~]# kill 7984 <!--中止rsync服務--> [root@centos02 ~]# rsync --daemon <!--從新啓動-->