这些是日常项目中用到的小知识点,希望能为您带来帮助

rsync+inotify操作方法

1.1应用方式:由于客户需要将两台web服务器的/www目录做到同步
应用与改进过程:一开始想到用crond+rsync来实现,但由于客户的文件比较多,此方式占用CPU资源高,因此采用了
rsync+inotify这种触发式同步方式

1.2软件说明:
1.2.1Rsync:
rsync是类unix系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,
支持本地复制,或者与其他SSH、rsync主机同步。

1.2.2Inotify:
Inotify 是一个 Linux特性,它监控文件系统操作,比如读取、写入和创建。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。学习如何将 inotify 集成到您的应用程序中,并发现一组可用来进一步自动化系统治理的命令行工具。

1.2.3rsync+inotify:
随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐渐暴露出了很多不足,首先,rsync同步数据时,需要扫描所有文件后进行比对,进行差量传输。如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的。而且正在发生变化的往往是其中很少的一部分,这是非常低效的方式。其次,rsync不能实时的去监测、同步数据,虽然它可以通过linux守护进程的方式进行触发同步,但是两次触发动作一定会有时间差,这样就导致了服务端和客户端数据可能出现不一致,无法在应用故障时完全的恢复数据。基于以上原因,rsync+inotify组合出现了!

机器配置信息如下:
源服务器: 192.168.26.71 同步目录:/www 安装:rsync inotify inotify.sh
目标服务器: 192.168.26.71 同步目录:/www 安装:rsync

2.1操作且实现触发式同步
2.1.1同步两台机器的时间
source# ntpdate -u times.aliyun.com
dest# ntpdate -u times.aliyun.com

2.2分别在两台机器操作

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/ [email protected]::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地址访问