欢迎阅读!

潇湘夜雨

当前位置: 主页 > 服务器 >

文件实时同步nfs+rsync+inotify

时间:2020-04-16 21:43来源:潇湘夜雨 作者:华嵩阳 点击:
一、NFS共享服务 1.安装nfs服务器: yum install nfs-utils -y 2.配置nfs服务器: vim /etc/exports /backup 172.18.109.192/26(rw,sync,all_squash) 一般这配置就可以 rw:read-write,可读写; 注意,仅仅这里设置成
一、NFS共享服务
1.安装nfs服务器:
   yum  install  nfs-utils -y
2.配置nfs服务器:
   vim /etc/exports
  /backup 172.18.109.192/26(rw,sync,all_squash)
 一般这配置就可以
rw:read-write,可读写;    注意,仅仅这里设置成读写客户端还是不能正常写入,还要正确地设置共享目录的权限,参考问题5  
ro:read-only,只读;  
sync:文件同时写入硬盘和内存;  
async:文件暂存于内存,而不是直接写入内存;  
no_root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,也拥有root权限。显然开启这项是不安全的。  
root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,拥有匿名用户权限,通常他将使用nobody或nfsnobody身份;  
all_squash:不论NFS客户端连接服务端时使用什么用户,对服务端分享的目录来说都是拥有匿名用户权限;  
anonuid:匿名用户的UID值,通常是nobody或nfsnobody,可以在此处自行设定;  
anongid:匿名用户的GID值。
 
[root@hadoop-master ~]# service nfs start
启动 NFS 服务: exportfs: No options for /backup 172.18.109.0.*(rw,sync,all_squash): suggest 172.18.109.0.*(rw,sync,all_squash)(sync) to avoid warning
  [确定]
关掉 NFS 配额:                                            [确定]
启动 NFS mountd:                                          [确定]
启动 NFS 守护进程:                                        [确定]
正在启动 RPC idmapd:                                      [确定]
[root@hadoop-master ~]# netstat -tnlp |grep 2049
tcp        0      0 0.0.0.0:2049                0.0.0.0:*                   LISTEN      -                   
tcp        0      0 :::2049                     :::*                        LISTEN      -  
3.查看nfs服务器和客户端配置参数:
   cat /var/lib/nfs/etab  (服务端)
   cat /proc/mounts    (客户端查看挂载情况,卡住的情况必须用这个命令查看,不要用df -h)
   showmount -e 172.18.109.235 #查看nfs共享目录
Export list for 172.18.109.235:
/backup 172.18.109.192/26
 
 
4.客户端挂载测试
 mount -t nfs 172.18.109.235:/backup /share/
[root@hadoop2 ~]# mount
172.18.109.235:/backup on /share type nfs (rw,vers=4,addr=172.18.109.235,clientaddr=172.18.109.237)
此时客户端只能读,不能再共享目录中写。
 
5.客户端的写权限
 chown -R nfsnobody.nfsnobody /backup/
 
二、RSYNC共享服务
1.rsync简介
比其cp、tar备份的方法,rsync的优点是,安全性高、备份迅速、支持增量备份。只能做对实时性要求不高
的数据备份,例如:备份文件服务到远端从服务器、在本地磁盘上做数据镜像等  增量备份:就是rsync同步
数据时,需要扫描所有文件后进行比对,进行差量传输。但是对于大量文件达到千万量级别时,扫描所有文
件是非常耗时的。 如果发生改变的只是其中的一小部分的话,这是非常低效的方式。  
rsync 不能实时的去监测,同步数据,虽然它可以通过 linux 守护进程的方式进行触发同步,两次触发动作一
定会有时间差,这样就导致了服务端和客户端数据可能出现不一致,无法在应用故障时完全的恢复数据。  
rsync 是通过 crontab 守护进程进行触发,同步数据会有差异
 
2.工作模式
rsync命令的工作模式有四种:
  1、shell模式,也称为本地模式,速度要比cp快
  2、远程shell模式,其可以借助于ssh协议承载其数据传输过程
  3、列表模式,其工作方式与ls相似,仅列出源的内容:-nv
  4、服务器模式,此时,rsync可以工作为守护进程,能够接收客户端的数据传输请求,在使用时可以在客
  户端使用rsync命令发送给守护进程,也可以向服务器主获取文件。
  
3.rsync的服务器模式的配置文件/etc/rsyncd.conf:
  查看帮助 man rsyncd.conf
 
#rsync.conf start###
uid = nfsnobody
gid = nfsnobody
use chroot = no
max connections = 2000
timeout = 600
#strict modes = yes
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts deny = 172.18.109.237
hosts allow = 172.18.109.0/24
auth users = rsync_backup        #虚拟用户
secrets file = /etc/rsync.password
########################################
[backup]
comment = linux1 backup  #欢迎语
path = /backup
 
 
 
echo "rsync_backup:123456" > /etc/rsync.password  #创建密码文件
chmod 600 /etc/rsync.password    #修改密码文件的权限
mkdir /backup #创建配置文件中的共享目录
chown -R nfsnobody.nfsnobody /backup/ #设置共享目录的用户权限,一定要设置正确,否则传输会报错。
 
4.启动rsync的服务端:
   rsync --daemon
   
5.rsync客户端的配置:
  echo "123456" >/etc/rsync.password  #创建客户端密码文件(只要写密码不要用户)
  chmod 600 /etc/rsync.password  
  [root@hadoop1 ~]#  rsync -avz --delete /rsync1/ rsync_backup@172.18.109.235::backup --password-file=/etc/rsync.password (将rsync1目录中的文件推送到服务端并删除服务端多余的文件)
sending incremental file list
deleting test.txt
sent 43 bytes  received 8 bytes  102.00 bytes/sec
total size is 2691  speedup is 52.76
 
