一、NFS(network file system)网络文件共享服务

 适合于中小型网站集群架构。
 大型网站,会用到分布式文件系统 Moosefs( mfs),glusterfs,FastDFS
 功能:通过网络让不同的主机系统之间可以共享文件或目录。

NFS在企业中的应用场景
在企业架构的工作环境中,NFS网络文件系统一般用来存储共享视频、图片、附件等静态资源文件,一般是把网站用户上传的文件都放到NFS共享里。
NFS 存储以及 rsync 备份工具_第1张图片
NFS 存储以及 rsync 备份工具_第2张图片
NFS 工作原理
NFS 存储以及 rsync 备份工具_第3张图片
NFS的RPC服务,在Centos5.X下称为portmap,在Centos6.X下称为rpcbind
NFS软件列表
1、nfs-utils:这个NFS服务主程序
包括rpc.nfsd、rpc.mountd 两个daemons和相关文档说明及执行命令文件等。
2、rpcbind:Centos6.x下面RPC的主程序。

安装:yum install nfs-utils rpcbind -y
查看:rpm -qa nfs-utils rpcbind
/etc/init.d/rpcbind status==========查看rpcbind服务是否开启。
/etc/init.d/rpcbind start  ==========启动rpcbind服务。
netstat -lntup|grep rpcbind========查看rpcbind服务的端口。
lsof -i :111 或 netstat -lntup|grep 111==========知道端口查看对应的服务。
chkconfig --list rpcbind===========查看rpcbind服务是否开机自启动。
rpcinfo -p localhost==========查看rpc里有没有nfs的端口信息。
chkconfig nfs on    ==========设置nfs开机自启动。
注意:rpcbind先启动,nfs再启动。rpcbind重启后,rpcinfo -p localhost里就没有nfs的数据了。
  确定rpcbind服务和nfs服务先后启动顺序(less /etc/init.d/rpcbind,less  etc/init.d/nfs    看chkconfig后面的数字)
   以后开机自启动服务命令放到/etc/rc.local里面。
ps -ef|egrep "rpc|nfs"========查看rpc和nfs多个服务进程。

配置NFS服务端
1、NFS服务端配置文件路径:/etc/exports,默认是空的。
2、/etc/exports配置文件格式
NFS共享的目录 NFS客户端地址1(参数1,参数2....) 客户端地址2(参数1,参数2.....)
NFS共享的目录 NFS客户端地址(参数1,参数2....) 使用第二个格式
实*例一:共享/data目录给192.168.153.整个网段的主机读写*
(即实现将nfs server上的/data目录共享给192.168.153.
,整个网段的主机可读写,在nfs-server上执行,ip地址为192.168.153.134。)
答:也可以用exportfs -o rw,sync 192.168.153.134:/data
NFS 存储以及 rsync 备份工具

 /etc/init.d/nfs reload 相当于 exportfs -rv ===============平滑生效
(reload和exportfs -r作用一样的原因):
[root@nfs-server ~]# grep "reload" -A 1 /etc/init.d/nfs
  reload | force-reload)
        /usr/sbin/exportfs -r

在客户端执行挂载:

      mount -t nfs 192.168.153.134:/data /mnt=============挂载
      df -h============查看挂载
      mount==========查看挂载
      cat /proc/mounts=====查看挂载
      ls /mnt/==========查看挂载点/mnt/,就会读到目录/data/下的文件。
      (sync读写到磁盘) 

在客户端实现挂载服务端/data目录 (umount 卸载挂载)

     首先查看服务端能否挂载 showmount -e loaclhost,再确定客户端能否挂载 showmount -e 192.168.153.134
     mount -t nfs 192.168.153.134:/data /mnt重启之后就没有了,所以将mount -t nfs 192.168.153.134:/data /mnt放到/etc/rc.local永久生效。

在客户端/mnt创建文件,权限不够

     在服务端执行cat /var/lib/nfs/etab查看权限配置的参数:65534
     然后grep 65534 /etc/passwd查看有权限的用户
     最后改变属主 chown -R nfsnobody /data       (-R递归)

在服务端在/data下创建文件,在客户端显示属主是root。
(注意:如果出现NO route to host,说明防火墙拦截;然后把防火墙关掉 /etc/init.d/iptables stop;最后检查是否连上 telnet 192.168.153.134 111)
mount挂载参数
如果追求极致:可以用如下参数挂载。(了解即可,默认就有这些参数)

   mount -t nfs -o bg,hard,intr,rsize=131072,wsize=131072 192.168.153.134:/data /mnt
   mount -t==============指定文件类型
   hard      ==============硬挂载,一般配合intr使用
   rsize,wsize==========读和写的传输能力,数值越大传输越快。
 如果想优化挂载,就把rsize和wsize的值加大。

man nfs后的 -o重要参数

   sync======读写到磁盘
   rw    ======以可读可写的方式挂载一个文件系统
   noexec======在挂载的文件系统中不允许直接执行任何二进制的程序
   noatime=======不更新文件系统上的inode访问时间
   nodiratime=======不更新文件系统上目录inode访问时间
   nosuid========不允许suid生效
   remount=======尝试重新挂载一个已经挂载了的文件系统

有关案例:
一、fstab修改错误导致系统无法启动故障修复案例
维护模式或救援模式:mount -o rw,remount / 然后修改/etc/fstab
二、文件系统只读故障修复案例
维护模式或救援模式:mount -o rw,remount /
mount挂载性能优化参数选项

   1、安全挂载参数
      mount -t nfs -o nosuid,noexec,nodev,rw 192.168.153.134:/data /mnt
   2、性能优化挂载
        ① 禁止更新目录及文件时间戳挂载
        mount -t nfs -o noatime,nodiratime 192.168.153.134:/data /mnt
        ② 安全加优化的挂载方式
        mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,intr,rsize=131072,wsize=131072 192.168.153.134:/data /mnt

二、rsync 备份工具(先比较,在同步)

rsync是一款开源的、快速的、多功能的、可实现全量和增量的本地或远程数据同步备份的优秀工具。
一个rsync相当于scp,cp,rm,但是还优于他们每一个命令。

     scp  远程拷贝
      cp   本地拷贝
      rm   删除功能
     rsync可以是一个网络服务(port端口 socket服务)

rsync命令是客户端命令参数:

      -a(archive)归档模式,表示以递归方式传输文件,并保持所有文件属性
      -v(verbose)详细模式输出,传输时的进度等信息
      -z(compress)传输时进行压缩以提高传输效率,--compress-level=HUM可按级别压缩
      -r(recursive)对子目录以递归模式,即目录下的所有目录都同样传输
      -t(times)保持文件时间信息
      -o(owner)保持文件属主信息
      -p(perms)保持文件权限
      -g(group)保持文件属组信息
      -P(progress)显示同步的过程及传输时的进度等信息
      -D(devices)保持设备文件信息
      -l(link)保留软链接

第一种工作模式:local(本地)

      rsync -avz /etc/hosts /tmp/    =====cp 增量同步到/tmp/下,如果一样不同步。   # -avz保持属性
      rsync -avz --delete /null/ /tmp/ =====rm 前面有啥,后面有啥;前面没有,后面的删掉,绝对一样。

第二种工作模式:(remote shell 远程的shell)

      push(推):
      rsync -avzP -e 'ssh -p 22' /tmp/ [email protected]:/tmp/    # -e指定隧道,-p 22 隧道的端口
       pull(拉):
      rsync -avzP -e 'ssh -p 22' [email protected]:/tmp/ /tmp/

rsync配置文件:/etc/rsyncd.conf
NFS 存储以及 rsync 备份工具_第4张图片

启动rsync服务:rsync --daemon
查看进程:ps -ef|grep rsync|grep -v grep
杀进程:pkill 进程名=========pkill rsync
              killall 进程名=========killall rsync
              kill pid(-9强制,不建议用)=======kill -HUP `cat /var/run/rsyncd.pid`(平缓)
