中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用rsync + inotify 實現多臺游戲服代碼自動實時同步

發布時間:2020-07-08 12:09:06 來源:網絡 閱讀:930 作者:自由linux 欄目:web開發

一 應用場景描述

 在LB后端有多臺游戲服運行PHP代碼,每臺服務器的環境部署一樣,PHP代碼一樣。現在有時需要更改游戲配置文件,如更改各個區服的開服狀態等。登陸到每臺服務器去更改相應的文件會比較繁瑣,需要當在第一臺服務器上的配置文件作更改時,其他服務器上的配置文件自動更改。于是考慮可以使用rsync + inotify的方式來同步代碼。


二 rsync和inotify配置

使用yum -y install rsync安裝rsync服務

rsync有兩種工作模式,命令行模式和C/S模式

使用man rsync查看rsync命令的詳細使用

使用man rsyncd.conf查看rsync C/S模式運行時的配置文件的詳細配置

啟動rsync C/S模式

/usr/bin/rsync --daemon

/etc/rsyncd.conf 這個文件默認不存在,需要手動創建一個.


  uid = root
  gid = root
  use chroot = no
  max connections = 50
  #strict modes = yes
  pid file = /var/run/rsyncd.pid
  lock file = /var/run/rsyncd.lock
  log file = /var/log/rsyncd.log

  [login_nginx]
  path = /etc/nginx/
  comment = login nginx
  ignore errors
  read only = no
  write only = no
  hosts allow = 192.168.1.0/24
  hosts deny = *
  list = false


  [game_center]
  path = /var/www/html
  comment = game_center code
  ignore errors
  read only = no
  write only = no
  hosts allow = 192.168.1.0/24
  hosts deny = *
  list = false


這里uid和gid特別重要,表示當傳輸文件時,rsyncd守護進程應該具有的對指定目錄的權限。如果權限不對,傳輸將失敗。


use chroot         如果設置為true,那么rsync 在傳輸文件之前會chroot到指定的目錄下。

list               這個參數設置當客戶端請求列出可用模塊時,這個模塊是否可以列出

max connections    設置最大并發連接數,默認是0,表示無限制。

game_center        是這個模塊的名稱

path               設置同步目錄

ignore errors      忽略一些I/O錯誤

read only          設置是否允許只讀      

write only         設置是否允許只寫

hosts allow        設置允許訪問的IP范圍,可以是單個IP,也可以是IP段

hosts deny         設置拒絕訪問的IP范圍


還可以設置賬號和密碼認賬模式

auth users = applecode

secrets file = /etc/rsyncd.secrets.apple

applecode這個賬號不需要再本地系統創建,最好將/etc/rsyncd.secrets.apple 的權限設置為600


/etc/rsyncd.secrets.apple的內容如下:

applecode:applecodexxx


在客戶端主機上也要存在/etc/rsyncd.secrets.apple這個文件,內容是賬號密碼

applecodexxx


開啟了認賬模式使用rsync命令同步時需要添加參數   

--password-file=/etc/rsyncd.secrets.apple



使用rsync不能實時監測數據的變化并觸發同步,這樣可以使用inotify配合rsync。

可以使用man 7 inotify查看inotify的相關說明

inotify是一個強大的,細粒度的,異步的文件系統系統監測機制。從內核2.6.13,Linux內核提供inotify接口,第三方軟件可以通過inotify接口監控文件系統中文件的修改,刪除,移動,增加等各種事件。


使用uname -a 查看Linux內核是否低于2.6.13

查看是否存在/proc/sys/fs/inotify/目錄

ls -lh /proc/sys/fs/inotify/


Inotify可以監測的文件系統事件

         IN_ACCESS          File was accessed (read) (*)

         IN_ATTRIB          Metadata changed (permissions, timestamps,

                            extended attributes, etc.) (*)

         IN_CLOSE_WRITE     File opened for writing was closed (*)

         IN_CLOSE_NOWRITE   File not opened for writing was closed (*)

         IN_CREATE          File/directory created in watched directory (*)

         IN_DELETE          File/directory deleted from watched directory (*)

         IN_DELETE_SELF     Watched file/directory was itself deleted

         IN_MODIFY          File was modified (*)

         IN_MOVE_SELF       Watched file/directory was itself moved

         IN_MOVED_FROM      File moved out of watched directory (*)

         IN_MOVED_TO        File moved into watched directory (*)

         IN_OPEN            File was opened (*)


使用yum install -y  inotify-tools inotify-tools-devel 安裝inotify-tools

安裝后包含兩個工具

/usr/bin/inotifywait

/usr/bin/inotifywatch


inotifywait   等待要監控的文件發生變化

inotifywatch  收集變化信息


