跟高手學習LINUX筆記--題外話

這些是平常項目中用到的小知識點,但願能爲您帶來幫助linux

rsync+inotify操做方法nginx

1.1應用方式:因爲客戶須要將兩臺web服務器的/www目錄作到同步
應用與改進過程:一開始想到用crond+rsync來實現,但因爲客戶的文件比較多,此方式佔用CPU資源高,所以採用了
rsync+inotify這種觸發式同步方式c++

1.2軟件說明:
1.2.1Rsync:
rsync是類unix系統下的數據鏡像備份工具。使用快速增量備份工具Remote Sync能夠遠程同步,
支持本地複製,或者與其餘SSH、rsync主機同步。git

1.2.2Inotify:
Inotify 是一個 Linux特性,它監控文件系統操做,好比讀取、寫入和建立。Inotify 反應靈敏,用法很是簡單,而且比 cron 任務的繁忙輪詢高效得多。學習如何將 inotify 集成到您的應用程序中,並發現一組可用來進一步自動化系統治理的命令行工具。github

1.2.3rsync+inotify:
隨着應用系統規模的不斷擴大,對數據的安全性和可靠性也提出的更好的要求,rsync在高端業務系統中也逐漸暴露出了不少不足,首先,rsync同步數據時,須要掃描全部文件後進行比對,進行差量傳輸。若是文件數量達到了百萬甚至千萬量級,掃描全部文件將是很是耗時的。並且正在發生變化的每每是其中不多的一部分,這是很是低效的方式。其次,rsync不能實時的去監測、同步數據,雖然它能夠經過linux守護進程的方式進行觸發同步,可是兩次觸發動做必定會有時間差,這樣就致使了服務端和客戶端數據可能出現不一致,沒法在應用故障時徹底的恢復數據。基於以上緣由,rsync+inotify組合出現了!web

機器配置信息以下:
源服務器: 192.168.26.71 同步目錄:/www 安裝:rsync inotify inotify.sh
目標服務器: 192.168.26.71 同步目錄:/www 安裝:rsync vim

2.1操做且實現觸發式同步
2.1.1同步兩臺機器的時間
source# ntpdate -u times.aliyun.com
dest# ntpdate -u times.aliyun.com安全

2.2分別在兩臺機器操做bash

2.2.1在目標服務器上安裝設置rsync服務器

dest#yum -y install rsync
dest#vim /etc/rsyncd.conf
在文件最後添加內容以下:

#工做中指定用戶(須要指定用戶)
uid = root
gid = root
####至關於黑洞.出錯定位
use chroot = no
#####有多少個客戶端同時傳文件
max connections = 200
#####超時時間
timeout = 300
#####進程號文件
pid file = /var/run/rsyncd.pid
#####日誌文件
lock file = /var/run/rsync.lock
#####日誌文件
log file = /var/log/rsyncd.log
#####模塊開始
[backup]
####須要同步的目錄
path = /www/
####表示出現錯誤忽略錯誤
ignore errors
#####表示網絡權限可寫(本地控制真正可寫)
read only = false
#####這裏設置IP或讓不讓同步
list = false
#####指定容許的機器
hosts allow = 192.168.26.72/32
#####拒絕連接的地址,如下表示沒有拒絕的連接。
hosts deny = *
#####不要動的東西(默認狀況)
#####虛擬用戶
auth users = rsync_backup
#####虛擬用戶的密碼文件
secrets file = /etc/rsync.password

dest#vim /etc/rsync.password
添加以下內容後保存退出
rsync_backup:rsync_backup

dest#chmod 600 /etc/rsync.password
dest#mkdir /www
dest#rsync --daemon
dest# ps -ef |grep rsync
到如今目標服務器操做完成

2.2.1在源服務器上進行相關安裝設置

source#yum -y install rsync wget gcc gcc-c++
source#vim /etc/rsync.password
添加以下內容後保存退出
rsync_backup

source#chmod 600 /etc/rsync.password
source#rsync --daemon
先測試下可否正常同步
source#rsync -vzrtopg --progress /www/ rsync_backup@192.168.26.72::backup --password-file=/etc/rsync.password
source#cd /usr/local/src/
source#wget https://github.s3.amazonaws.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
source#tar -zxvf inotify-tools-3.14.tar.gz && cd inotify-tools-3.14
source inotify-tools-3.14# ./configure --prefix=/usr/local/inotify
source inotify-tools-3.14# make && make install
source#cd /usr/local/src && vim inotify.sh
內容以下:

#!/bin/bash
host01=192.168.26.72 #目標服務器的ip地址
src=/www #須要同步的目錄
dst=backup #目標服務器的rsync服務的模塊名
user=rsync_backup #目標服務器的rsync服務的虛擬用戶
rsync_passfile=/etc/rsync.password #本地調用rsync服務的密碼文件
inotify_home=/usr/local/inotify #inotify的安裝目錄
#judge
if [ ! -e "$src" ] \
|| [ ! -e "${rsync_passfile}" ] \
|| [ ! -e "${inotify_home}/bin/inotifywait" ] \
|| [ ! -e "/usr/bin/rsync" ];
then
echo "Check File and Folder"
exit 9
fi
${inotify_home}/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e close_write,delete,create,attrib $src \
| while read file
do
cd $src && rsync -vzrtopg --progress --delete ./ --timeout=100 $user@$host01::$dst --password-file=${rsync_passfile} >/dev/null 2>&1
done
exit 0

source#chmod +x inotify.sh && ./inotify.sh &
source# echo '/usr/local/src/inotify.sh &' >> /etc/rc.local

補充:如何得到中國全部的IP地址段
說明:把關鍵字‘CN’更換爲‘KR’則是爲韓國全部地址段

#!/bin/bash
wget -c http://ftp.apnic.net/stats/apnic/delegated-apnic-latest -O /usr/local/src/delegated-apnic-latest
sorce=cat /usr/local/src/delegated-apnic-latest
if [ ! -s $source ]
then
exit 0
else
cat delegated-apnic-latest | awk -F '|' '/CN/&&/ipv4/ {print $4 "/" 32-log($5)/log(2)}' >> /usr/local/src/chinaiplist.txt
fi


以上能夠在nginx發佈的網站中用到,把些IP加入到配置文件引用blackip.conf中,就能夠不讓有些國家的IP地址訪問

相關文章
相關標籤/搜索