适合于中小型网站集群架构。 大型网站,会用到分布式文件系统 Moosefs( mfs),glusterfs,FastDFS 功能:经过网络让不一样的主机系统之间能够共享文件或目录。
NFS在企业中的应用场景
在企业架构的工做环境中,NFS网络文件系统通常用来存储共享视频、图片、附件等静态资源文件,通常是把网站用户上传的文件都放到NFS共享里。
NFS 工做原理
NFS的RPC服务,在Centos5.X下称为portmap,在Centos6.X下称为rpcbind
NFS软件列表
一、nfs-utils:这个NFS服务主程序
包括rpc.nfsd、rpc.mountd 两个daemons和相关文档说明及执行命令文件等。
二、rpcbind:Centos6.x下面RPC的主程序。node
安装: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服务端
一、NFS服务端配置文件路径:/etc/exports,默认是空的。
二、/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 git
/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
在客户端执行挂载:github
mount -t nfs 192.168.153.134:/data /mnt=============挂载 df -h============查看挂载 mount==========查看挂载 cat /proc/mounts=====查看挂载 ls /mnt/==========查看挂载点/mnt/,就会读到目录/data/下的文件。 (sync读写到磁盘)
在客户端实现挂载服务端/data目录 (umount 卸载挂载)shell
首先查看服务端可否挂载 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=======尝试从新挂载一个已经挂载了的文件系统
有关案例:
1、fstab修改错误致使系统没法启动故障修复案例
维护模式或救援模式:mount -o rw,remount / 而后修改/etc/fstab
2、文件系统只读故障修复案例
维护模式或救援模式:mount -o rw,remount /
mount挂载性能优化参数选项网络
一、安全挂载参数 mount -t nfs -o nosuid,noexec,nodev,rw 192.168.153.134:/data /mnt 二、性能优化挂载 ① 禁止更新目录及文件时间戳挂载 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至关于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/ root@192.168.153.133:/tmp/ # -e指定隧道,-p 22 隧道的端口 pull(拉): rsync -avzP -e 'ssh -p 22' root@192.168.153.133:/tmp/ /tmp/
rsync配置文件:/etc/rsyncd.conf
启动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
一、在rsync配置文件里加上上面那些配置
客户端配置rsync
一、建立密码文件 echo "oldboy" >/etc/rsync.password chmod 600 /etc/rsync.passsword ls -ld /etc/rsync.password cat /etc/rsync.password 二、rsync(推、拉) push(推): rsync -avz /tmp/ rsync_backup@192.168.153.136::backup --password-file=/etc/rsync.password pull(拉): rsync -avz rsync_backup@192.168.153.136::backup /tmp/ --password-file=/etc/rsync.password rsync优势:
增量备份同步,支持socket(daemon),集中备份。
rsync缺点:
一、大量小文件同步的时候,对比时间较长,有的时候,rsync进程中止。 解决:a、打包同步。 b、 drbd(文件系统同步复制block) 二、同步大文件,10G这样的大文件有时也会出现问题,中断。未完整同步以前,是隐藏文件,同步完成后改成正常文件。
客户端rsync命令排除:
客户端定时同步:
添加到定时任务(crontab -e)
inotify是一种强大的、细粒度的、异步的文件系统事件监控机制。
在nfs上安装inotify
一、mkdir -p /home/oldboy/tools ###建立存放的目录 二、cd /home/oldboy/tools/ 三、wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz ###inotity下载的网址 四、ls -l /proc/sys/fs/inotify/ ###看是否支持 五、tar zxf inotify-tools-3.14.tar.gz cd inotify-tools-3.14 ###解包并切换路径 六、./configure --prefix=/usr/local/inotify-tools-3.14 ###软件包安装到/usr/local/inotify-tools-3.14 路径下 七、make && make install 八、ln -s /usr/local/inotify-tools-3.14/ /usr/local/inotify-tools ###建立软连接
工具集介绍:(cd /usr/local/inotify-tools && ll bin)
一、inotifywait:监控目录的变化,守护进程。
二、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服务器与backup实时同步(inotify.sh)(200到300张并发环境)
--delete 无差别同步
而后将 /bin/sh server/scripts/inotify.sh & 放到/etc/rc.local里
实时同步的优化
inotify 优缺点: