NFS存储服务部署(上)

1.1 NFS服务介绍

1.1.1 什么是NFS?

1. NFS——Network File Systemt网络文件系统,叫称为网络共享文件系统

2. 作用:通过网络(一般为局域网)让不同主机系统之间可以共享文件

3. NFS服务和winodws系统的网络共享很相似,但NFS无法部署在windows上

4. windows与linux网络共享使用FTP、samba,它们都支持windows与linux之间共享

5. 如大型网站,还可能用到分布式文件系统,如:moosefs( mfs )、gfs、fastdfs

1.1.2 什么是文件系统?

1. 在磁盘或分区中组织管理文件的一种方式

2. 企业中:磁盘先做raid——分区——格式化(创建文件系统)——挂载使用

1.1.3 NFS在企业中的应用场景

1. 为什么要用NFS软件?

  可以实现web集群中服务器数据一致性。

因负载均衡服务器会将访问流量分流处理,这样不会便于用户相互之间访问

服务器之间的数据同步虽然实现用户互访,但实现过程相对复杂

服务器可以统一管理存储用户访问数据,实现用户互访

nfs 共享zfs文件系统无法写 windows nfs 文件共享部署_nfs 共享zfs文件系统无法写

 

1.1.4 共享存储服务分类:

硬件存储:IBM oracle(收购了sun) EMC  (去IOE,用BAT)

软件存储:NFS  mfs  FTP  samba

1.2 NFS系统原理

1.2.1 简单描述NFS工作原理:

1. 部署好NFS服务,在NFS服务端创建一个video共享目录

2. web服务器(NFS客户端),创建一个本地video目录,作为一个挂载点

3. web服务器通过mount命令实现网络挂载(mount -nfs 172.16.1.41:/video),将NFS服务器上的

目录挂载到本地video挂载点上

4. web服务器(NFS客户端)上在video目录中,增删改查的操作,都等价于在NFS服务器端video 目录中的操作

1.2.2 NFS系统挂载结构

 

nfs 共享zfs文件系统无法写 windows nfs 文件共享部署_共享目录_02

 

1.2.3 什么是RPC

remote procedure call 远程过程调用:端口号111

是一种通过网络向远程计算机上请求服务的一种协议。

1.2.4 NFS的工作流程

1. 启动RPC服务,建立中介服务

2. 启动NFS服务,开启房源信息,向RPC服务进行注册

3. RPC服务接收到NFS服务进程信息和对应端口号

4. NFS客户端向RPC服务111端口发出请求(访问共享目录)

5. RPC服务响应NFS客户端请求

6. NFS客户端与NFS服务端共享目录建立网络连接,实现数据网络存储

下图:用房东、中介、客户举例

nfs 共享zfs文件系统无法写 windows nfs 文件共享部署_共享目录_03

 

下图:没有RPC的情况是这样的,因每个服务进程对应的端口号不同,并且是随机的,所有对于客户端开说不知道该访问哪个端口。

 

nfs 共享zfs文件系统无法写 windows nfs 文件共享部署_nfs 共享zfs文件系统无法写_04

下图:RPC服务的作用,NFS服务端的每个服务进程都会向RPC服务进程注册,客户端也只需访问RPC服务的111端口即可,由RPC服务来告诉客户端对于的服务与端口号。

nfs 共享zfs文件系统无法写 windows nfs 文件共享部署_RPC_05

 

1.2.5 当用户通过挂载访问NFS共享目录时的工作流程

nfs 共享zfs文件系统无法写 windows nfs 文件共享部署_客户端_06

 

 

1.3 NFS网络共享文件系统服务部署流程

1.3.1 NFS服务端部署流程

1. 检查NFS服务相关软件是否安装

    rpm -qa |egrep 'rpcbind|nfs-utils'

    如没有,则yum install rpcbind nfs-utils -y 安装一下。


2. 编写NFS服务配置文件

vim /etc/exports

1)定义共享目录,如下面的/data/目录就是要共享的目录

2)定义允许使用共享目录的主机或网络地址信息“24和(”之间没有空格,3)(定义共享目录权限信息)

    /data 172.16.1.0/24(rw,sync,all_squash)

    保存退出

3)创建共享目录

    mkdir /data

4)授权共享目录

    系统默认有一个nfsnobody用户

    chown -R nfsnobody.nfsnobody /data

5)启动rpcbind、nfs-utils服务

    /etc/init.d/rpcbind start

    /etc/init.d/rfs start

    注:如果须重启服务,使用relod重新加载配置文件

