一、NFS服务
1.NFS服务介绍
NFS(Network File System)网络文件系统,主要用于linux系统上实现文件共享的⼀种协议,其客户端主要是Linux;没有用户认证机制,且数据在网络上传送的时候是明文传送,⼀般只能在局域网中使用;支持多节点同时挂载及并发写入。
组件:
1.RPC(Remote Procedure Call Protocol):远程过程调用协议,它是⼀种通过网络从远程计算机程序上请求服务,不需要了解底层网络技术的协议;
2.rpcbind:负责NFS的数据传输,远程过程调用 ;
3.nfs-utils:控制共享哪些⽂件,权限管理。
2.NFS服务相关软件包
nfs-utils-1.2.3-26.el6.x86_64 nfs服务的⼀个脚本控制工具(服务端与客户端)
nfs4-acl-tools-0.3.3-6.el6.x86_64 acl 工具包
nfs-utils-lib-1.1.5-4.el6.x86_64 nfs 库文件
3.配置文件
/etc/exports man 5 exports
共享目录 共享选项
/nfs/share *(ro,sync)
共享主机:
* :代表所有主机
192.168.0.0/24:代表共享给某个网段
192.168.0.0/24(rw) 192.168.1.0/24(ro) :代表共享给不同网段
192.168.0.254:共享给某个IP
*.itcast.com:代表共享给某个域下的所有主机
共享选项:
ro:只读
rw:读写
sync:实时同步,直接写⼊磁盘
async:异步,先缓存在内存再同步磁盘
anonuid:设置访问nfs服务的用户的uid,uid需要在/etc/passwd中存在
root_squash :默认选项 root用户创建的文件的属主和属组都变成nfsnobody,其他人nfs-server端是它自己,client端是nobody。
no_root_squash:root用户创建的⽂件属主和属组还是root,其他人server端是它自己uid,client端是nobody。
all_squash: 不管是root还是其他普通⽤户创建的⽂件的属主和属组都是nfsnobody
说明:
anonuid和anongid参数和all_squash⼀起使用。
all_squash表示不管是root还是其他普通用户从客户端所创建的文件在服务器端的拥有者和所属组都是nfsnobody;服务端为了对文件做相应管理,可以设置anonuid和anongid进儿指定文件的拥有者和所属组。
4.任务实现
1.任务背景
由于业务驱动,为了提高用户的访问效率,现需要将原有web服务器上的静态资源文件分离出来,单独保存到⼀台文件服务器上。
2.任务要求
1. ⼀台应⽤服务器web-server部署apache,静态网页资源存放在另外⼀台NFS服务器上;
2. 对于NFS服务器上保存的静态资源实行实时备份(inotify + rsync)。
3.任务解决方案
1.环境准备
需要准备两台机器,有yum源(网络源和epel源)
web-server:192.168.1.13
nfs-server:192.168.1.14
2.详细步骤
第一步:搭建nfs服务
1)停用防火墙和selinux
[root@nfs-server ~]# systemctl stop firewalld
[root@nfs-server ~]# setenforce 0
2)安装2个依赖包
[root@nfs-server ~]# yum -y install rpcbind nfs-utils
3)配置/etc/exports配置文件
[root@nfs-server ~]# vim /etc/exports
4)启动服务
[root@nfs-server ~]# service rpcbind start
Redirecting to /bin/systemctl start rpcbind.service
[root@nfs-server ~]# systemctl start nfs
5)查看端口占用
[root@nfs-server ~]# netstat -lnput | grep 111
6)确定nfs服务区正常启动
第二步:搭建web服务
1)停⽤防火墙和selinux
[root@web-server ~]# systemctl stop firewalld
[root@web-server ~]# setenforce 0
2)安装nginx,nfs相关依赖包
[root@web-server ~]#tar -zxvf nginx-1.22.1.tar.gz #解压nginx包
[root@web-server ~]#cd nginx-1.22.1
[root@web-server nginx-1.22.1]# ls
auto CHANGES.ru configure html Makefile objs src
CHANGES conf contrib LICENSE man README
[root@web-server nginx-1.22.1]# ./configure #编译前的配置和依赖检查
[root@web-server nginx-1.22.1]# make && make install #编译安装
[root@web-server ~]# yum -y install rpcbind nfs-utils #安装nfs依赖包
出现以下界面表示配置和依赖没有问题:
看到以下结果表示编译安装正确:
nfs依赖组件安装成功:
3)修改nginx默认的index.html,添加图片和视频
提前上传好图片和视频
[root@web-server ~]# vim /usr/share/nginx/html/index.html
4)在nginx下的html目录中创建一个挂载目录 static
[root@web-server ~]#mkdir /usr/share/nginx/html/static
5)挂载nfs服务
[root@web-server ~]# yum -y install nfs-utils nfs-utils-lib nfs4-acl-tools
[root@web-server ~]# mount -t nfs 192.168.1.14:/share /var/www/html
6)查看挂载目录
在webserver中看到nfs服务共享的数据,这个数据是连接,不是真实的文件,和rsync的数据不同
7)文件的测试
在web-server查看首页文件
启动nginx服务:
[root@web-server ~]# /usr/local/nginx/sbin/nginx
浏览器验证:http://192.168.1. 14
第三步:备份静态文件
1)克隆一个备份主机 bakuphost
2)停⽤selinx和firewalld
[root@nfs-server ~]# systemctl stop firewalld
[root@nfs-server ~]# setenforce 0
3)支持rsync备份同步 安装rsync,bakuphost nfsserver两台主机上都应该安装
[root@nfs-server ~]# yum -y install rsync
4)在nfs主机上安装inotify-tools监听/share目录
[root@nfs-server ~]# tar xf inotify-tools-3.13.tar.gz
[root@nfs-server ~]# ls
inotify-tools-3.13 inotify-tools-3.13.tar.gz
[root@nfs-server ~]# cd inotify-tools-3.13
[root@nfs-server inotify-tools-3.13]# ls
aclocal.m4 config.guess configure depcomp
libinotifytools Makefile.in NEWS
AUTHORS config.h.in configure.ac INSTALL ltmain.sh
man README
ChangeLog config.sub COPYING install-sh Makefile.am
missing src
[root@nfs-server inotify-tools-3.13]# ./configure
[root@nfs-server inotify-tools-3.13]# make
[root@nfs-server inotify-tools-3.13]# make install
5)先同步⼀份到bakuphost主机的tmp目录下
6)需要输⼊密码才会同步过去,为了自动化,设置免密
[root@nfs-server ~]# ls ~/.ssh/
known_hosts
[root@nfs-server ~]# ssh-keygen
...
[root@nfs-server ~]# ls ~/.ssh/
id_rsa id_rsa.pub known_hosts
[root@nfs-server ~]# cd ~/.ssh/
[root@nfs-server .ssh]# ssh-copy-id -i id_rsa.pub
root@192.168.1.14
7)bakhost主机上创建/bakup
mkdir /backup
8)nfsserver上创建⼀个脚本rn.sh
[root@nfs-server ~]# vim rsync.sh
#!/bin/bash
/usr/local/bin/inotifywait -mrq -e
modify,delete,create,attrib,move /share |while read events
do
rsync -a --delete /share 10.1.1.250:/backup/
echo "`date +%F\ %T`出现事件$events" >> /var/log/rsync.log 2>&1
done
9)添加x权限,执行脚本
[root@nfs-server ~]# chmod +x rsync.sh
10) 测试验证
nfs服务端改变文件:
[root@nfs-server ~]# cd /share/
[root@nfs-server share]# mkdir aaa
[root@nfs-server share]# touch test{1..3}
备份机查看数据同步情况:
[root@backup backup]# ll
total 8
drwxr-xr-x 2 root root 4096 Dec 30 07:31 aaa
-rw-r--r-- 1 root root 25 Dec 30 02:48 index.html
-rw-r--r-- 1 root root 0 Dec 30 07:32 test1
-rw-r--r-- 1 root root 0 Dec 30 07:32 test2
-rw-r--r-- 1 root root 0 Dec 30 07:32 test3