小白都會的rsync遠端同步原理及-------(定期同步與rsync+inotify實時同步)實驗
前言
一:理論
1.1:什麼是rsync?有什麼作用
- rsync,全稱為:Remote Sync(遠端同步),是一款開源的快速增量備份工具,可以在不同主機之間映象同步整個目錄樹
- 還支援本地複製,增量備份、保持連線和許可權,或者與其他SSH,rsync主機同步
- 採用優化的同步演算法,傳輸前執行壓縮,因此非常適用於異地備份、映象伺服器等應用
1.2:rsync源伺服器的關係
1.3:rsync在生產環境中解決了哪些問題?
- 內容的一致性 1000 節點 Tomcat網站 (HTML,CSS,JS)
- 網站內容更新 scp 1000次 shell指令碼自動執行
- 解決問題: rsync出現 只需要更新一個節點,其他所有節點內容同步
作用:拉取同步
監控
1.4:rsync實時同步的優點
1.5: rsync配置實時同步的原理
- 跟定期同步有所不同,實時同步是基於發起端對源端的同步,而定期同步是源端對發起端的同步
- 發起端通過inotify監控本地的同步記錄對源端進行同步,而且是一直監控的狀態,只要發起端同步資料夾發生變化,源端也會跟著發生變化
- 侷限性:目前只能針對發起端進行實時同步,源端目前並不能監控自身實時同步發起端
1.6:關於inotify監控
rsync命令的用法
二、定期同步實驗
2.1:配置rsync源伺服器
2.1.1:修改配置檔案
[root@localhost html]# vim /etc/rsyncd.conf
uid = nobody '只能以普通使用者登入'
gid = nobody
use chroot = yes '禁錮家目錄'
address = 20.0.0.26 '源ip'
port 873 'rsync服務埠號'
log file = /var/log/rsyncd.log 'rsync服務日誌檔案'
pid file = /var/run/rsyncd.pid 'rsync服務程式'
hosts allow = 20.0.0.0/24 '白名單:允許這個網段的來同步資料'
[wwwroot] '共享模組'
path = /var/www/html '指定共享目錄'
comment = www.kgc.cn '這就是個註釋'
read only = yes '只讀許可權'
dont compress = *.gz*.tgz*.zip*.z*.Z*.rpm*.deb*.bz2 '這一類的檔案不會被壓縮'
auth users = backuper '同步連線的使用者'
secrets file = /etc/rsyncd_users.db '存放使用者名稱對應密碼的檔案'
2.1.2:建立遠端連線賬戶
[root@localhost html]# vim /etc/rsyncd_users.db
backuper:abc123
chomd 600 /etc/rsyncd_users.db
2.1.3:啟動服務且檢視狀態
//啟動服務
rsync --daemon
//檢視狀態
netstat -ntap | grep rsync
2.1.4:安裝http 生成 /var/www/html 這個目錄
yum -y install httpd
在同步目錄下建立一個 abc的檔案
cd /var/www/html
echo 'this is abc' > abc
2.2:發起端伺服器
格式一:
[root@localhost opt]# rsync -avz backuper@20.0.0.26::wwwroot /opt/ '密碼為abc123'
格式二:
[root@localhost opt]# rsync -avz rsync://backuper@20.0.0.26::wwwroot /opt/
##免互動設定##
設定系統密碼檔案
vi /etc/server.pass
abc123
chmod 600 /etc/server.pass
delete 這種模式會將發起端請求同步的目錄內容,格式化成源伺服器上的同步目錄的內容
rsync -az --delete --password-file=/etc/server.pass backuper@20.0.0.26::wwwroot /opt
會發現發起端伺服器opt目錄中 已經出現了 abc檔案,說明同步成功
三、rsync+inotify實時同步實驗
哪一臺端需要同步就在哪一個端上面做監控
3.1:在發起端配置監控
3.1.1:修改核心配置檔案
[root@localhost ~]# vi /etc/sysctl.conf
fs.inotify.max_queued_events = 16384 '監控事件佇列大小'
fs.inotify.max_user_instances = 1024 '最多監控例項數'
fs.inotify.max_user_watches = 1048576 '每個例項最多監控檔案數'
使核心配置檔案生效
[root@localhost ~]# sysctl -p
3.1.2:安裝inotify
cd 到 opt 目錄下
將inotify-tools-3.14.tar.gz 放入目錄
解壓
tar zxvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
安裝環境
yum install gcc gcc-c++ make -y
編譯安裝
./configure
make && make install
3.1.3:設定監控
安裝httpd服務 監控自己
yum -y install httpd
[root@localhost inotify-tools-3.14]# inotifywait -mrq -e modify,create,move,delete /var/www/html/
輸入了以上這條命令 虛擬機器會長時間進入監控狀態 ,想要繼續操作,遠端控制再開一臺就好了
-mrq 持續遞迴監控並簡要輸出 modify更新
3.1.4:測試能否監控同步記錄
試著在同步目錄建立一個檔案,並且刪除
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# ls
[root@localhost html]# touch aaa
[root@localhost html]# rm -rf aaa
回到監控介面 看看是否監控到了記錄
3.1.5:編寫同步源伺服器的指令碼
vi /opt/inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /var/www/html/"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /var/www/html/ backuper@20.0.0.26::wwwroot"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
if [ $(pgrep rsync | wc -l) -le 0 ] ; then
$RSYNC_CMD
fi
done
[root@localhost opt]# chmod +x inotify.sh
3.1.6:給/var/www/html設定許可權
檢視html許可權是否給滿 (兩臺機子) 否則不能正常同步
[root@localhost opt]# ls -l /var/www/
total 0
drwxr-xr-x 2 root root 6 Nov 4 2018 cgi-bin
drwxrwxrwx 2 root root 17 Oct 23 06:57 html
3.2:回到源伺服器
重新啟動rsync服務
[root@localhost html]# vi /etc/rsyncd.conf
read only = no ##關閉只讀
使其生效
[root@localhost html]# netstat -ntap | grep rsync
tcp 0 0 20.0.0.26:873 0.0.0.0:* LISTEN 19409/rsync
[root@localhost html]# kill -9 19409
[root@localhost html]# netstat -ntap | grep rsync
報錯 還得把一個pid檔案刪除
[root@localhost html]# rsync --daemon
failed to create pid file /var/run/rsyncd.pid: File exists
####解決方案####
[root@localhost html]# cd /var/run/
[root@localhost run]# ls
abrt crond.pid gdm lsm rpcbind sshd.pid user
alsactl.pid cron.reboot gssproxy.pid lvm rpcbind.lock sudo utmp
atd.pid cryptsetup gssproxy.sock lvmetad.pid rpcbind.sock svnserve vmware
auditd.pid cups httpd mdadm rsyncd.pid sysconfig xtables.lock
avahi-daemon dbus initramfs mount samba syslogd.pid
blkid dmeventd-client ksmtune.pid netreport sepermit systemd
certmonger dmeventd-server libvirt NetworkManager setrans tmpfiles.d
chrony ebtables.lock libvirtd.pid plymouth setroubleshoot tuned
chronyd.pid faillock lock ppp sm-notify.pid udev
console firewalld log radvd spice-vdagentd udisks2
[root@localhost run]# cat rsyncd.pid ###上次的程式號沒有刪除
19409
[root@localhost run]# rm -rf rsyncd.pid ##刪除程式號
重新開啟rsync 並且生成新的pid
[root@localhost run]# rsync --daemon
[root@localhost run]# netstat -ntap | grep rsync
tcp 0 0 20.0.0.26:873 0.0.0.0:* LISTEN 76390/rsync
3.3:回到發起端 執行指令碼
[root@localhost opt]# ./inotify.sh '正在執行監控'
然後再開一臺遠端控制
在/var/www/html下新建一個文字
[root@localhost html]# echo "this is test" > 333.txt
到源伺服器中的同步目錄檢視是否已經同步備份
[root@localhost html]# cd /var/www/html
[root@localhost html]# ll
最終結果如下圖
發起端
源端
已成功實時同步
以上就是本次實驗的全部內容了,若有寫的不好的地方,還請多多指教,哈哈!
相關文章
- rsync+inotify實時同步
- rsync+inotify資料的實時同步
- 資料同步——rsync遠端同步
- rsync遠端同步
- rsync實時同步
- rsync 守護程式及實時同步
- rsync+inotify實現實時同步(小業務場景解決方案)
- flink sql 實時同步及離線同步SQL
- 超實用!!rsync分散式 + inotify監控實時同步分散式
- Linux 實現本、異地遠端資料實時同步功能Linux
- 【DATAGUARD】Dataguard遠端同步配置最佳實踐
- 與遠端倉庫保持同步
- linux 利用rsync實現檔案增量同步Linux
- rsync 同步目錄
- 資料同步rsync
- Rsync資料同步
- 非同步通知實驗非同步
- 時間同步協議NTP - 原理&實踐協議
- WebRTC 音視訊同步原理與實現Web
- 實時同步服務
- 綜合架構-5 實時同步服務-rsync+crond+inotify架構
- GBase RTSync實時同步之設定按組同步
- 【RocketMQ】主從同步實現原理MQ主從同步
- Oracle實時同步技術Oracle
- Git同步遠端fork的專案Git
- Node中非同步和同步的實現非同步
- 同步方法及同步塊
- Mysql資料實時同步實踐MySql
- C#非同步程式設計:原理與實踐C#非同步程式設計
- tornado原理介紹及非同步非阻塞實現方式非同步
- 什麼是資料實時同步,為什麼資料實時同步很重要
- NTP時間同步伺服器(時鐘同步)工作原理介紹伺服器
- Linux 檔案同步工具之 rsyncLinux
- 使用rsync同步網路備份
- Redis 非同步客戶端選型及落地實踐Redis非同步客戶端
- 在Linux中,rsync 同步資料時,如何過濾出所有.txt的檔案不同步?Linux
- java同步與非同步Java非同步
- 小白QT tableView實時修改同步到QSqlTableModel MODEL 即時修改資料庫QTViewSQL資料庫