<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
利用rsync結合cron計劃任務實現:
rsync -av --delete /data/ 10.0.0.12:/back -a:保留檔案屬性 -v:顯示過程 -delete:如果原始檔沒有的,目標檔案裡面有,就把目標檔案裡面的刪除掉
前提:
檔案發生髮生變化的時候就觸發同步,但是觸發同步需要一個依賴檔案狀態變化的功能。
inotify是系統核心的一個監控服務,屬於作業系統核心的一個特有機制,用於監控檔案的資訊變化。
檢視核心是否支援inotify;
[root@LAP1 data]# ls -l /proc/sys/fs/inotify ls: cannot access ' ': No such file or directory /proc/sys/fs/inotify: total 0 -rw-r--r-- 1 root root 0 Oct 24 23:39 max_queued_events -rw-r--r-- 1 root root 0 Oct 24 23:39 max_user_instances -rw-r--r-- 1 root root 0 Oct 24 23:39 max_user_watches
inotify核心引數:
max_queued_events:inotify 事件佇列最大長度,如值太小會出現 Event Queue Overflow 錯誤,預設值:16384, 生產環境建議調大,比如:327679 max_user_instances:每個使用者建立inotify範例最大值,預設值:128 max_user_watches:可以監視的檔案的總數量(inotifywait 單程序),預設值:8192,建議調大
說明:
proc裡面的引數可以通過sysctl工具來進行更改。
inotifywait [ options ] file1 [ file2 ] [ file3 ] [ ... ]
選項:
-m, --monitor 始終保持事件監聽 -d, --daemon 以守護行程方式執行,和-m相似,配合-o使用 -r, --recursive 遞迴監控目錄資料資訊變化 -q, --quiet 輸出少量事件資訊 --exclude <pattern> 指定排除檔案或目錄,使用擴充套件的正規表示式匹配的模式實現 --excludei <pattern> 和exclude相似,不區分大小寫 -o, --outfile <file> 列印事件存到檔案中,注意:使用絕對路徑 -s, --syslogOutput 傳送錯誤到syslog相當於標準錯誤輸出 --timefmt <fmt> 指定時間輸出格式 --format <fmt> 定義輸出格式;即實際監控輸出內容 -e 指定監聽指定的事件,如果省略,表示所有事件都進行監聽
例如:
# 10.0.0.11 [root@LAP1 data]# cat file1 [root@LAP1 data]# echo hello > file1 [root@LAP1 data]# ll file1 -rw-r--r-- 1 root root 6 Oct 24 23:50 file1 [root@LAP1 data]# chmod 666 # 10.0.0.11 [root@LAP1 data]# inotifywait -m file1 Setting up watches. Watches established. file1 OPEN file1 CLOSE_NOWRITE,CLOSE file1 MODIFY file1 OPEN file1 MODIFY file1 CLOSE_WRITE,CLOSE file1 ATTRIB
inotifywait -e 選項指定的事件型別
create #檔案或目錄建立 delete #檔案或目錄被刪除 modify #檔案或目錄內容被寫入 attrib #檔案或目錄屬性改變 close_write #檔案或目錄關閉,在寫入模式開啟之後關閉的 close_nowrite #檔案或目錄關閉,在唯讀模式開啟之後關閉的 close #檔案或目錄關閉,不管讀或是寫模式 open #檔案或目錄被開啟 lsdir #瀏覽目錄內容 moved_to #檔案或目錄被移動到監控的目錄中 moved_from #檔案或目錄從監控的目錄中被移動 move #檔案或目錄不管移動到或是移出監控目錄都觸發事件 access #檔案或目錄內容被讀取 delete_self #檔案或目錄被刪除,目錄本身被刪除 unmount #取消掛載
inotifywait 的--timefmt 時間格式
%Y #年份資訊,包含世紀資訊 %y #年份資訊,不包括世紀資訊 %m #顯示月份,範圍 01-12 %d #每月的第幾天,範圍是 01-31 %H #小時資訊,使用 24小時制,範圍 00-23 %M #分鐘,範圍 00-59 %S #秒,範例 0-60
inotifywait 的 --format 格式定義
%T #輸出時間格式中定義的時間格式資訊,通過 --timefmt option 語法格式指定時間資訊 %w #事件出現時,監控的檔案或目錄的名稱資訊,相當於dirname %f #事件出現時,將顯示監控目錄下觸發事件的檔案或目錄資訊,否則為空,相當於basename %e #顯示發生的事件資訊,不同的事件預設用逗號分隔 %Xe #顯示發生的事件資訊,不同的事件指定用X進行分隔
例如:監控/data/目錄的變化
[root@CentOS8 data]# inotifywait -m --timefmt "%Y-%m-%d %H:%M:%S" --format="%T %w---%f event: %;e" /data Setting up watches. Watches established. 2022-10-24 17:12:57 /data/--- event: OPEN;ISDIR 2022-10-24 17:12:57 /data/--- event: ACCESS;ISDIR 2022-10-24 17:12:57 /data/--- event: CLOSE_NOWRITE;CLOSE;ISDIR 2022-10-24 17:13:06 /data/---file3 event: CREATE 2022-10-24 17:13:06 /data/---file3 event: OPEN 2022-10-24 17:13:06 /data/---file3 event: ATTRIB 2022-10-24 17:13:06 /data/---file3 event: CLOSE_WRITE;CLOSE
區別:
前兩者的本質是通過本地或遠端shell,而第3種方式則是讓遠端主機上執行rsyncd服務,使其監聽在一個埠上,等待使用者端的連線。
本地模式:
rsync [OPTION...] SRC... [DEST]
例如:
[root@LAP1 data]# rsync file1 file111 [root@LAP1 data]# ls file1 file11 file111 file2
基於傳統的ssh協定使用格式:
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST] Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
例如:
rsync -av --delete /data/ 10.0.0.12:/back #不寫使用者名稱預設使用的就是當前主機使用的使用者
作為一個獨立服務:
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST] rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST] #協定的形式存取,效果等同於上面 Push: rsync [OPTION...] SRC... [USER@]HOST::DEST rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
rsync常用選項:
-v:顯示rsync過程中詳細資訊。可以使用"-vvvv"獲取更詳細資訊。 -a --archive :歸檔模式,表示遞迴傳輸並保持檔案屬性。 -t --times:保持mtime屬性。強烈建議任何時候都加上"-t",否則目標檔案mtime會設定為系統時間,導致下次更新,檢查出mtime不同從而導致增量傳輸無效 --delete :以SRC為主,對DEST進行同步。多則刪之,少則補之
rsync的軟體包:
官方網站: http://rsync.samba.org/
軟體包:rsync,rsync-daemon(CentOS 8)
服務檔案:/usr/lib/systemd/system/rsyncd.service
組態檔:/etc/rsyncd.conf
埠:873/tcp
rsync即可以作為伺服器端,也可以作為使用者端程式。
#在備份伺服器啟動 rsync 程序 [root@bakup_server ~]# rsync --daemon #--daemon選項表示啟動為守護行程 Failed to parse config file: /etc/rsyncd.conf #必須要有這個組態檔才能啟動成功 [root@bakup_server ~]# touch /etc/rsyncd.conf #需要建立這個組態檔才能正常啟動 [root@bakup_server ~]# rsync --daemon #啟動rsync守護行程 [root@bakup_server ~]# ss -ntl #守護行程啟動後會監聽873埠 State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 5 0.0.0.0:873 0.0.0.0:* #設定rsync伺服器的共用資訊 [root@bakup_server ~]# cat /etc/rsyncd.conf #等號之間可以有空格 [backup] #定義存放資料共用的名字 path = /bakup #真實的路徑,存放共用檔案的路徑 (利用rsync將這個目錄共用出去,共用出去的名字叫做bakup) read only = no #指定可讀寫,預設唯讀 [root@bakup_server ~]# rsync --daemon #更改問組態檔以後需要重新開啟守護行程才會生效 [root@bakup_server ~]# setfacl -m u:nobody:rwx /bakup/ #指定目錄給nobody許可權,預設使用者以nobody存取此目錄 使用使用者端連線rsync備份伺服器: #格式 rsync rsync://host 或者 rsync host:: 使用者端檢視伺服器的情況: [root@data_server ~]# rsync rsync://10.0.0.12 #以協定的形式存取 backup #共用出來的名字 [root@data_server ~]# rsync 10.0.0.12:: #以服務的形式存取 backup #實現使用者端將檔案拷貝到rsync共用的目錄中 注意:傳輸的時候不管以誰的身份,都會對映為nobody,所以不用寫使用者名稱都行 [root@data_server ~]# rsync /root/anaconda-ks.cfg root@10.0.0.12::backup [root@bakup_server bakup]# ll total 8 -rw------- 1 nobody nobody 1526 Oct 24 17:48 anaconda-ks.cfg -rw-r--r-- 1 nobody nobody 658 Oct 24 17:49 fstab
rsync-daemon:安裝這個軟體包以後會提供一個service服務,它會監聽自己的獨立埠
[root@bakup_server ~]# yum install rsync-daemon Installed: rsync-daemon-3.1.3-9.el8.noarch [root@bakup_server ~]# systemctl enable rsyncd.service Created symlink /etc/systemd/system/multi-user.target.wants/rsyncd.service → /usr/lib/systemd/system/rsyncd.service.
說明:
rsync預設傳輸檔案的時候不需要驗證
啟用rsync的驗證功能的方法:
[root@backup-centos8 ~]#dnf -y install rsync-daemon #安裝服務的時候自動建立rsync伺服器的組態檔 [root@centos8 ~]#vi /etc/rsyncd.conf uid = root #遠端使用者對映到本機的使用者,預設為nobody 指定以哪個使用者來存取共用目錄,將之指定為生成的檔案所有者,預設為nobody gid = root #預設為nobody #port = 874 #可指定非標準埠,預設873/tcp #use chroot = no max connections = 0 #不限制最大連線數 ignore errors #如果有些錯誤,就跳過這些錯誤 exclude = lost+found/ #跳過指定的目錄,不去複製 log file = /var/log/rsyncd.log # 紀錄檔所在位置 pid file = /var/run/rsyncd.pid # 存放程序的pid檔案 lock file = /var/run/rsyncd.lock # 存放鎖檔案 reverse lookup = no # 拒絕反向解析,不把ip解析為主機名 #hosts allow = 10.0.0.0/24 # 允許連線的主機 [backup] #每個模組名對應一個不同的path目錄,如果同名後面模組生效 共用名 path = /data/backup/ #共用的真實路徑 comment = backup dir #描述資訊 read only = no #預設是yes,即唯讀 auth users = rsyncuser #預設anonymous可以存取rsync伺服器 用於驗證的賬號,只有這個賬號才能去存取 secrets file = /etc/rsync.pas #存放密碼的檔案 格式: 使用者名稱: 密碼
例如:實現密碼驗證
[root@CentOS8 ~]# yum install rsync-daemon [root@CentOS8 ~]# systemctl enable rsyncd --now [root@CentOS8 ~]# cat /etc/rsyncd.conf uid = root gid = root max connections = 0 ignore errors exclude = lost+found/ log file = /var/log/rsyncd.log pid file = /var/run/rsyncd.pid lock file = /var/run/rsyncd.lock reverse lookup = no [backup] path = /data/backup/ comment = backup dir read only = no auth users = tom secrets file = /etc/rsync.pas [root@CentOS8 ~]# systemctl restart rsyncd.service [root@CentOS8 ~]# mkdir /data/backup/ -p [root@CentOS8 ~]# echo "tom:redhat" > /etc/rsync.pas [root@CentOS8 ~]# chmod 600 /etc/rsync.pas #必須要修改密碼檔案許可權,不然使用者端存取的時候會提示密碼錯誤 使用者端存取: [root@CentOS8 ~]# rsync /etc/fstab tom@10.0.0.12::backup Password: #互動輸入tom的密碼 或者: [root@CentOS8 ~]# rsync /root/anaconda-ks.cfg rsync://tom@10.0.0.12/backup Password: 注意:不指定使用者名稱預設就是當前系統的使用者
可以提前建立一個檔案,將密碼放在檔案中
#非互動式檢視共用目錄 [root@CentOS8 ~]# echo "redhat" >/etc/rsync.pas #使用者端存放rsync的密碼資訊 [root@CentOS8 ~]# chmod 600 /etc/rsync.pas #密碼檔案許可權修改(必須,不然會報錯) 測試: [root@CentOS8 ~]# rsync --password-file=/etc/rsync.pas /root/file111 rsync://tom@10.0.0.12/backup
範例:inotify+rsync+shell 指令碼實現實時資料同步
資料伺服器:存放資料資訊的伺服器 10.0.0.11 備份伺服器:存放備份資訊的伺服器 10.0.0.12
思路:利用inotidy監控事件是否發生變化,
[root@CentOS8 ~]# cat inotify_rsync.sh #!/bin/bash SRC='/data/www/' #需要同步的目錄檔案 #注意最後的/ DEST='tom@10.0.0.12::backup' #同步到備份資料器的指定位置 rpm -q rsync &> /dev/null || yum -y install rsync #如果不存在rsync這個工具就安裝它 inotifywait -mrq --exclude=".*.swp" --timefmt '%Y-%m-%d %H:%M:%S' --format '%T %w %f' -e create,delete,moved_to,close_write,attrib ${SRC} | while read DATE TIME DIR FILE; do FILEPATH=${DIR}${FILE} #需要同步的檔案 rsync -az --delete --password-file=/etc/rsync.pas $SRC $DEST && echo "At ${TIME} on ${DATE}, file $FILEPATH was backuped up via rsync" >> /var/log/changelist.log done #通過DATE TIME DIR FILE 這四個變數記錄發生的變化 日期 事件 目錄 檔案
到此這篇關於Linux利用inotify和rsync服務實現資料實時同步的文章就介紹到這了,更多相關Linux資料實時同步內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45