取端口号:netstat -lntup|grep rsync
                  ss -lntup|grep rsync
                  lsof -i :873
连接远程主机:telnet 192.168.153.136 
连接远程主机rsync端口:telnet 192.168.153.136 873
查看防火墙状态:/etc/init.d/iptables status    关闭:/etc/init.d/iptables stop
安全优化:rsync --daemon --address=192.168.153.136 只有访问192.168.153.136这个ip才和你对话,其他的都不理你。

rsync配置服务端

    useradd rsync -s /sbin/nologin -M 添加虚拟用户,不创建家目录。
    mkdir /backup  
    chown -R rsync /backup/    客户端连上就是rsync权限
    echo "rsync_backup:oldboy" >/etc/rsync.password 创建账户和密码的文件
    chmod 600 /etc/rsync.password  把这个文件权限改成600

总步骤:
服务端配置 rsync
1、在rsync配置文件里加上上面那些配置
NFS 存储以及 rsync 备份工具_第5张图片
客户端配置rsync

  1、创建密码文件
     echo "oldboy" >/etc/rsync.password
     chmod 600 /etc/rsync.passsword
     ls -ld /etc/rsync.password
     cat /etc/rsync.password
  2、rsync(推、拉)
     push(推):  rsync -avz /tmp/ [email protected]::backup --password-file=/etc/rsync.password
     pull(拉): rsync -avz [email protected]::backup /tmp/ --password-file=/etc/rsync.password
rsync优点:
                增量备份同步,支持socket(daemon),集中备份。

rsync缺点:

                   1、大量小文件同步的时候,对比时间较长,有的时候,rsync进程停止。
                    解决:a、打包同步。 b、 drbd(文件系统同步复制block)
                   2、同步大文件,10G这样的大文件有时也会出现问题,中断。未完整同步之前,是隐藏文件,同步完成后改为正常文件。

客户端rsync命令排除:
NFS 存储以及 rsync 备份工具_第6张图片
客户端定时同步:
NFS 存储以及 rsync 备份工具_第7张图片
添加到定时任务(crontab -e)
NFS 存储以及 rsync 备份工具

三、实时同步:(inotify或sersync)

inotify是一种强大的、细粒度的、异步的文件系统事件监控机制。
在nfs上安装inotify

1、mkdir -p /home/oldboy/tools   ###创建存放的目录
2、cd /home/oldboy/tools/  
3、wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz  ###inotity下载的网址
4、ls -l /proc/sys/fs/inotify/    ###看是否支持
5、tar zxf inotify-tools-3.14.tar.gz   cd inotify-tools-3.14   ###解包并切换路径
6、./configure --prefix=/usr/local/inotify-tools-3.14     ###软件包安装到/usr/local/inotify-tools-3.14 路径下
7、make && make install
8、ln -s /usr/local/inotify-tools-3.14/ /usr/local/inotify-tools   ###创建软链接

工具集介绍:(cd /usr/local/inotify-tools && ll bin)
1、inotifywait:监控目录的变化,守护进程。
2、inotifywatch:收集被监视的文件系统使用度统计数据,指文件系统事件发生的次数统计。
NFS实时监控/data目录的变化(create,close_write,delete增,改,删)
/usr/local/inotify-tools/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e create,close_write,delete /data
NFS 存储以及 rsync 备份工具_第8张图片
脚本实现NFS服务器与backup实时同步(inotify.sh)(200到300张并发环境)
NFS 存储以及 rsync 备份工具_第9张图片
--delete 无差异同步
然后将 /bin/sh server/scripts/inotify.sh & 放到/etc/rc.local里
实时同步的优化
NFS 存储以及 rsync 备份工具_第10张图片
inotify 优缺点:
NFS 存储以及 rsync 备份工具_第11张图片
NFS 存储以及 rsync 备份工具_第12张图片