1.NFS 기본 개요
공유 스토리지, 파일 서버
NFS는 네트워크 파일 시스템 및 네트워크 파일 시스템의 약어입니다. NFS 주요 기능은 로컬 영역 네트워크를 통해 다른 호스트 시스템은 파일이나 디렉토리 사이에 공유 할 수 있도록하는 것입니다. NFS 및 Windows 네트워크 네트워크 드라이브와 유사한 주,하지만, 기업이 큰 사이트의 경우, 사용하는 더 복잡한 분산 파일 시스템 FastDFS, 글루 스터 FS (GlusterFS), HDFS, ceph에 대한 로컬 영역 네트워크, NFS 클러스터 아키텍처의 창
왜 사용하는 공유 스토리지
여러 서버들 1. 데이터 공유
2. 복수의 서버 간의 데이터의 일관성을 달성하기 위해,
2.NFS 시나리오
사례의 공유 된 스토리지 클러스터 없다
로드 밸런싱을 통해 사진을 업로드 할 1.A 사용자는로드 밸런싱은 WEB1 서버의 스케줄링 요청에 업로드됩니다.
2.B 사용자 액세스 사용자는이 Web2입니다에 아무런 그림이 없기 때문에 사용자가 사용자의 전송 사진을 B 볼 수 있도록이 시간 사용자 B가, Web2입니다에 균형을로드 할 예정이다 이미지를 업로드했습니다.
클러스터 공유 스토리지가 있습니다
1.A에 관계없이 사용자가로드 밸런싱 또는 WEB1 Web2입니다 예정 이미지를 업로드, 최종 데이터는 공유 저장 장치에 기록 될
사용자가 2.B 사용자 업로드 사진을 액세스 할 때, 모두 Web2입니다, 결국 공유 파일 스토리지 액세스가 도시에 해당하는 WEB1 또는 예정, 그래서 당신은 리소스에 액세스 할 수 있습니다
3.NFS의 작품
1. 사용자 프로세스는 데이터를 처리하는 다른 기능을 사용하여 NFS 클라이언트에 액세스 할 수
TCP / IP 방식을 통해 NFS 서버에 클라이언트에 의해 통과 2.NFS.
3.NFS 서비스를 제공합니다. 요청을받은 후, 먼저 프로세스 포트 맵 포트 매핑을 호출합니다.
NFS 클라이언트가 NFS 서버를 연결할 수있는 권한이 있는지 여부를 결정하는 4.nfsd 과정.
5.Rpc.mount 프로세스는 클라이언트가 인증을위한 대응하는 권한을 갖고 있는지 여부를 판정한다.
6.idmap 사용자 매핑 프로세스가 압축 및 로컬 에너지 인식을 전환 할 요청 기능에 대응하는 제 마지막 NFS 서버 명령을 달성하기 위해, 커널 드라이버 하드웨어하여 커널로 전송된다.
참고 : RPC 원격 프로 시저 호출, 당신은 NFS의 RPC 서비스를 사용해야합니다
참고 : RPC 원격 프로 시저 호출, 당신은 NFS의 RPC 서비스를 사용해야합니다
4.NFS 배포
1) 환경 준비
호스트 이름 | 역할 | WAN IP | IP 네트워크 |
---|---|---|---|
지원 | NFS 클라이언트 | 10.0.0.41 | 172.16.1.41 |
NFS | NFS 서버 측 | 10.0.0.31 | 172.16.1.31 |
WEB01 | NFS 클라이언트 | 10.0.0.7 | 172.16.1.7 |
注意: 不要忘记关闭防火墙, 以免默认的防火墙策略禁止正常的NFS
共享服务
2)关闭防火墙和selinux
#1.关闭Firewalld防火墙
[root@nfs ~]# systemctl disable firewalld
[root@nfs ~]# systemctl stop firewalld
#2.关闭selinux防火墙
[root@nfs ~]# sed -ri '#^SELINUX=#cSELINUX=Disabled' /etc/selinux/config
[root@nfs ~]# setenforce 0
3)安装nfs服务端
yum -y install nfs-utils rpcbind
4)启动rpcbind
#启动rpcbind
[root@nfs01 ~]# systemctl start rpcbind
#添加开机自启
[root@nfs01 ~]# systemctl enable rpcbind
5)检测端口和进程
[root@nfs01 ~]# ps -ef|grep rpc
rpc 11746 1 0 01:12 ? 00:00:00 /sbin/rpcbind -w
root 11750 11421 0 01:15 pts/1 00:00:00 grep --color=auto rpc
[root@nfs01 ~]# netstat -lntup|grep 111
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd tcp6 0 0 :::111 :::* LISTEN 1/systemd udp 0 0 0.0.0.0:111 0.0.0.0:* 1/systemd udp6 0 0 :::111 :::* 1/systemd
6)编辑配置文件
NFS服务程序的配置文件为/etc/exports,需要严格按照共享目录的路径 允许访问的NFS客户端(共享权限参数)格式书写,定义要共享的目录与相应的权限
将nfs服务端的/data目录共享给172.16.1.0/24网段内的所有主机
1) 所有客户端主机都拥有读写权限
2) 在将数据写入到NFS服务器的硬盘中后才会结束操作,最大限度保证数据不丢失
3) 将所有用户映射为本地的用户(www)
#NFS客户端地址与权限之间没有空格
[root@nfs01 ~]# vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
6.1创建/data目录,www用户和组
#在NFS服务器上建立用于NFS文件共享的目录,并设置对应权限
[root@nfs01 ~]# mkdir /data
[root@nfs01 ~]# groupadd www -g 666
[root@nfs01 ~]# useradd www -u 666 -g 666
[root@nfs01 ~]# chown -R www.www /data
[root@nfs01 ~]# ll -d /data/
drwxr-xr-x 3 www www 53 Sep 3 02:08 /data/
#NFS共享目录会记录至/var/lib/nfs/etab,如果该目录不存在共享信息,请检查/etc/exports是否配置错误
6.2启动NFS、RPCBIND
[root@nfs01 ~]# systemctl restart rpcbind nfs-server
#加入开机自启
[root@nfs ~]# systemctl enable rpcbind nfs-server
#检测端口
[root@nfs ~]# netstat -lntup
#检测文件
[root@nfs ~]# cat /var/lib/nfs/etab
7)部署NFS客户端
#安装客户端,仅启动rpc服务
[root@web01 ~]# yum install -y rpcbind nfs-utils
[root@backup ~]# yum install -y rpcbind nfs-utils
8)启动rpcbind
#只启动rpcbind
[root@web01 ~]# systemctl start rpcbind
[root@backup ~]# systemctl start rpcbind
#添加开机自启
[root@web01 ~]# systemctl enable rpcbind
[root@backup ~]# systemctl enable rpcbind
9)查看可挂载点
#客户端使用showmount -e查看远程服务器rpc提供的可挂载nfs信息
[root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
10)挂载目录
#使用mount命令并结合-t参数, 指定要挂载的文件系统的类型, 并在命令后面写上服务器的IP地址, 以及服务器上的共享目录, 最后需要写上要挂载到本地系统(客户端)的目录。
[root@backup ~]# mount -t nfs 172.16.1.31:/data /backup
#查看挂载信息(mount也可以查看)
[root@backup ~]# df –h
#挂载成功后可以进行增删改操作
#如果希望NFS文件共享服务能一直有效,则需要将其写入到fstab文件中
#如果不希望使用NFS共享, 可进行卸载
10.1挂载成功后可以进行增删改操作
#使用客户端往nfs存储写入
[root@web01 ~]# echo "nfs-client" > /backup/test.txt
#检查nfs服务端是否存在客户端创建的新文件
[root@nfs ~]# cat /data/test.txt
nfs-client
10.2开机挂载
如果希望NFS
文件共享服务能一直有效,则需要将其写入到fstab
文件中
#编辑fstab文件
[root@web01 ~]## vim /etc/fstab
172.16.1.31:/data /backup nfs defaults 0 0
#验证fstab是否写正确
[root@web01 ~]# mount -a
10.3卸载nfs
如果不希望使用NFS
共享, 可进行卸载
[root@web01 ~]# umount /backup
#注意:卸载的时候如果提示”umount.nfs: /backup: device is busy”
#1.切换至其他目录, 然后在进行卸载。
#2.NFS Server宕机, 强制卸载umount -lf /backup
10.4增加安全性
在企业工作场景,通常情况NFS服务器共享的只是普通静态数据(图片、附件、视频),不需要执行suid、exec
等权限,挂载的这个文件系统只能作为数据存取之用,无法执行程序,对于客户端来讲增加了安全性。例如: 很多木马篡改站点文件都是由上传入口上传的程序到存储目录。然后执行的。
#通过mount -o指定挂载参数,禁止使用suid,exec,增加安全性能
[root@web01 ~]# mount -t nfs -o nosuid,noexec,nodev 172.16.1.31:/data /backup
10.5增加性能
有时也需要考虑性能相关参数[可选]
#通过mount -o指定挂载参数,禁止更新目录及文件时间戳挂载
[root@web01 ~]# mount -t nfs -o noatime,nodiratime 172.16.1.31:/data /backup
11)部署代码,设置web、backup的用户权限
#安装服务,httpd(apache)和php
[root@web01 ~]# yum install -y httpd php
#建议:将客户端也创建一个uid为666,gid为666,统一身份,避免后续出现权限不足的情况
#创建www用户和组
[root@backup ~]# groupadd www -g 666
[root@backup ~]# useradd www -u 666 -g 666
[root@backup ~]# id www
uid=666(www) gid=666(www) groups=666(www)
1.修改httpd的配置文件
[root@web01 ~]# vim /etc/httpd/conf/httpd.conf
修改:
User www
Group www
#启动服务
[root@web01 ~]# systemctl restart httpd
#查看
[root@web01 ~]# ps -ef|grep httpd
2.查找httpd的站点目录
[root@web01 ~]# rpm -ql httpd|grep html
[root@web01 ~]# cd /var/www/html
[root@web01 html]# rz windows-提交作业代码.zip
[root@web01 html]# yum install -y unzip
[root@web01 html]# unzip windows-提交作业代码.zip
3.修改上传目录
#修改上传目录
[root@web01 html]# vim /var/www/html/upload_file.php
$wen="/var/www/html/tupian";
#创建目录并授权
[root@web01 html]# mkdir tupian
[root@web01 html]# chown -R www.www tupian/
#挂载共享存储
[root@web01 html]# mount -t nfs 172.16.1.31:/data /var/www/html/tupian
4.重启服务
[root@web01 ~]# systemctl restart httpd
可进行上传
5.NFS配置详解
执行man exports命令,然后切换到文件结尾,可以快速查看如下样例格式:
nfs共享参数 | 参数作用 |
---|---|
rw* | 读写权限 |
ro | 只读权限 |
root_squash | 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户(不常用) |
no_root_squash | 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员(不常用) |
all_squash | 无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户(常用) |
no_all_squash | 无论NFS客户端使用什么账户访问,都不进行压缩 |
sync* | 同时将数据写入到内存与硬盘中,保证不丢失数据 |
async | 우선 메모리에 데이터를 저장 한 다음 디스크에 기록됩니다,이 더 높은 효율을하지만, 데이터가 손실 될 수 있습니다 |
anonuid에 * | all_squash에 사용하는 구성의 UID는 NFS 사용자를 지정, 시스템이 있어야합니다 |
anongid에 * | all_squash에 사용하는 구성의 UID는 NFS 사용자를 지정, 시스템이 있어야합니다 |
권한 연습 RO 확인
1) RW 인 공급자 파라미터를 수정 RO
[root@nfs ~]# cat /etc/exports
/data 172.16.1.0/24(ro,sync,all_squash)
[root@nfs ~]# systemctl restart nfs-server
2) 클라이언트 인증
[root@nfs-client ~]# mount -t nfs 172.16.1.31:/data /mnt
[root@nfs-client ~]# df -h
Filesystem Size Used Avail Use% Mounted on
172.16.1.31:/data 98G 1.7G 97G 2% /mnt
# 发现无法正常写入文件
[root@backup mnt]# touch file
touch: cannot touch ‘file’: Read-only file system
all_squash에, anonuid에, anongid에 권한을 확인
1) NFS 서버 구성
[root@nfs ~]# cat /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
2) 서버는 해당 사용자를 만들 필요
[root@nfs ~]# groupadd -g 666 www
[root@nfs ~]# useradd -u 666 -g 666 www
[root@nfs ~]# id www
uid=666(www) gid=666(www) groups=666(www)
3) 과부하 NFS 서버
[root@nfs ~]# systemctl restart nfs-server
[root@nfs ~]# cat /var/lib/nfs/etab
/data 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=666,anongid=666,sec=sys,secure,root_squash,all_squash)
공유 디렉토리 WWW 4) 인증
[root@nfs ~]# chown -R www.www /data/
[root@nfs ~]# ll -d /data/
drwxr-xr-x 3 www www 53 Sep 3 02:08 /data/
5) 클라이언트 인증
[root@backup ~]# umount /mnt/
[root@backup ~]# mount -t nfs 172.16.1.31:/data /mnt
6) 문서를 볼 수있는 클라이언트는 ID가 666입니다
[root@backup ~]# ll /mnt/
drwxr-xr-x 2 666 666 6 Sep 3 02:08 rsync_dir
-rw-r--r-- 1 666 666 0 Sep 3 02:08 rsync_file
7) 클라이언트는 여전히 / mnt 아래 디렉토리에 파일을 쓸 수있다
[root@backup mnt]# touch fff
[root@backup mnt]# mkdir 111
[root@backup mnt]# ll
drwxr-xr-x 2 666 666 6 Sep 3 03:05 111
-rw-r--r-- 1 666 666 0 Sep 3 03:05 fff
8) 추천 : 클라이언트는 또한, UID가 666 인 만듭니다가 발생할 후속 인권 상황의 부족을 방지하기 위해, 666, 통일 된 정체성을 gid가
[root@backup mnt]# groupadd -g 666 www
[root@backup mnt]# useradd -g 666 -u 666 www
[root@backup mnt]# id www
uid=666(www) gid=666(www) groups=666(www)
신원 9) 최종 검사 문서
[root@backup mnt]# ll /mnt/
total 4
drwxr-xr-x 2 www www 6 Sep 3 03:05 111
-rw-r--r-- 1 www www 0 Sep 3 03:05 fff
6.NFS 저장 개요
1.NFS 스토리지의 장점
1) NFS 파일 시스템은 사용이 간단하고, 신뢰할 수있는 데이터, 서비스 및 안정성을 배포하는 중소기업의 요구를 충족하기 쉽습니다. 2) NFS 파일 시스템은 파일 시스템의 데이터를 저장하는 모든 데이터를 볼 수있다.
2.NFS 저장 제한
은 고 가용성 유지 보수 문제 웹 -> NFS ()을 구축 할 경우 1), 단일 장애 지점이 -> backup2 ) NFS의 일반 텍스트 데이터, 데이터의 검사를하지 않습니다. 3) NFS 클라이언트 서비스를 암호 인증, 보안, 일반 (내부 네트워크 사용)하지 마운트
3.NFS 애플리케이션 추천
1) 제조 시나리오 정적 데이터는 가능한 한 압력 2) 정적 자원에 저장하면 CDN의 JPG 캐시해야 줄이기 위해 프론트 엔드, 백엔드 저장소 밀어한다 \ PNG \ MP4 \ AVI \ CSS \ js3) 만약 더 캐시 아키텍처 없습니다 자체 또는 너무뿐만 아니라 쓸모없는 멀티 스토리지 역사 문제