6.rsync命令用法
rsync命令的选项:
  -n:如果担心命令执行不正确,一同步复制,可能这个复制的后果是致命的,那后果可就严重了,这里我们可以加-n先测试一下
  -v: --verbose,详细输出模式、显示详细过程的
  -q: --quiet,静默模式,尽可能输出少的信息
  -c: --checksum,可以对传输的文件进行较验的,强制对文件传输进行校验
  -r: --recursive,递归复制
  -a: --archives,归档,复制时可以保存原有的属主属主等属性信息,甚至包括一点额外的属性、如访问控制列表
  -p: --perms,保存文件的权限
  -t: --times,保留文件的时间戳
  -l: --links,保留文件的符号链接
  -g: --group,保留文件的属组
  -o: --owner,保留文件的属主
  -D: --devices,保留设备文件  
  -e SSH:远程复制时,表示使用ssh协议作承载
  -z:基于网络时使用,对文件压缩后传输
  --progress:显示压缩进度条的
  --stats:显示如何执行压缩和传输的,也就是显示传输状态的  
注意:rsync命令使用中,如果源参数的末尾有斜线,就会复制指定目录内容,而不复制目录本身;没有斜线,则会复制目录本身,因此有如下命令:
  # rsync -r /mydata/data /backups/:会把目录data直接同步至/backups目录中去
  # rsync -r /mydata/data/ /backups/:会把目录中的data/中的内容同步至/backups目录中  

7、常见问题

rsync同步缓慢问题:日志报错 name lookup failed for 172.18.89.169: Temporary failure in name resolution
解决方法:添加ip的本地hosts解析

rsync通配符传输特定文件:rsync -avz  /web/nginx/logs/$i.access_$(date +%Y%m)* 172.18.80.37::weblog/$i/web1
    
rsync本地用法:
  # cd /etc /tmp/
  # rsync /tmp/etc/passwd /tmp/test/passwd -nv
 
 [root@hadoop2 ~]# rsync -r rsync_backup@172.18.109.235::backup/sh rpmbuild/ --password-file=/etc/rsync.password  #复制服务端的文件夹
[root@hadoop2 ~]# ls -lh rpmbuild/
drwxr-xr-x 2 root root 4.0K 11月 16 16:27 sh
 
[root@hadoop2 ~]# rsync -a rsync_backup@172.18.109.235::backup/hadoop1 rpmbuild/ --password-file=/etc/rsync.password #复制时可以保存原有的属主属主等属性信息
[root@hadoop2 ~]# ls -lh rpmbuild/
总用量 20K
drwxr-xr-x 2  502  502 4.0K 11月 16 16:29 hadoop1 #复制后目录的用户和属组id仍然和服务端一样
 
二、inotify服务
异步的文件系统事件监控机制  
Inotify 可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件
就可以监控文件系统下文件的各种变化情况,而 inotify-tools 就是这样的一个第三方软件 ,inotify 可以监
控文件系统的各种变化,当文件有任何变动时,就触发rsync 同步,这样刚好解决了同步数据的实时性问题。
 
[root@hadoop-master inotify-tools-3.14]#  ls -l /proc/sys/fs/inotify/ #查看当前系统是否支持inotify
总用量 0
-rw-r--r-- 1 root root 0 11月 16 15:33 max_queued_events
-rw-r--r-- 1 root root 0 11月 16 15:33 max_user_instances
-rw-r--r-- 1 root root 0 11月 16 15:33 max_user_watches
 
1.在客户端上安装inotify:
  wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
./configure
  make&&make install
  
2.监听/tmp/目录的增,删,改操作并按格式打印:
 inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e create,delete,move,close_write /backup/ 
  测试结果:
  16/11/16 15:42 /backup/.master.sql.dexlH3
16/11/16 15:42 /backup/.master.sql.dexlH3
 
3.使用inotify监听目录实时rsync同步脚本:
vim inotify.sh
#!/bin/bash
inotify=/usr/local/bin/inotifywait
 
$inotify -mrq --format '%w%f' -e create,delete,move,close_write  /rsync1/ \
|while read file
 do
rsync -az --delete /rsync1/ rsync_backup@172.18.109.235::backup --password-file=/etc/rsync.password
done
 
[root@hadoop1 ~]# sh inotify.sh & #后台运行脚本
[1] 3292
[root@hadoop1 ~]# jobs
[1]+  Running                 sh inotify.sh &
 
4.优化inotify参数:
 
在/proc/sys/fs/inotify目录下有三个文件,对inotify机制有一定的限制
[root@web ~]# ll /proc/sys/fs/inotify/
总用量0
-rw-r--r--1 root root 09月923:36 max_queued_events
-rw-r--r--1 root root 09月923:36 max_user_instances
-rw-r--r--1 root root 09月923:36 max_user_watches
 
   max_user_watches #设置inotifywait或inotifywatch命令可以监视的文件数量(单进程)
   max_user_instances #设置每个用户可以运行的inotifywait或inotifywatch命令的进程数
   max_queued_events #设置inotify实例事件(event)队列可容纳的事件数量
----------------------------
默认值如下:
[root@hadoop1 ~]# cat /proc/sys/fs/inotify/max_queued_events 
16384
[root@hadoop1 ~]# cat /proc/sys/fs/inotify/max_user_instances 
128
[root@hadoop1 ~]# cat /proc/sys/fs/inotify/max_user_watches 
8192
可以根据实际情况调整参数:
echo 50000000>/proc/sys/fs/inotify/max_user_watches -- 把他加入/etc/rc.local就可以实现每次重启都生效
echo 50000000>/proc/sys/fs/inotify/max_queued_events
 
(责任编辑:liangzh)
织梦二维码生成器
顶一下
(3)
100%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
推荐内容