这些是日常项目中用到的小知识点,希望能为您带来帮助
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/ 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地址访问