linux 下nfs rsync+inotify 总结

@努力的小王  January 11, 2018

QQ截图20180111004002.png

1.nfs即网络文件系统, 它最大的功能就是可以透过网络,让不同的机器、不同的操作系统、可以彼此分享个别的档案 (share files)
优点:配置简单。nfs文件系统内数据在文件系统之上,数据可见。服务稳定性和可靠性较高。
局限:高并发下效率性能有限(2千万一日以下pv)
2.rsync+inotify是一种实时数据同步方案
3搭建步骤:
关闭selinu和iptables
server1为clinet端运行nginx网站服务
ip:192.168.3.131
server2为nfs服务端
ip:192.168.3.144
server3为rsyncdaemon端
ip:192.168.3.136
clinet:
yum install -y  nfs-utils
mkdir -p /html
#安装及创建本地挂载目录
mount -t nfs 192.168.3.144:/html /html
#标准挂载
################################# 
echo "/bin/mount -t nfs 192.168.3.144:/html /html" >> /etc/rc.local 
##养成良好习惯,放进rc.local里,开机自动挂载  


nfs:
yum -y install nfs-utils rpcbind
mkdir /html
chown -R nfsnobody.nfsnobody /html
#安装,创建及授权
http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
#inotify下载地址
echo 12334424451444 > index.html
##创建index.html文件
/etc/init.d/syncd stop
##inotify 服务控制
cat /etc/exports
/html 192.168.3.0/24(rw,no_root_squash,no_all_squash,sync)
##exports 文件配置,配置完后运行“exports -r”刷新配置
##常见的参数则有:

参数值    内容说明
rw  ro    该目录分享的权限是可擦写 (read-write) 或只读 (read-only),但最终能不能读写,还是与文件系统的 rwx 及身份有关。

sync  async    sync 代表数据会同步写入到内存与硬盘中,async 则代表数据会先暂存于内存当中,而非直接写入硬盘!

no_root_squash  root_squash    客户端使用 NFS 文件系统的账号若为 root 时,系统该如何判断这个账号的身份?预设的情况下,客户端 root 的身份会由 root_squash 的设定压缩成 nfsnobody, 如此对服务器的系统会较有保障。但如果你想要开放客户端使用 root 身份来操作服务器的文件系统,那么这里就得要开 no_root_squash 才行!

all_squash    不论登入 NFS 的使用者身份为何, 他的身份都会被压缩成为匿名用户,通常也就是 nobody(nfsnobody) 啦!

anonuid  anongid    anon 意指 anonymous (匿名者) 前面关于 *_squash 提到的匿名用户的 UID 设定值,通常为 nobody(nfsnobody),但是你可以自行设定这个 UID 的值!当然,这个 UID 必需要存在于你的 /etc/passwd 当中! anonuid 指的是 UID 而 anongid 则是群组的 GID 啰。

inotify脚本:
#this is inotify script
#author xw 2017.12.13
#!/bin/bash
Path=/html
/usr/bin/inotifywait -mrq --format '%w%f' -e close_write,delete $Path \
| while read file
  do
   cd $Path &&\
   
   rsync -az ./ --delete rsync_backup@192.168.3.136::backup --password-file=/etc/rsync.password
   
   done
   
###inotifywait命令帮助   
inotifywait --help:
  
  --exclude <pattern> 指定排除(忽略)部分文件或目录,这些文件或目录上不监听任何事件,正则表达式书写(相对路径)
      FMT: # --exclude 'Runtime' //忽略对Runtime目录的事件监听

    --excludei <pattern> 与--exclude相同,区别是此选项正则表达式忽略大小写

    -m 或 --monitor 持续保持监听(如果不加此选项,则监听到一次后便退出)

    -d 或 --daemon 以守护进程方式后台运行(除了在后台运行外,与-m选项一样)

    -r 或 --recursive 递归监听其下所有子目录及文件

    --fromfile <file> Read files to watch from <file> or `-' for stdin.

    -o 或 --outfile <file> 将事件输出到指定文件,而不输出到屏幕
      FMT: -o /var/log/inotifywait.log

    -s 或 --syslog 将错误发送到系统日志,而不是输出到屏幕

    -q 或 --quiet 打印较少信息(仅打印事件)

    -qq 不打印任何信息(静默方式)

    --format <fmt> 设置打印屏幕的格式,常见选项:%T时间;%w触发事件文件所在绝对路径;%f触发事件文件名称;%e触发的事件名称;
      FMT: # --format '%T %f %e' 

    --timefmt <fmt> 指定输出时间内容,相当于将时间赋值给%T
      FMT: # --timefmt '%y-%m-%d %H:%M'

    -c 或 --csv 用CSV格式打印事件

    -t 或 --timeout <seconds> 指定一次性监听时间,超时退出监听(值为0表示永不超时,单位:秒),不可与 -m -d 连用
      FMT: # -t 60 //设定监听60秒,60秒内监听到事件立即退出,如果监听不到事件60秒后也退出

    -e 或 --event <event1> [ -e|--event <event2> ... ] 指定要监听的事件(多个事件用逗号分割)
      FMT: # -e 'create,delete,close_write,attrib,moved_to'
server3:
rsyndaemo命令脚本以前写了,看看前面就知道了


最后,在浏览器输入192.168.3.131,访问到了3.144里/html/index.html里的内容,同时index.html文件也实时同步到3.136里的/html目录下,夜深了,下次再写。

   
   

添加新评论