6)本地检查测试

    rpcinfo -p localhost 查看RPC服务中是否有注册的进程服务和对应端口号

    showmount -e 172.16.1.31 检查是否有可以共享的目录



1.3.2 NFS客户端部署流程

1. 确认是否安装NFS服务相关软件

    rpm -qa |egrep 'rpc|nfs'

2. 检查局域网中是否存在共享存储服务(目录)

    rpcinfo -p 172.16.1.31 查看RPC服务中是否有注册的进程服务和对应端口号

    showmount -e 172.16.1.31 检查是否有可以共享的目录

3. 实现共享目录应用(局域网挂载)

    mount -t nfs 172.16.1.31:/data/ /mnt

    df -h

1.3.3 NFS服务常见进程

rpc.statd主要作用:检查数据存储的一致性

rpc.rquotad主要作用:控制磁盘配额

rpc.mountd主要作用:核对/etc/exports配置文件中的权限,和NFS服务器端本地文件系统权限

rpc.idpamd主要作用:实现用户压缩/映射(经用户压缩后,身份转换为nfsnobody)


ps -ef |grep "nfs|rpc"   #查看与NFS相关的进程

nfs 共享zfs文件系统无法写 windows nfs 文件共享部署_客户端_07

 

 

1.3.4 NFS服务配置文件格式说明

1. man exports 查看格式

nfs 共享zfs文件系统无法写 windows nfs 文件共享部署_RPC_08

 

第一段:要共享的目录(每个目录独占一行)

第二段:用于哪个网段或某个主机访问(主机:10.0.0.30,网络:10.0.0.0/24),后面没有空格接着写(权限)

1.3.5 影响访问NFS服务器的权限

1. NFS配置文件权限,中小括号内的rw权限

2. 本地文件系统权限,为了安全一般更改其属主

 

1.3.6 企业生产环境常见NFS案例

nfs 共享zfs文件系统无法写 windows nfs 文件共享部署_RPC_09

 

1.3.7 NFS配置参数权限

1. rw参数:可读写

2. ro参数:只读

:ro权限给开发人员用于读取配置文件,而不能修改

3. sync参数的作用:同步,保证数据的可靠性

同步异步对比:

异步:传输数据快、不可靠,容易丢(先存到内存中处理完后,最后在写到硬盘)

同步:安全可靠、传输数据慢(先经过内存,在写入到硬盘,在处理)

 

4. async参数:ups  AB双路电源

5. no_all_squash参数:所有用户都不映射(什么身份过来就是什么身份)

6. all_squash参数:所有用户都映射(成指定nfsnobody)

7. root_squash参数:root用户映射(成指定nfsnobody)

8. no _root_squash参数:不对root用户映射(进来NFS服务器后是root身份,权限 很大)

下图根据不同的用户是否进行身份压缩的一个说明:

nfs 共享zfs文件系统无法写 windows nfs 文件共享部署_nfs 共享zfs文件系统无法写_10

                     

nfs 共享zfs文件系统无法写 windows nfs 文件共享部署_RPC_11

 

 

 

 

1.3.8 企业实战需求:

问题:共享目录权限固定为www用户管理

在NFS配置文件中,设置了all_squash参数(全部用户都压缩/映射)

让NFS客户端可以向共享目录存储数据

实现过程:

1. 设置/data/目录权限信息

    chown www.www /data/

    先保证有

2. 编写NFS配置文件

1)先查看www用户的uid,gid信息

    id www

2)配置文件中小括号内加入www对应的uid,gid(anonuid=502,anongid=502)

    /data 172.16.1.0/24(rw,sync,all_squash,anonuid=502,anongid=502)

注:anonuid和anongid参数作用:将所有访问的用户进来NFS服务器后映射为www用户

1. 客户端要有NFS配置文件anonuid和anongid指定用户(如没有对应的用户,只有对应的uid也可以 访问,但ls -l /mnt查看目录信息时属主会显示为uid)

2. 所以客户端和服务端创建的映射用户,uid和gid信息需要保持一致(否则会权限不足)

3)重新加载nfs

    /etc/init.d/nfs reload

3. 客户端重新挂载共享目录

1)先卸载

    umount /mnt

2)再挂载

    mount -t nfs 172.16.1.31:/data /mnt

4.  进程数据输出测试

    touch /mnt/kai.txt 创建测试文件查看属主信息是否为www

    ls -l /mnt/kai.txt 查看用户属组信息