這里主要使用inotifywait命令

通過man inotifywait 查看inotify命令的詳細使用信息


  -m, --monitor

 

              默認是當第一個事件出現時,執行操作后就退出。這個參數可以讓inotifywait一直執行


 -r, --recursive

              監測所有子目錄的變化情況。如果監測的是一個很大的目錄,這里要注意設置/proc/sys/fs/inotify/max_user_watches的值。


  -q, --quiet

              不顯示詳細輸出

--timefmt 

              設置時間格式,例如  --timefmt '%d/%m/%y %H:%M'

--format 

              設置輸出格式。例如  --format '%T %w%f%e'

              %T     以 --timefmt 指定的格式顯示時間

              %e     Replaced with the Event(s) which occurred, comma-separated.

              %w     This will be replaced with the name of the Watched file on which an event occurred.

              

              %f     When an event occurs within a directory, this will be replaced with the name of the File which caused the event to occur.  Otherwise, this will be replaced with an empty string.




-e           列出需要監聽的事件


以下是可以監聽的事件

access       被監測的文件或被監測目錄里的文件被訪問

modify       被監測的文件或被監測目錄里的文件被寫入

attrib       被監測的文件或被監測目錄里的文件的屬性被修改,包括時間戳,文件權限等

close_write  被監測的文件或被監測目錄里的文件以寫入模式打開后被關閉

close_nowrite被監測的文件或被監測目錄里的文件以只讀模式打開后被關閉

close        不關心被監測的文件或被監測目錄里的文件以何種方式打開.

open         文件打開

moved_to     移入文件到被監測的目錄,同一個目錄內的文件被移入移出也會產生事件

moved_from   從被監測的目錄移出文件

move         移入移出都監測

move_self    被監測的文件或目錄被移走.產生這個事件后,這個文件或目錄不再被監測.

create       一個文件或目錄在被監測的目錄內被創建

delete       一個文件或目錄在被監測的目錄內被移除

delete_self  被監測的文件或目錄被刪除,產生這個事件后,這個文件或目錄被再被監測.

unmount      被監測的文件或目錄所在的文件系統被卸載.產生這個事件后,被監測的文件或目錄將不              被監測.



$ inotifywait -mrq application.conf.php
application.conf.php OPEN 
application.conf.php CLOSE_NOWRITE,CLOSE 
application.conf.php OPEN 
application.conf.php CLOSE_NOWRITE,CLOSE 
application.conf.php OPEN 
application.conf.php CLOSE_NOWRITE,CLOSE 
application.conf.php OPEN 
application.conf.php CLOSE_NOWRITE,CLOSE 
application.conf.php OPEN 
application.conf.php CLOSE_NOWRITE,CLOSE

        

 #!/bin/sh
       while inotifywait -e modify /var/log/messages; do
         if tail -n1 /var/log/messages | grep httpd; then
           kdialog --msgbox "Apache needs love!"
         fi
       done



inotify_rsync_files.sh

#/usr/bin/bash

#check /etc/nginx/  and  /var/www/html files changes
hosts="192.168.1.183  192.168.1.184  192.168.1.185  192.168.1.186"
src1=/etc/nginx/
dst1=game_nginx
src2=/var/www/html/
dst2=game_server

#check /var/www/html files changes and rsync them to the destination host
/usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e move,close_write,modify,delete,create,attrib
 $src1  $src2|while read files
                         do 
                             for host in $(echo $hosts)
                             do 
                               echo $files|grep /etc/nginx
                               if [ $? -eq 0 ];then 
                                   /usr/bin/rsync -avz --delete  $src1/    $host::$dst1
                                   ssh -t -p 40022 jidong@$host "sudo service nginx reload"
                               else
                                   /usr/bin/rsync -avz --delete  $src2/    $host::$dst2
                                   ssh -t -p 40022 jidong@$host "sudo service php-fpm reload"
                               fi
                             done
                             echo "$files was rsynced" >> /tmp/rsyncd.log 2>&1
                         done


放入后臺執行

nohup sh /data/tools/inotify_rsync_files.sh >> ~/inotify_rsync.txt &  


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

绥化市| 茂名市| 凤城市| 靖边县| 怀柔区| 南和县| 大庆市| 广宗县| 时尚| 墨竹工卡县| 安图县| 太仆寺旗| 河间市| 新化县| 通许县| 宜川县| 荥阳市| 尖扎县| 兴安盟| 老河口市| 青河县| 茶陵县| 喜德县| 民勤县| 铁力市| 平阳县| 南漳县| 荣昌县| 赫章县| 丹凤县| 云浮市| 黔南| 湄潭县| 丹寨县| 渝中区| 微博| 墨江| 武威市| 高青县| 天台县| 自贡市|