电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Linux利用inotify和rsync服務實現數據實時同步的原理解析

瀏覽:40日期:2023-03-07 14:40:45
目錄
  • 文件定時同步的實現:
  • 文件實時同步的實現:
    • inotify
    • inotify-tools包主要工具:
    • inotifywait 命令:
  • rsync工具
    • rsync有三種工作方式:
  • 兩種方式實現rsync服務器
    • 方式一:通過rsync守護進程的方式實現rsync服務
    • 以獨立服務方式運行rsync并實現驗證功能
      • 工作原理:
  • inotify+rsync+shell 腳本實現實時數據同步

    文件定時同步的實現:

    利用rsync結合cron計劃任務實現:

    rsync -av --delete /data/  10.0.0.12:/back
    -a:保留文件屬性
    -v:顯示過程
    -delete:如果源文件沒有的,目標文件里面有,就把目標文件里面的刪除掉

    文件實時同步的實現:

    前提:

      文件發生發生變化的時候就觸發同步,但是觸發同步需要一個依賴文件狀態變化的功能。

    inotify

      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工具來進行更改。

    inotify-tools包主要工具:

    • inotifywait: 在被監控的文件或目錄上等待特定文件系統事件(open ,close,delete等)發生,常用于實時同步的目錄監控(主要使用的就是這個工具)
    • inotifywatch:收集被監控的文件系統使用的統計數據,指文件系統事件發生的次數統計

    inotifywait 命令:

    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

    rsync工具

    rsync有三種工作方式:

    • 本地模式:本地文件系統上實現同步。命令行語法格式為上述"Local"段的格式
    • 基于傳統的ssh協議,本地主機使用遠程shell和遠程主機通信
    • 作為一個獨立服務,本地主機通過網絡套接字連接遠程主機上的rsync daemon

    區別:

      前兩者的本質是通過本地或遠程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即可以作為服務器端,也可以作為客戶端程序。

    方式一:通過rsync守護進程的方式實現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端口
    StateRecv-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并實現驗證功能

      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 腳本實現實時數據同步

    工作原理:

    • 要利用監控服務(inotify),監控同步數據服務器目錄中信息的變化
    • 發現目錄中數據產生變化,就利用rsync服務推送到備份服務器上

    范例: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數據實時同步內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

    標簽: Linux Apache
    主站蜘蛛池模板: PSI渗透压仪,TPS酸度计,美国CHAI PCR仪,渗透压仪厂家_价格,微生物快速检测仪-华泰和合(北京)商贸有限公司 | 电动葫芦|手拉葫芦|环链电动葫芦|微型电动葫芦-北京市凌鹰起重机械有限公司 | 昆山PCB加工_SMT贴片_PCB抄板_线路板焊接加工-昆山腾宸电子科技有限公司 | 火锅加盟_四川成都火锅店加盟_中国火锅连锁品牌十强_朝天门火锅【官网】 | 昆明网络公司|云南网络公司|昆明网站建设公司|昆明网页设计|云南网站制作|新媒体运营公司|APP开发|小程序研发|尽在昆明奥远科技有限公司 | 厌氧工作站-通用型厌氧工作站-上海胜秋科学仪器有限公司 | 步进驱动器「一体化」步进电机品牌厂家-一体式步进驱动 | 厚壁钢管-厚壁无缝钢管-小口径厚壁钢管-大口径厚壁钢管 - 聊城宽达钢管有限公司 | 闪蒸干燥机-喷雾干燥机-带式干燥机-桨叶干燥机-[常州佳一干燥设备] | TwistDx恒温扩增-RAA等温-Jackson抗体-默瑞(上海)生物科技有限公司 | 定制液氮罐_小型气相液氮罐_自增压液氮罐_班德液氮罐厂家 | 山东螺杆空压机,烟台空压机,烟台开山空压机-烟台开山机电设备有限公司 | 耳模扫描仪-定制耳机设计软件-DLP打印机-asiga打印机-fitshape「飞特西普」 | 厂房出租-厂房规划-食品技术-厂房设计-厂房装修-建筑施工-设备供应-设备求购-龙爪豆食品行业平台 | 净化工程_无尘车间_无尘车间装修-广州科凌净化工程有限公司 | SEO网站优化,关键词排名优化,苏州网站推广-江苏森歌网络 | 油罐车_加油机_加油卷盘_加油机卷盘_罐车人孔盖_各类球阀_海底阀等车用配件厂家-湖北华特专用设备有限公司 | 大型低温冷却液循环泵-低温水槽冷阱「厂家品牌」京华仪器_京华仪器 | 精密模具加工制造 - 富东懿| 板材品牌-中国胶合板行业十大品牌-环保板材-上海声达板材 | 金属波纹补偿器厂家_不锈钢膨胀节价格_非金属伸缩节定制-庆达补偿器 | 佛山商标注册_商标注册代理|专利注册申请_商标注册公司_鸿邦知识产权 | IP检测-检测您的IP质量| 气动球阀_衬氟蝶阀_调节阀_电动截止阀_上海沃托阀门有限公司 | 警方提醒:赣州约炮论坛真的安全吗?2025年新手必看的网络交友防坑指南 | 伟秀电气有限公司-10kv高低压开关柜-高低压配电柜-中置柜-充气柜-欧式箱变-高压真空断路器厂家 | 5nd音乐网|最新流行歌曲|MP3歌曲免费下载|好听的歌|音乐下载 免费听mp3音乐 | 膜片万向弹性联轴器-冲压铸造模具「沧州昌运模具」 | 银川美容培训-美睫美甲培训-彩妆纹绣培训-新娘化妆-学化妆-宁夏倍莱妮职业技能培训学校有限公司 临时厕所租赁_玻璃钢厕所租赁_蹲式|坐式厕所出租-北京慧海通 | 底部填充胶_电子封装胶_芯片封装胶_芯片底部填充胶厂家-东莞汉思新材料 | 定量包装秤,吨袋包装称,伸缩溜管,全自动包装秤,码垛机器人,无锡市邦尧机械工程有限公司 | 皮带机-带式输送机价格-固定式胶带机生产厂家-河南坤威机械 | 包装设计公司,产品包装设计|包装制作,包装盒定制厂家-汇包装【官方网站】 | 蓄电池在线监测系统|SF6在线监控泄露报警系统-武汉中电通电力设备有限公司 | 飞利浦LED体育场灯具-吸顶式油站灯-飞利浦LED罩棚灯-佛山嘉耀照明有限公司 | WTB5光栅尺-JIE WILL磁栅尺-B60数显表-常州中崴机电科技有限公司 | 细砂提取机,隔膜板框泥浆污泥压滤机,螺旋洗砂机设备,轮式洗砂机械,机制砂,圆锥颚式反击式破碎机,振动筛,滚筒筛,喂料机- 上海重睿环保设备有限公司 | 数码听觉统合训练系统-儿童感觉-早期言语评估与训练系统-北京鑫泰盛世科技发展有限公司 | 济南铝方通-济南铝方通价格-济南方通厂家-山东鲁方通建材有限公司 | 培训一点通 - 合肥驾校 - 合肥新亚驾校 - 合肥八一驾校 | 红立方品牌应急包/急救包加盟,小成本好项目代理_应急/消防/户外用品加盟_应急好项目加盟_新奇特项目招商 - 中红方宁(北京) 供应链有限公司 |