NFS 공유 저장

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입니다에 균형을로드 할 예정이다 이미지를 업로드했습니다.

IMG

클러스터 공유 스토리지가 있습니다

1.A에 관계없이 사용자가로드 밸런싱 또는 WEB1 Web2입니다 예정 이미지를 업로드, 최종 데이터는 공유 저장 장치에 기록 될

사용자가 2.B 사용자 업로드 사진을 액세스 할 때, 모두 Web2입니다, 결국 공유 파일 스토리지 액세스가 도시에 해당하는 WEB1 또는 예정, 그래서 당신은 리소스에 액세스 할 수 있습니다

IMG

3.NFS의 작품

1. 사용자 프로세스는 데이터를 처리하는 다른 기능을 사용하여 NFS 클라이언트에 액세스 할 수

TCP / IP 방식을 통해 NFS 서버에 클라이언트에 의해 통과 2.NFS.

3.NFS 서비스를 제공합니다. 요청을받은 후, 먼저 프로세스 포트 맵 포트 매핑을 호출합니다.

NFS 클라이언트가 NFS 서버를 연결할 수있는 권한이 있는지 여부를 결정하는 4.nfsd 과정.

5.Rpc.mount 프로세스는 클라이언트가 인증을위한 대응하는 권한을 갖고 있는지 여부를 판정한다.

6.idmap 사용자 매핑 프로세스가 압축 및 로컬 에너지 인식을 전환 할 요청 기능에 대응하는 제 마지막 NFS 서버 명령을 달성하기 위해, 커널 드라이버 하드웨어하여 커널로 전송된다.

참고 : RPC 원격 프로 시저 호출, 당신은 NFS의 RPC 서비스를 사용해야합니다

IMG

참고 : 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)编辑配置文件

IMG

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) 만약 더 캐시 아키텍처 없습니다 자체 또는 너무뿐만 아니라 쓸모없는 멀티 스토리지 역사 문제

추천

출처www.cnblogs.com/chenmiao531759321/p/11415106.html