文章目錄
前言
一:理論
1.1:什麼是rsync?有什麼作用
- rsync,全稱爲:Remote Sync(遠程同步),是一款開源的快速增量備份工具,可以在不同主機之間鏡像同步整個目錄樹
- 還支持本地複製,增量備份、保持連接和權限,或者與其他SSH,rsync主機同步
- 採用優化的同步算法,傳輸前執行壓縮,因此非常適用於異地備份、鏡像服務器等應用
1.2:rsync源服務器的關係
二:實驗
2.1:rsync命令集錦
-
1、啓動rsync服務:
rsync --daemon
-
2、關閉rsync服務:
kill $(cat /var/run/rsyncd.pid)
-
3、同步本地文件系統數據:rsync [選項] 原始位置 目標位置
例如: rsync /etc/fstab /opt '//同步本機的fstab文件到opt目錄' rsync -rl /boot/grub /opt '//同步本機的grub目錄到opt目錄' '//如果想要在/opt目錄下也創建一個boot目錄,那麼命令需要爲:rsync -R rl /boot/grub /opt ' 常用選項: -a:歸檔模式,遞歸併保留對象屬性,等同於 -rlptgoD -r 對子目錄以遞歸模式處理,主要是針對目錄來說的,如果單獨傳一個文件不需要加-r,但是傳輸的是目錄必須加-r選項 -l 保留軟鏈接 -p 保持文件權限 -v:顯示同步過程的詳細(verbose)信息 -z:在傳輸文件時進行壓縮(compress) -H:保留硬連接文件 -A:保留ACL屬性信息 --delete:刪除"目標"中"源"沒有的文件 --checksum:根據對象的校驗和來決定是否跳過文件 --progress 在同步的過程中可以看到同步的過程狀態,比如統計要同步的文件數量、同步的文件傳輸速度等等 路徑的格式可以是本地路徑,也可以是使用user@host:path或user@host::path的遠程路徑,如果主機和path路徑之間使用單個冒號隔開,表示使用的是遠程shell通信方式,而使用雙冒號隔開的則表示的是連接rsync daemon
-
4、下行同步的兩種方式(使用客戶端將rsync服務器下的wwwroot共享模塊下的內容同步到本地的/opt目錄下(共享模塊下的真實共享路徑需要對other用戶具有 ‘r’ 權限))
-
(1):命令格式
用戶名@主機地址::共享模塊名
例如:
[root@rsyncClient ~]# rsync -avz [email protected]::wwwroot /opt
-
(2):命令格式:
rsync://用戶名@主機地址/共享模塊名
例如:
[root@slave opt]# rsync -avz rsync://[email protected]/wwwroot /root
-
-
5、rsync通過ssh的方式同步
- 命令與平常的scp命令類似
- 例如:將本地/opt/abc.txt上傳到目標服務器/opt目錄:
rsync -avz /opt/abc.txt [email protected]:/opt
- 例如:將目標服務器/opt/qwe.txt文件下載到本地/opt目錄下:
rsync -avz [email protected]:/opt/qwe.txt /opt
2.2:實驗環境
-
VMware軟件
-
主機名 IP地址 安裝服務 系統版本 master 192.168.233.131 rsync,httpd centos7.4 slave 192.168.233.133 rsync,inotify-tools centos7.4
-
2.3:實驗拓撲圖
2.4:實驗過程
2.4.1:開局優化
-
1、修改IP地址,操作相同,僅展示master的操作
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static '//改爲static' DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 UUID=0f49a612-24ff-4410-8185-c13a60922cdc DEVICE=ens33 ONBOOT=yes IPADDR=192.168.233.131 '//添加下面三個IP地址' NETMASK=255.255.255.0 GATEWAY=192.168.233.2 DNS1=8.8.8.8 [root@localhost ~]# systemctl restart network '//另一臺IP地址修改爲192.168.233.133'
-
2、關閉防火牆與核心防護功能,兩臺主機都要做
[root@localhost ~]# systemctl stop firewalld '//關閉防火牆' [root@localhost ~]# systemctl disable firewalld '//禁止防火牆開機自啓' Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service. Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service. [root@localhost ~]# setenforce 0 '//關閉核心防護' [root@localhost ~]# vi /etc/sysconfig/selinux '//禁止核心防護開啓自啓' SELINUX=disabled
-
3、修改主機名與主機映射文件,兩臺都做
[root@localhost ~]# hostnamectl set-hostname slave [root@localhost ~]# su [root@slave ~]# vi /etc/hosts 192.168.233.133 slave 192.168.233.131 master [root@slave ~]# ping master '//master主機操作相同,不在贅述'
-
配置本地yum源,兩臺都做
[root@slave ~]# cd /etc/yum.repos.d/ [root@slave yum.repos.d]# mkdir bak [root@slave yum.repos.d]# mv * bak '//備份原有yum文件' mv: 無法將目錄"bak" 移動至自身的子目錄"bak/bak" 下 [root@slave yum.repos.d]# vi local.repo '//創建本地yum文件' [mnt] name=mnt baseurl=file:///mnt gpgcheck=0 enbaled=1 [root@slave yum.repos.d]# mount /dev/sr0 /mnt '//手動掛載光盤' mount: /dev/sr0 寫保護,將以只讀方式掛載 [root@slave yum.repos.d]# vi /etc/fstab '//設置自動掛載' /dev/sr0 /mnt iso9660 defaults 0 0 [root@slave yum.repos.d]# yum clean all '//清理緩存' [root@slave yum.repos.d]# yum makecache '//創建緩存'
2.4.2:配置rsync源服務器
-
安裝httpd與rsync服務
[root@master yum.repos.d]# yum install httpd rsync -y
-
修改rsync配置文件
[root@master yum.repos.d]# vi /etc/rsyncd.conf uid = nobody gid = nobody use chroot = yes '//禁錮在源目錄' address = 192.168.233.131 '//監聽地址' port 873 '//監聽端口號' log file = /var/log/rsyncd.log '//日誌文件位置' pid file = /var/run/rsyncd.pid '//存放進程ID的文件位置' hosts allow = 192.168.233.133 '//允許訪問的客戶機地址' [wwwroot] '//共享模塊名稱' path = /var/www/html '//源目錄的實際路徑' comment = Document Root of www.51xit.top read only =yes '//是否只讀' dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z '//同步時不在壓縮的文件類型' auth users = lisi '//授權賬戶' secrets file = /etc/rsyncd_users.db '//存放賬戶信息的數據文件'
-
創建於用戶密碼文件
[root@master yum.repos.d]# vi /etc/rsyncd_users.db '//創建存放賬戶信息的數據文件' lisi:lisi123 '//採用“用戶名:密碼”的記錄格式,每行一個用戶記錄獨立的賬號數據,不依賴於系統賬號' [root@master yum.repos.d]# chmod 600 /etc/rsyncd_users.db '//給數據文件設置權限' [root@master yum.repos.d]# ll -ld /var/www/html/ '//查看下源目錄的文件權限' drwxr-xr-x. 2 root root 6 8月 4 2017 /var/www/html/
-
啓動rsync服務
[root@master yum.repos.d]# rsync --daemon '//啓動rsync服務,如果要停止這個服務請使用kill $(cat /var/run/rsyncd.pid)' [root@master yum.repos.d]# netstat -ntap |grep rsync tcp 0 0 192.168.233.131:873 0.0.0.0:* LISTEN 4371/rsync
-
在 /var/www/html目錄中,新建文件
[root@master yum.repos.d]# cd /var/www/html/ [root@master html]# ls [root@master html]# touch 111.html [root@master html]# touch 222.html [root@master html]# ls 111.html 222.html '//創建完成後,我們稍後到客戶機上操作,進行驗證'
2.2.3:客戶端配置,本地同步與下行同步
-
安裝rsync服務
[root@slave yum.repos.d]# yum install -y rsync
-
本地文件系統上實現同步,
命令格式:rsync [選項] 原始位置 目標位置 [root@slave yum.repos.d]# cd /opt [root@slave opt]# ls rh [root@slave opt]# rsync /etc/fstab /opt '//將本機的/etc/fstab文件同步到本機/opt下' [root@slave opt]# ls fstab rh [root@slave opt]# rsync -rl /boot/grub /opt '//將本機的/boot/grub目錄同步到本機/opt下' [root@slave opt]# ls fstab grub rh
-
下行同步的兩種方式,密碼是lisi123
[root@slave opt]# mkdir myweb '//方法一' [root@slave opt]# rsync -avzH --delete [email protected]::wwwroot /opt/myweb Password: receiving incremental file list ./ 111.html 222.html sent 98 bytes received 207 bytes 87.14 bytes/sec total size is 0 speedup is 0.00 [root@slave opt]# ls /opt/myweb/ 111.html 222.html '//方法二' [root@slave opt]# rsync -avz rsync://[email protected]/wwwroot /root Password: receiving incremental file list ./ 111.html 222.html sent 98 bytes received 207 bytes 87.14 bytes/sec total size is 0 speedup is 0.00
2.2.4:rsync源的免密交互處理
-
rsync源的免密交互處理
[root@slave opt]# vi /etc/server.pass '//創建密碼文件' lisi123 [root@slave opt]# chmod 600 /etc/server.pass '//給密碼文件權限' [root@slave opt]# rm -rf myweb/* '//先刪除/opt/myweb目錄下的內容用來測試 [root@slave opt]# ls myweb/ [root@slave opt]# rsync -az --delete --password-file=/etc/server.pass [email protected]::wwwroot /opt/myweb '//指定剛剛創建的密碼文件,發現已經不需要輸入密碼了' [root@slave opt]# ls myweb/ 111.html 222.html
-
可以創建週期性任務進行同步源服務器
[root@slave opt]# crontab -e 30 22 * * * /usr/bin/rsync -az --delete --password-file=/etc/server.pass [email protected]::wwwroot /opt/myweb/ '//每天晚上10點半對服務器網站目錄更新一次' [root@slave opt]# systemctl restart crond [root@slave opt]# systemctl enable crond
2.2.5:rsync實時同步
-
源端配置
[root@master html]# vi /etc/rsyncd.conf read only = no '//改爲no' [root@master html]# kill `cat /var/run/rsyncd.pid` '//關閉rsync服務' [root@master html]# netstat -ntap |grep rsync [root@master html]# rsync --daemon '//開啓rsync服務' [root@master html]# netstat -ntap |grep rsync tcp 0 0 192.168.233.131:873 0.0.0.0:* LISTEN 88302/rsync [root@master html]# chmod 777 /var/www/html
-
客戶端配置
[root@slave opt]# cat /proc/sys/fs/inotify/max_queued_events '//監控隊列大小' 16384 [root@slave opt]# cat /proc/sys/fs/inotify/max_user_instances '//最多監控實例數' 128 [root@slave opt]# cat /proc/sys/fs/inotify/max_user_watches '//每個實例最多監控文件數' 8192 [root@slave opt]# vi /etc/sysctl.conf [root@slave opt]# sysctl -p fs.inotify.max_queued_events = 32768 fs.inotify.max_user_instances = 1024 fs.inotify.max_user_watches = 1048576
-
上傳
-
客戶端安裝inotify-tools輔助工具
[root@slave opt]# tar zxf inotify-tools-3.14.tar.gz [root@slave opt]# cd inotify-tools-3.14/ [root@slave inotify-tools-3.14]# yum install gcc gcc-c++ -y [root@slave inotify-tools-3.14]# ./configure [root@slave inotify-tools-3.14]# make && make install
-
重新打開一個終端
[root@slave ~]# inotifywait -mrq -e modify,create,move,delete /opt/myweb '//運行持續監控監控' inotifywait:用於持續監控,實時輸出結果 inotifywatch:用於短期監控,任務完成後再出結果
-
源服務器編輯腳本並啓動
[root@slave inotify-tools-3.14]# vim /opt/inotify.sh [root@slave inotify-tools-3.14]# chmod 777 /opt/myweb/ [root@slave inotify-tools-3.14]# chmod +x /opt/inotify.sh [root@slave inotify-tools-3.14]# cd .. [root@slave opt]# ./inotify.sh '//執行腳本進行監控'
-
重新打開終端,測試rsync上傳同步
[root@slave myweb]# touch 111.html '//客戶機創建文件,刪除文件也可以同步成功' [root@master html]# ll '//服務端查看' 總用量 0 -rw-r--r--. 1 root root 0 3月 24 09:22 111.html '//同步成功' '//查看剛剛運行的腳本監控' rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1052) [sender=3.0.9] '//發現會有這個報錯,但是文件是正常傳過去的,這裏的這個報錯我沒有解決掉,如果有朋友解決了可以私信我或者評論告訴我,多謝!'