一、NFS(network file system)网络文件共享服务
适合于中小型网站集群架构。
大型网站,会用到分布式文件系统 Moosefs( mfs),glusterfs,FastDFS
功能:通过网络让不同的主机系统之间可以共享文件或目录。
NFS在企业中的应用场景
在企业架构的工作环境中,NFS网络文件系统一般用来存储共享视频、图片、附件等静态资源文件,一般是把网站用户上传的文件都放到NFS共享里。
NFS 工作原理
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
/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服务: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配置文件里加上上面那些配置
客户端配置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命令排除:
客户端定时同步:
添加到定时任务(crontab -e)
三、实时同步:(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服务器与backup实时同步(inotify.sh)(200到300张并发环境)
--delete 无差异同步
然后将 /bin/sh server/scripts/inotify.sh & 放到/etc/rc.local里
实时同步的优化
inotify 优缺点: