NFS问题:clnt_create: RPC: Port mapper failure – Unable to receive: errno 113 (No route to host)

摘要:NFS问题:nfs与rpcbind都正常启动了,并且已经发布共享目录/tmp。

在客户端查看时,出现如下错误提示:

[[email protected]~]# showmounte192.168.122.10
clnt_create:RPC:Portmapperfailure-Unabletoreceive:errno113(Noroutetohost)

解决方法:关闭被访问的NFS服务器上的防火墙和selinux(当然只适合个人测试环境),执行systemctlstopfire

NFS问题:

nfs与rpcbind都正常启动了,并且已经发布共享目录/tmp。

在客户端查看时,出现如下错误提示:

[[email protected] ~]# showmount -e 192.168.122.10
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)

解决方法:

关闭被访问的NFS服务器上的防火墙和selinux(当然只适合个人测试环境)

执行

systemctl stop firewalld
iptables -F
setenforce 0

在客户端重新查看showmount -e 192.168.122.10

在客户端showmount -e 192.168.122.10

遇到以下错误提示“clnt_create: RPC: Program not registered”

解决方法:

服务端[[email protected] /]# rpc.mountd 即可

客户端查看

[[email protected] ~]# showmount -e 192.168.122.10

Export list for server.example.com:/tmp *(rw,sync,no_root_squash)

nfs挂载根文件系统

1.安装NFS

     
nfs原理是通过网络,将远程主机共享的文件系统,挂载到本机。Ubuntu 12.04上默认是没有安装NFS服务器的,首先要安装NFS服务程序:

先执行 # apt-get update

未分类

然后执行 #  sudo apt-get install nfs-kernel-server

未分类

(安装nfs-kernel-server时,apt会自动安装nfs-common和portmap) 这样,宿主机就相当于NFS Server。

2.宿主机NFS的配置

   

2.1 修改配置文件/etc/exports

          
在终端下用 # vi  /etc/exports打开exports文件。

如果你没有配置过这个文件的话此文件应该是空的。
      
在开始部分写入  /home/topeet/targetNFS/   * (rw,sync,no_root_squash)

未分类

/home/topeet/targetNFS/ -- 与客户机共享的目录,在这里我的共享目录为  /home/topeet/targetNFS/;

其中:

*      -- 表示允许任意用户使用,也可以使用具体IP;
(rw,sync,no_root_squash)  -- rw,挂载此目录的客户机对此目录有读写权利;sync,……;no_root_squash,挂载此目录的客户机享有主机root的权利;

我是将主机的根目录设置为共享目录  /  *(rw,sync,no_root_squash)
OK,保存,退出。
修改完成之后输入:#  exportfs –rv来使配置文件生效
——————— 
 

3.重启nfs(每一次修改exports都要重启nfs)

/etc/init.d/nfs-kernel-server restart
/etc/init.d/portmap restart

4.本地测试

现在可以在本机上试一下:

#sudo mount -t nfs localhost:/home/kevin /mnt

注:localhost为本机linux的IP地址

这样就把共享目录挂到了/mnt目录,取消挂载用:

#sudo umount /mnt

如果用在嵌入式设备上挂载,要加上参数-o nolock

我在开发板上使用的挂载命令:

mount -t nfs -o nolock 192.168.1.8:/home/kevin /mnt

CentOS 7中搭建NFS文件共享存储服务的完整步骤

如果仅仅只是希望搭建一个linux之间进行文件共享的服务器,而不是所有异构的系统之间共享的话,nfs是一个不错的选择。下面这篇文章主要给大家介绍了关于在CentOS 7中搭建NFS文件共享存储服务的完整步骤,需要的朋友可以参考下

前言

NFS(Network File System)意为网络文件系统,它最大的功能就是可以通过网络,让不同的机器不同的操作系统可以共享彼此的文件。简单的讲就是可以挂载远程主机的共享目录到本地,就像操作本地磁盘一样,非常方便的操作远程文件。

本文将给大家讲解如何在CentOS7上安装和配置NFS服务器。

下面话不多说了,来一起看看详细的介绍吧

准备

我们需要两台CentOS7机器,我们用虚拟机做测试,分别做NFS服务器和客户端,配置如下:

  • NFS服务器ip:192.168.11.31

  • 客户端ip:192.168.11.34

我们要实现的目标是:在NFS服务器上共享一个目录,在客户端上可以直接操作NFS服务器上的这个共享目录下的文件。

NFS服务器配置

1.安装NFS服务

首先使用yum安装nfs服务:

yum -y install rpcbind nfs-utils

2.创建共享目录

在服务器上创建共享目录,并设置权限。

mkdir /data/share/
chmod 755 -R /data/share/

3.配置NFS

nfs的配置文件是 /etc/exports ,在配置文件中加入一行:

/data/share/ 192.168.11.34(rw,no_root_squash,no_all_squash,sync)

这行代码的意思是把共享目录/data/share/共享给192.168.11.34这个客户端ip,后面括号里的内容是权限参数,其中:

  • rw 表示设置目录可读写。

  • sync 表示数据会同步写入到内存和硬盘中,相反 rsync 表示数据会先暂存于内存中,而非直接写入到硬盘中。

  • no_root_squash NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,也拥有root权限。

  • no_all_squash 不论NFS客户端连接服务端时使用什么用户,对服务端分享的目录来说都不会拥有匿名用户权限。

如果有多个共享目录配置,则使用多行,一行一个配置。保存好配置文件后,需要执行以下命令使配置立即生效:

exportfs -r

4.设置防火墙

如果你的系统没有开启防火墙,那么该步骤可以省略。

NFS的防火墙特别难搞,因为除了固定的port111、2049外,还有其他服务如rpc.mounted等开启的不固定的端口,这样对防火墙来说就比较麻烦了。为了解决这个问题,我们可以设置NFS服务的端口配置文件。

修改/etc/sysconfig/nfs文件,将下列内容的注释去掉,如果没有则添加:

RQUOTAD_PORT=1001
LOCKD_TCPPORT=30001
LOCKD_UDPPORT=30002
MOUNTD_PORT=1002

保存好后,将端口加入到防火墙允许策略中。执行:

firewall-cmd --zone=public --add-port=111/tcp --add-port=111/udp --add-port=2049/tcp --add-port=2049/udp --add-port=1001/tcp --add-port=1001/udp --add-port=1002/tcp --add-port=1002/udp --add-port=30001/tcp --add-port=30002/udp --permanent
firewall-cmd --reload

5.启动服务

按顺序启动rpcbind和nfs服务:

systemctl start rpcbind
systemctl start nfs

加入开机启动:

systemctl enable rpcbind 
systemctl enable nfs

nfs服务启动后,可以使用命令 rpcinfo -p 查看端口是否生效。

服务器的后,我们可以使用 showmount 命令来查看服务端(本机)是否可连接:

[root@localhost ~]# showmount -e localhost
Export list for localhost:
/data/share 192.168.11.34

出现上面结果表明NFS服务端配置正常。

客户端配置

1.安装rpcbind服务

客户端只需要安装rpcbind服务即可,无需安装nfs或开启nfs服务。

yum -y install rpcbind

2.挂载远程nfs文件系统

查看服务端已共享的目录:

[root@localhost ~]# showmount -e 192.168.11.31
Export list for 192.168.11.31:
/data/share 192.168.11.34

建立挂载目录,执行挂载命令:

mkdir -p /mnt/share
mount -t nfs 192.168.11.34:/data/share /mnt/share/ -o nolock,nfsvers=3,vers=3

如果不加 -onolock,nfsvers=3 则在挂载目录下的文件属主和组都是nobody,如果指定nfsvers=3则显示root。

如果要解除挂载,可执行命令:

umount /mnt/share

3.开机自动挂载

如果按本文上面的部分配置好,NFS即部署好了,但是如果你重启客户端系统,发现不能随机器一起挂载,需要再次手动操作挂载,这样操作比较麻烦,因此我们需要设置开机自动挂载。我们不要把挂载项写到/etc/fstab文件中,因为开机时先挂载本机磁盘再启动网络,而NFS是需要网络启动后才能挂载的,所以我们把挂载命令写入到/etc/rc.d/rc.local文件中即可。

[root@localhost ~]# vim /etc/rc.d/rc.local
#在文件最后添加一行:
mount -t nfs 192.168.11.34:/data/share /mnt/share/ -o nolock,nfsvers=3,vers=3

保存并重启机器看看。

测试验证

查看挂载结果,在客户端输入 df -h

文件系统    容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root   18G 5.0G 13G 29% /
devtmpfs      904M  0 904M 0% /dev
tmpfs       916M  0 916M 0% /dev/shm
tmpfs       916M 9.3M 906M 2% /run
tmpfs       916M  0 916M 0% /sys/fs/cgroup
/dev/sda1      497M 164M 334M 33% /boot
tmpfs       184M  0 184M 0% /run/user/0
192.168.11.31:/data/share  18G 1.7G 16G 10% /mnt/share

看到最后一行了没,说明已经挂载成功了。接下来就可以在客户端上进入目录/mnt/share下,新建/删除文件,然后在服务端的目录/data/share查看是不是有效果了,同样反过来在服务端操作在客户端对应的目录下看效果。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

NFS企业上机实战

1.在NFS服务器A上共享 /data/w_shared/data/r_shared 两个文件目录,允许从NFS客户端B,C上分别挂载共享目录后实现从B,C上只读/data/r_shared ,可写/data/w_shared

2.NFS客户端B上的挂载点为/data/b_w(写),/data/b_r(读)

3.NFS客户端C上的挂载点为/data/w_qzc(写),/data/r_qzc(读)

4.从NFS客户端B上的NFS可写挂载耟目录创建任意文件,从C上可以删除这个创建的文件,反之也可以。

#服务端配置
[root@zcjscl ~]# vim /etc/exports 
添加
/data/w_shared 0.0.0.0/24(rw,sync)
/data/r_shared 0.0.0.0/24(ro)

[root@zcjscl ~]# mkdir /data/w_shared /data/r_shared -p
[root@zcjscl ~]# chown -R nfsnobody /data/w_shared/ /data/r_shared 
[root@zcjscl ~]# /etc/init.d/rpcbind restart
[root@zcjscl ~]# /etc/init.d/nfs restart
[root@zcjscl ~]#chkconfig nfs on
[root@zcjscl ~]#chkconfig rpcbind on
[root@zcjscl ~]#/etc/init.d/iptables stop
[root@zcjscl ~]#getenforce
[root@zcjscl ~]#showmount -e 127.0.0.1   //测试
#B客户端配置,挂载

[root@zcjscl ~]#mkdir /data/{b_w,b_r} -p
[root@zcjscl ~]#showmount -e 192.168.1.99
[root@zcjscl ~]#/etc/init.d/rpcbind restart
[root@zcjscl ~]#chkconfig rpcbind on
[root@zcjscl ~]#mount -t nfs 192.168.1.99:/data/w_shared /data/b_w/
[root@zcjscl ~]#mount -t nfs 192.168.1.99:/data/r_shared /data/b_r/
[root@zcjscl ~]#df -h //检查
#C客户端配置,挂载

[root@zcjscl ~]#mkdir /data/{w_qzc,r_qzc} -p
[root@zcjscl ~]#showmount -e 192.168.1.99
[root@zcjscl ~]#/etc/init.d/rpcbind restart
[root@zcjscl ~]#chkconfig rpcbind on
[root@zcjscl ~]#mount -t nfs 192.168.1.99:/data/w_shared /w_qzc/
[root@zcjscl ~]#mount -t nfs 192.168.1.99:/data/r_shared /r_qzc/
[root@zcjscl ~]#df -h //检查
#挂载优化

 读取限制       写入限制     不更新时间
rsize=32768,wsize=32768,intr,noatime

mount -t nfs -o rsize=32768,wsize=32768,intr,noatime 192.168.1.99:/data/w_shared /w_qzc/

kubernetes pvc与nfs

此前在存储卷类型中介绍过pvc,以及其他的存储卷类型,本节笔记介绍pvc和nfs的使用

PVC

在pod中只需要定义存储卷,定义时只需要说明需要用到的大小,这个类型就是pvcl类型存储卷
而pvc存储卷必须与当前名称空间中的pvc,建立直接绑定关系,而pvc必须与pv建立绑定关系,而pv则是某个真正存储设备的存储空间,如下:

未分类

pv与pvs是kubernetes上抽象的,且标准的资源,与创建其他的pod中资源一样

用法

在存储类型中有很多存储类型被划分成预想的存储空间,这些存储空间被kubernetes映射到pv,在创建资源时,定义pod,且定义pod中的pvc即可。前提是pvc已经被创建好。pvc与pv之间没有被调用则空载,当pvc调用时则会与某个pv进行绑定(数据存放在pv之上)

pvc绑定那个pv取决于pod创建的用户定义volumes请求,如下:

1. 满足空间大小则绑定,不满足则不绑定
​2. 满足访问类型:单读,单写,单读/写(pv只有)。多读写,多读,多写,

这样一来就分成大小三组来定义kubernetes。如下:

未分类

对于存储设备由存储管理员进行管理,pv与pvc由k8s集群管理员或者用户来管理。集群管理员将存储空间引入到集群内定义为PV,随后用户(创建pod用户)创建pvc(pv create),(创建pod之前创建pvc)pvc根据配置信息查找合适pv申请(如果没有适当的pv则绑定失败,直到创建一个合适的符合条件的pv)。

  • pv与pvc是一 一对应的,一旦pv被某个pvc占用,显示绑定状态,就不会被其他pvc使用。但是,一旦pvc创建完成(与pv绑定),pvc就相当于一个存储卷,而存储卷(绑定过pv的pvc)能够被多个pod使用。而多个pod挂载一个pvc存储卷,这种方式就是多路访问(是否支持取决于accessMode)。

claimName: pvc名称
可以使用kubectl explain pvc查看标准使用,其中pvc kind是PersistentVolumeClaim,在spec中需要指明:

accessMode(访问模型。是否支持多人读写,或者单人读写等。accessmode支持列表,意味着可以支持多中模式。这里定义的权限只能是存储设备的子集)
ReadWriteOnce – 卷可以由单个节点以读写方式挂载
ReadOnlyMany – 卷可以由许多节点以只读方式挂载
ReadWriteMany – 卷可以由许多节点以读写方式挂载
​ RWO – 单路读写
​ ROX – 多路只读
​ RWX – 多路读写
并不是每个卷都支持多路,参考官网的表格,NFS多路单路都支持
resources:资源限制。(至少多少空间)
selector: 标签选择器。使用标签选择器进行绑定
storageClassName:存储类名称
volumeMode: 后端存储卷模式。PV类型限制。如果有合适的pv则会绑定,如果没有则会挂起
volumeName: 存储卷名称。填写则直接绑定。
capacity : 指定空间大小通过资源访问模型进行定义,关注resources,我们可以定义成Ei,Pi,Ti,Gi,Mi,Ki

storage: 5Gi表示5G

apiSersion: v1
kind: PersistentVolume
metadata:
  name: linuxea-5
  labels: 
    name: v5
spec:
  nfs:
    path: /data/volumes/linuxea-5
    server: 10.0.1.61
  accessModes: ["ReadWriteMany","ReadWriteOnce"]
  capacity:
    storage: 5Gi

创建

1. 准备存储(NFS)

10.0.1.61 创建几个目录进行单独的挂载,分别是linuxea-1-5

[root@Linuxea-VM-Node_10_0_1_61 /data/linuxea-volumes]# mkdir linuxea-{1,2,3,4,5}
[root@Linuxea-VM-Node_10_0_1_61 /data/linuxea-volumes]# ls
index.html  linuxea-1  linuxea-2  linuxea-3  linuxea-4  linuxea-5  linuxea.html
[root@Linuxea-VM-Node_10_0_1_61 /data/linuxea-volumes]# cat /etc/exports
/data/linuxea-volumes/linuxea-1 10.0.0.0/8(rw,no_root_squash)
/data/linuxea-volumes/linuxea-2 10.0.0.0/8(rw,no_root_squash)
/data/linuxea-volumes/linuxea-3 10.0.0.0/8(rw,no_root_squash)
/data/linuxea-volumes/linuxea-4 10.0.0.0/8(rw,no_root_squash)
/data/linuxea-volumes/linuxea-5 10.0.0.0/8(rw,no_root_squash)
[root@Linuxea-VM-Node_10_0_1_61 /data/linuxea-volumes]# exportfs -arv
exporting 10.0.0.0/8:/data/linuxea-volumes/linuxea-5
exporting 10.0.0.0/8:/data/linuxea-volumes/linuxea-4
exporting 10.0.0.0/8:/data/linuxea-volumes/linuxea-3
exporting 10.0.0.0/8:/data/linuxea-volumes/linuxea-2
exporting 10.0.0.0/8:/data/linuxea-volumes/linuxea-1
[root@Linuxea-VM-Node_10_0_1_61 /data/linuxea-volumes]# showmount -e
Export list for Linuxea-VM-Node_10_0_1_61.dwhd.org:
/data/linuxea-volumes/linuxea-5 10.0.0.0/8
/data/linuxea-volumes/linuxea-4 10.0.0.0/8
/data/linuxea-volumes/linuxea-3 10.0.0.0/8
/data/linuxea-volumes/linuxea-2 10.0.0.0/8
/data/linuxea-volumes/linuxea-1 10.0.0.0/8

2. 创建pv

这里定义pv时候,不能定义在namespace。pv是集群级别的,不在名称空间中,所有的名称空间都可以用。但是pvc是属于名称空间的

namespace不能嵌套,namespcace属于集群资源 ,不能定义在名称空间中。所谓集群资源就是不能定义在名称空间中的。而pod,service必须定义在名称空间中。属于名称空间级别

我们之前,事先分别定义了5个pv,分别是1-5Gi的pv大小,支持单点读写和多路读写(稍后方便写入数据测试)。yaml如下:

[root@linuxea volume]# cat pv-demo.yaml 
apiVersion: v1
kind: PersistentVolume
metadata:
  name: linuxea-1
  labels: 
    name: v1
spec:
  nfs:
    path: /data/volumes/linuxea-1
    server: 10.0.1.61
  accessModes: ["ReadWriteMany","ReadWriteOnce"]
  capacity:
    storage: 1Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: linuxea-2
  labels: 
    name: v2
spec:
  nfs:
    path: /data/volumes/linuxea-2
    server: 10.0.1.61
  accessModes: ["ReadWriteMany","ReadWriteOnce"]
  capacity:
    storage: 2Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: linuxea-3
  labels: 
    name: v3
spec:
  nfs:
    path: /data/volumes/linuxea-3
    server: 10.0.1.61
  accessModes: ["ReadWriteMany","ReadWriteOnce"]
  capacity:
    storage: 3Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: linuxea-4
  labels: 
    name: v4
spec:
  nfs:
    path: /data/volumes/linuxea-4
    server: 10.0.1.61
  accessModes: ["ReadWriteMany","ReadWriteOnce"]
  capacity:
    storage: 4Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: linuxea-5
  labels: 
    name: v5
spec:
  nfs:
    path: /data/volumes/linuxea-5
    server: 10.0.1.61
  accessModes: ["ReadWriteMany","ReadWriteOnce"]
  capacity:
    storage: 5Gi

定义完成后apply启动

[root@linuxea volume]# kubectl apply -f pv-demo.yaml 
persistentvolume/linuxea-1 created
persistentvolume/linuxea-2 created
persistentvolume/linuxea-3 created
persistentvolume/linuxea-4 created
persistentvolume/linuxea-5 created

启动后使用kubectl get pv查看状态信息

[root@linuxea volume]# kubectl get pv
NAME        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM     STORAGECLASS   REASON    AGE
linuxea-1   1Gi        RWO,RWX        Retain           Available                                      3s
linuxea-2   2Gi        RWO,RWX        Retain           Available                                      3s
linuxea-3   3Gi        RWO,RWX        Retain           Available                                      3s
linuxea-4   4Gi        RWO,RWX        Retain           Available                                      3s
linuxea-5   5Gi        RWO,RWX        Retain           Available                                      3s

其中RECLAIM POLICY 叫回收策略:当一个pvc绑定某个pv,并且存储了数据,如果pv删掉,那么绑定就会失效。删除前存放有数据就会丢失,Retain保留。Recycle(回收),删除数据,将pv制空,让其他pv绑定。当然还有delelte,默认delete。参考https://kubernetes.io/docs/tasks/administer-cluster/change-pv-reclaim-policy/。Available表示当前处于可用状态。

3. 创建pvc

resources的选择是要大于等于定义的resources值
当创建好pvc后,就算删除pvc,pod数据也会保留,因为pv的回收策略是Retain(取决于回收策略),也不会删除。因此,只要不删除pvc,而删除pod,就算pv策略是Recycle(回收),也不会被删除数据。

pvc是标准的k8s资源,存储在etcd中,只要etcd没有问题,pvc就没有问题,而pod是节点资源,运行在节点之上。其他资源保存在api server集群状态存储etcd当中。

  • 在最新的版本中pv被绑定的状态下是不能够单独删除的。kubectl delete pv PVNAME
    PersistentVolumeClaim
    是独特的kind,pvc需要定义namespace
    在pvc中的accessModes是pv accessModes的子集,也就是说pv有权限,这里才有权限。在之前定义了PV的大小是1-5Gi,在这里定义的spec中storage: 5Gi(这里打大小至少要大于等于才行),假如这里定义的大小在pv中不存在则会失效。这里仍然可以使用标签管理器管理。而后在pod中定义pvc名称和volumes挂载到相应的目录

  • 我们事先已经定了pv大小,现在才能进行绑定

yaml

[root@linuxea volume]# cat pvc-demo.yaml 
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: linuxea-pvc
  namespace: default
spec:
  accessModes: ["ReadWriteMany"]
  resources: 
    requests: 
      storage: 5Gi
---
apiVersion: v1
kind: Pod
metadata: 
  name: linuxea-pvc-pod
  namespace: default
spec:
  containers:
  - name: linuxea-pod1-pvc
    image: "marksugar/nginx:1.14.a"
    ports:
      - containerPort: 88
    volumeMounts:
    - name: linuxea-image
      mountPath: /data/wwwroot/
  volumes:
  - name: linuxea-image
    persistentVolumeClaim:
      claimName: linuxea-pvc

apply创建

[root@linuxea volume]# kubectl apply -f pvc-demo.yaml 
persistentvolumeclaim/linuxea-pvc created
pod/linuxea-pvc-pod created

可使用kubectl get pvc查看已经创建好的pvc已经被Bound

[root@linuxea volume]# kubectl get pvc
NAME          STATUS    VOLUME      CAPACITY   ACCESS MODES   STORAGECLASS   AGE
linuxea-pvc   Bound     linuxea-5   5Gi        RWO,RWX                       6s

以及pod

[root@linuxea volume]# kubectl get pods -o wide
NAME              READY     STATUS    RESTARTS   AGE       IP           NODE                 NOMINATED NODE
linuxea-pvc-pod   1/1       Running   0          22s       172.16.4.7   linuxea.node-2.com   <none>

而后创建pvc之后,可查看pv已经被绑定到linuxea-5上的pv上(大于等于5G)

[root@linuxea volume]# kubectl get pv
NAME        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM                 STORAGECLASS   REASON    AGE
linuxea-1   1Gi        RWO,RWX        Retain           Available                                                  2m
linuxea-2   2Gi        RWO,RWX        Retain           Available                                                  2m
linuxea-3   3Gi        RWO,RWX        Retain           Available                                                  2m
linuxea-4   4Gi        RWO,RWX        Retain           Available                                                  2m
linuxea-5   5Gi        RWO,RWX        Retain           Bound       default/linuxea-pvc                            2m

也可以使用kubectl describe pods linuxea-pvc-pod|grep root查看信息

[root@linuxea volume]# kubectl describe pods linuxea-pvc-pod|grep root
      /data/wwwroot/ from linuxea-image (rw)

pv写入测试

在集群内访问

[root@linuxea volume]# curl 172.16.4.7
linuxea-linuxea-pvc-pod.com-127.0.0.1/8 172.16.4.7/24

而后回到nfs修改

[root@Linuxea-VM-Node_10_0_1_61 ~]# echo `date` >> /data/linuxea-volumes/linuxea-5/index.html 

在集群内第二次访问查看

[root@linuxea volume]# curl 172.16.4.7
linuxea-linuxea-pvc-pod.com-127.0.0.1/8 172.16.4.7/24
2018年 09月 23日 星期日 18:22:49 CST
[root@linuxea volume]# 

由此可见,创建多大的pv,可能需要事先设定好,pvc才能适配,这种方式有些麻烦,可以考虑使用动态供给

CentOS 6.X 上安装配置 NFS 目录共享

NFS 简介

NFS(Network File System)即网络文件系统,是 FreeBSD 支持的文件系统中的一种,它允许网络中的计算机之间通过 TCP/IP 网络共享资源。在 NFS 的应用中,本地 NFS 的客户端应用可以透明地读写位于远端 NFS 服务器上的文件,就像访问本地文件一样。
目前 NFS 主要有三个版本(NFSv2,NFSv3,NFSv4)。 NFSv2 和 NFSv3 除了 3 版本支持更多的新特性以外,最主要的区别应该就是 NFSv2 是使用 UDP 协议进行传输的,所以 NFSv2 的连接在复杂网络环境下可能没有那么可靠,而 NFSv3 同时支持 UDP 和 TCP 协议。而 NFSv4 则是在 NFSv3 的基础上提升了性能,强制了安全策略,引入有状态的协议等…
当 Client 端要挂载 NFS 共享卷的时候,会发送 RPC 请求给服务端,而 NFS 服务端会在用户验证后将一个随机的 Cookie 传送至客户端,以便客户端使用这个 Cookie 来认证那些要访问的共享卷。
NFS 的验证支持内置的 IP/主机权限分配,同时也被 tcp wrappers 所限制。

未分类

上面这段话以及架构图都是我从网上找的,主要的作用大概就是撑个场子这样,你懂的。如果你只想快速地搭建一个 CentOS 上的 NFS 环境,跳过这段 …

一、环境

1、软件环境

  • Windows 10 x64

  • VMWare 12 x64

  • CentOS 6.7 x64 * 3

  • nfs-utils

  • nfs-utils-lib

  • rpcblind

2、服务器规划

未分类

注:

  • NFS Client 的数量可以根据实际情况自行调增更多。

二、NFS Server 环境准备

1、创建共享目录

登录连接到规划的 NFS Server 节点,使用 root 用户执行如下命令创建共享目录

[root@hadoop1 ~]# mkdir -p /data/shared

注:

  • 创建的共享目录的位置根据实际情况而定。比如,如果你的服务器上专门挂载了一块用于存放数据的大容量磁盘,该磁盘挂载到了 /data1 目录,那么你可以将共享目录创建在 /data1 下面(/data1/shared)

  • 这个共享目录是实际存放数据文件的位置,其他的 NFS Client 访问该位置获取共享的文件信息。

2、给共享目录读写权限

root 用户执行如下命令

[root@hadoop1 data]# cd /data

[root@hadoop1 data]# pwd

/data

[root@hadoop1 data]# chmod -R 777 shared

[root@hadoop1 data]# ll -d shared

drwxrwxrwx. 2 root root 4096 Aug  6 06:18 shared

三、安装与配置 NFS Server

可以根据服务器的配置以及具体的业务需求选取一台服务器作为 NFS Server,NFS Server 是用作文件物理存储的节点。因此,要考虑的是 NFS Server 服务器的磁盘资源是否满足需求。此处我选取 192.168.174.200 作为 NFS Server。SSH 连接到 192.168.174.200 服务器过程省略…

1、检查服务器是否已经安装有 nfs-utils

[root@hadoop1 ~]# rpm -qa | grep nfs-utils

[root@hadoop1 ~]#

如果已经安装了 nfs-utils 及 nfs-utils-lib 包,可以直接跳过第 2 步

2、安装 nfs-utils

root 用户执行如下命令安装 nfs-utils

[root@hadoop1 ~]# yum install -y nfs-utils

注:

  • 执行如上命令会安装 nfs-utils.x86_64 1:1.2.3-78.el6 包以及其依赖的包(版本可能不同)
nfs-utils-lib.x86_64 0:1.1.5-13.el6

keyutils.x86_64 0:1.4-5.el6

libgssglue.x86_64 0:0.1-11.el6

libtirpc.x86_64 0:0.2.1-15.el6

rpcbind.x86_64 0:0.2.0-16.el6
...
  • rpcbind 是用于端口映射的包,在 CentOS 5 上对应的是 portmap。

3、配置 NFS Server

NFS 的配置文件位于 /etc/exports,在 CentOS 6.7 中,/etc/exports 文件已经存在,内容为空。因此,我这儿使用 root 用户直接编辑此文件配置即可(如果没有此文件,可以直接创建此文件即可 touch /etc/exports 或者 vim /etc/exports)。

[root@hadoop1 ~]# vim /etc/exports

在文件中添加如下内容:

/data/shared 192.168.174.201(rw,sync,all_squash)
/data/shared192.168.174.202(rw,sync,all_squash)

注:

  • /data/shared192.168.174.201(rw,sync,all_squash) 表示 NFS Server 上的共享目录 /data/shared 允许来自 192.168.174.201 服务器上的所有用户(all_squash)的读写(rw)操作权限。且数据文件采用同步(sync)方式进行共享

  • 上面的文件也可以配置成一行 /data/shared192.168.174.*(rw,sync,all_squash) ,表示允许 192.168.174 这个网段的所有机器的访问

  • 配置文件中的内容格式如下,'()’ 中的选项列表之间没有空格

<输出目录> [客户端1 选项(访问权限,同步方式,用户映射)] [客户端2 选项(访问权限,同步方式,用户映射)]

  • 具体的配置详解不在此列出了,可以参考 CentOS 官网的解释 https://www.centos.org/docs/5/html/Deployment_Guide-en-US/s1-nfs-server-config-exports.html

4、NFS Server 防火墙配置

root 用户执行如下命令编辑 iptables 文件

[root@hadoop1 shared]# vim /etc/sysconfig/iptables

添加如下内容,并保存退出

### rpcbind
-A INPUT -p udp -m multiport --dports 111,875,892,2049,10053,32769 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m multiport --dports 111,875,892,2049,10053,32803 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT  -p udp -m multiport --sports 111,875,892,2049,10053,32769 -m state --state ESTABLISHED -j ACCEPT
-A OUTPUT  -p tcp -m multiport --sports 111,875,892,2049,10053,32803 -m state --state ESTABLISHED -j ACCEPT

如下示例:

未分类

注:

  • 如果 NFS Server 没有开启防火墙服务,则可以跳过此步骤。
  • 由于 rpcbind 即映射了 tcp 端口,也映射了 udp 端口,因此需要配置 tcp/udp
  • 上面配置的这些端口都是 nfs server 服务默认监听的端口,默认的配置在 /etc/sysconfig/nfs 文件中可以查看到

5、启动 nfs

在启动 nfs 之前必须先启动 rpcbind,root 用户执行如下命令启动 rpcbind

[root@hadoop1 data]# service rpcbind start

Starting rpcbind:                                          [  OK  ]

root 用户执行如下命令启动 nfs

[root@hadoop1 data]# service nfs start

Starting NFS services:                                     [  OK  ]

Starting NFS quotas:                                       [  OK  ]

Starting NFS mountd:                                       [  OK  ]

Starting NFS daemon:                                       [  OK  ]

Starting RPC idmapd:                                       [  OK  ]

四、配置 NFS Client

使用 SSH 分别连接到 NFS Client 对应的两个节点 192.168.174.201/202

1、安装 nfs 包

使用 root 用户分别在两台客户端服务器上执行如下命令安装 nfs

[root@hadoop2 ~]# yum install -y nfs-utils

注:

  • NFS 客户端也要安装 nfs-utils 包,不然挂载不了

2、创建本地挂载目录

使用 root 用户分别在两台客户端服务器上执行如下命令创建两个本地目录,用于将 NFS Server 上的共享目录映射到本地目录。

[root@hadoop3 ~]# mkdir -p /data/shared

[root@hadoop3 ~]# cd /data

[root@hadoop3 data]# pwd

/data

[root@hadoop3 data]# chmod -R 777 shared

[root@hadoop3 data]# ll -d shared/

drwxrwxrwx. 2 root root 4096 Aug  6 06:43 shared/

注:

  • 上面命令我将 NFS 客户端的本地目录与 NFS Server 端的共享目录创建在相同的路径和相同的名称,但其实此处可以与 NFS Server 端不两只,此处我只是为了便于我好记忆。

3、挂载 NFS Server 共享目录到本地

[root@hadoop2 data] mount -t nfs 192.168.174.200:/data/shared /data/shared

查看挂载后的服务器文件系统

[root@hadoop2 ~]# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/sda2              97G  4.3G   87G   5% /

tmpfs                 1.9G   72K  1.9G   1% /dev/shm

/dev/sda1             283M   41M  227M  16% /boot

192.168.174.200:/data/shared

                       97G   16G   76G  18% /data/shared

可以看到多出了一个将 192.168.174.200:/data/shared 挂载到本地的 /data/shared 目录的记录

五、验证

1、在 NFS Client 节点创建文件

在 192.168.174.202 服务器上执行如下命令

[root@hadoop3 data]# cd shared

[root@hadoop3 shared]# vim test.text

输入如下内容,保存退出:

This is a test text!

查看 192.168.174.202 服务器上的 /data/shared 目录,有 test.text 文件

[root@hadoop3 shared]# pwd

/data/shared

[root@hadoop3 shared]# ll

total 4

-rw-r--r--. 1 nfsnobody nfsnobody 21 Aug  6 09:38 test.text

[root@hadoop3 shared]# cat test.text

This is a test text!

2、查看另外两个节点的目录

登录 192.168.174.200/201 服务器,查看 /data/shared 目录,可以看到两个节点上都能访问刚刚在 202 上创建的 test.text 文件,如下所示:

200:

[root@hadoop1 shared]# pwd

/data/shared

[root@hadoop1 shared]# ll

total 4

-rw-r--r--. 1 nfsnobody nfsnobody 21 Aug  6 09:38 test.text

201:

[root@hadoop2 shared]# pwd

/data/shared

[root@hadoop2 shared]# ll

total 4

-rw-r--r--. 1 nfsnobody nfsnobody 21 Aug  6 09:38 test.text

3、在 NFS Client 上修改文件内容

在 192.168.174.201 上修改文件,并在文件下方添加一行 Hello World 并保存退出

[root@hadoop2 shared]# vim test.text

This is a test text!

Hello World

4、查看另外两个节点的文件内容

查看 192.168.174.200/202 上的 /data/shared/test.text 文件内容:

200:

[root@hadoop1 shared]# pwd

/data/shared

[root@hadoop1 shared]# cat test.text

This is a test text!

Hello World

202:

[root@hadoop3 shared]# pwd

/data/shared

[root@hadoop3 shared]# cat test.text

This is a test text!

Hello World

可以看到更改后的内容也同时在另外两个节点上生效了。

至此,我们在 CentOS 6.X 上安装配置 NFS 共享文件目录就完成了。

记一次负载均衡+NFS博客站点搭建的总结

起因

  
原本是打算搭建个小博客站点做实验,突然想起之前遇到的一次负载均衡失效的经历,便打算做一次实验重现当初的情况并记录下来,防止日后再遇到类似的情况懵逼。
  

复现流程

架构体系

  原环境:前端依赖nginx做负载均衡的调度器,web端是httpd+php-fpm分离,分别处理动态和静态页面,后端mariadb数据库做数据存储,NFS服务器提供站点文件作出共享,防止,web端出现站点文件不一致的情况。
  模拟环境:nginx做负载均衡器,httpd和php-fpm共存在同一主机,NFS和mariadb分处2台主机,整个模拟一共使用5台主机。
  

软件环境与架构图

未分类
  
架构图

未分类
  

配置各个节点

配置nginx节点

  
1.安装nginx

yum install nginx -y

2.编辑nginx配置文件

vim /etc/nginx/conf.d/upstream.conf

#写入下面内容
#定义负载转发的后端ip
upstream www.douma.com {
  server 192.168.99.131:80;
  server 192.168.99.130:80;
}

#配置主配置信息
server {
  listen 80;
  server_name www.douma.com;
  access_log /var/log/douma-access.log;
  error_log /var/log/douma-error.log debug;
  #set your default location
  location / {
    proxy_pass http://www.douma.com;
  }
}

3.启动nginx

systemctl start nginx

未分类

配置mariadb

  
1.安装mariadb

#这里直接yum,新版的mariadb要到官网去配置新版的mariadb更新源
yum install mariadb -y
systemctl start mairadb

2.授权账号

MariaDB [(none)]> grant all on wp.* to wp_admin@'192.168.99.%' identified by 'admin';

MariaDB [(none)]> flush privileges;

3.建立wordpress数据库

MariaDB [(none)]> create database wp;

未分类

配置NFS

1.安装nfs管理工具,并且启动

# centos7,centos6要先启动rpcbind服务才能启动nfs-server
yum install nfs-utils -y
systemctl start nfs-server

2.编辑配置文件

vim /etc/exports
#写入想要共享的目录和允许挂载的机器和读写权限
/web/wordpress 192.168.99.0/24(rw)

3.创建目录并且放入wordpress站点文件

mkdir /web
cd /web
wget https://cn.wordpress.org/wordpress-4.9.4-zh_CN.tar.gz
tar -xvf wordpress-4.9.4-zh_CN.tar.gz 

4.设置acl权限,要给父附录权限,否则在wordpress在上传文件会失败

#由于httpd是yum安装的,所以uid号相同,所以设置一次就好
setfacl -R -m u:48:rwx /web

5.将nfs目录分享出去

#重读exports文件
exportfs -r
#查看分享出去的目录和权限
exportfs -v

6.编辑wordpress的配置文件

cd wordpress
mv wp-config.sample.php wp-config.php
vim  wp-config.php

未分类

配置web服务器

2台web都按照如下配置

1.安装httpd和php-fmp

yum install httpd php-fpm php-mysql -y
#由于未做分离所以可以直接启动,无需修改,如果分离,要注意修改配置文件允许远程访问和监听全部ip
systemctl start php-fpm

2.配置httpd

#自定义配置文件名字,但是目录和结尾要固定
 vim /etc/httpd/conf.d/php-fpm.conf 

#写入如下字段
#将php也作为默认页
DirectoryIndex index.php
#关闭代理请求
ProxyRequests Off
#设置允许代理的请求,这里未做分离所以直接代理到httpd目录就好
ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/var/www/html/$1

未分类

3.安装nfs管理工具

yum install nfs-utils -y
#查看nfs服务器共享的文件夹
showmount -e 192.168.99.135

未分类

4.挂载目录

#这里有2中方法
#法一,编译fstabl文件
vim /etc/fstab
192.168.99.135:/web/wordpress /var/www/html/ nfs defaults 0 0

mount -a

未分类

#法二,直接命令挂载
mount 192.168.99.135:/web/wordpress /var/www/html/

5.启动httpd

systemctl start httpd

配置宿主机

  
由于没有做dns所以要修改宿主机的hosts文件才能实现基于域名的访问

C:WindowsSystem32driversetchosts

#添入如下字段
192.168.99.150  www.douma.com

安装wordpress

1.宿主机在浏览器打开www.douma.com
填写好对应信息

未分类

2.安装wordpress等待完成

未分类

3.重新打开www.douma.com

未分类

部署完成。
  

总结

  
整个部署基本是按照问题解决后的配置来进行安装的,所以负载均衡可以正常实现。下面将会列出刚开始错误的点和配置。
  

注意点

nginx反向代理的配置

未分类

未分类

上面2幅图分别是正确和错误的配置,不过正常来说2个配置都没问题,但是在这里并不行;错误配置是将请求192.168.99.150的请求转发到后端的2台httpd机器上,但是在这里同时会将http://backend 也转发到后端,而wordpress会在安装过程中记录下这个站点名称,并且之后的请求会直接请求http://backend

wordpress数据库的记录

1.下面是wordpress记录到数据库的内容
这里我使用了phpmyadmin这个web端的mysql管理工具

未分类

图中方框内记录的便是wordpress记录的站点地址,同时也会是以后请求的地址。

2.下面是使用调试窗口看到的请求,正常情况下下次请求会重新去请求记录的站点地址,可以重新通过nginx实现负载均衡。如果请求的站点地址不是域名而是上面nginx错误配置或者是某个web节点的地址的话,负载均衡会完全失效。

未分类

基于CentOS 7实现的NFS

NFS

NFS(Network FileSystem,网络文件系统),最早由Sun公司所发展出来的,主要是通过网络让不同的主机、不同的操作系统,可以彼此分享个别档案,因此我们也可以简单把NFS看成是一个文件服务器。通过NFS我们的PC可以将网络端的NFS服务器分享的目录挂载到本地端的机器当中,在本地端的机器看起来,远程主机的目录就好像是自己的一个磁盘分区一样。

未分类

NFS服务器与客户端通过随机选择小于1024以下的端口来进行数据传输,而这个端口的确定需要借助RPC(Remote Procedure Call,远程过程调用)协议的协助。RPC最主要的功能就是在指定每个NFS服务所对应的port number,并且回报给客户端,让客户端可以连结到正确的端口上去。当我们启动NFS服务时会随机取用数个端口,并主动向RPC注册,因此RPC可以知道每个端口对应的NFS,而RPC又是固定使用 port 111监听客户端的需求并回报客户端正确的端口。

未分类

  1. 客户端向服务器端的RPC(port 111)发出NFS的请求;
  2. 服务器端找到对应的已注册的NFS daemon端口后,回报给客户端;
  3. 客户端知道正确的端口后,直接与NFS daemon联机。

实现NFS

实验环境

[root@nfs ~]# lsb_release -r
Release:    7.2.1511
[root@nfs ~]# yum -y install nfs-utils
[root@nfs ~]# rpm -qi nfs-utils
Name        : nfs-utils
Epoch      : 1
Version    : 1.3.0
Release    : 0.54.el7
Architecture: x86_64
[root@nfs ~]# systemctl stop firewalld
[root@nfs ~]# setenforce 0
[root@nfs ~]# mkdir /nfs_dir
[root@nfs ~]# vim /nfs_dir/welcome
  This is NFS test file.

NFS相关配置

相关配置文件:
配置文件:/etc/exports
配置文件目录:/etc/exports.d

  NFS服务的主配置文件为/etc/exports,用于定义共享的目录以及客户端的权限,格式如下:

/PATH/TO/SOME_DIR clients1(export_options,...) clients2(export_options,...)

其中clients支持以下几种格式:

  • single host:ipv4,ipv6,FQDN
  • network:address/netmask
  • wildcards:主机名通配,例如,*.magedu.com
  • netgroups:NIS域内的主机组,@group_name
  • anonymous:使用*通配所有主机

export_options的常见参数可以分为以下两类:

  • General Options:
    • ro:客户端挂载后,其权限为只读,默认选项;
    • rw:读写权限;
    • sync:同时将数据写入到内存与硬盘中;
    • async:异步,优先将数据保存到内存,然后再写入硬盘;
    • Secure:要求请求源的端口小于1024
  • User ID Mapping:
    • root_squash:当NFS客户端使用root用户访问时,映射到NFS服务器的匿名用户;
    • no_root_squash:当NFS客户端使用root用户访问时,映射到NFS服务器的root用户;
    • all_squash:全部用户都映射为服务器端的匿名用户;
    • anonuid=UID:将客户端登录用户映射为此处指定的用户uid;
    • anongid=GID:将客户端登录用户映射为此处指定的用户gid

更多参数信息可以通过命令 man exports 查看帮助手册

配置NFS

[root@nfs ~]# vim /etc/exports
/nfs_dir 192.168.4.*(rw,sync,root_squash)
[root@nfs ~]# systemctl start nfs-server

客户端测试

#查看nfs能挂载的选项
[root@client ~]# showmount -e 192.168.4.119
Export list for 192.168.4.119:
/nfs_dir 192.168.4.*
[root@client ~]# mount -t nfs 192.168.4.119:/nfs_dir /mnt
[root@client ~]# cd /mnt/
[root@client mnt]# ls
welcome
[root@client mnt]# cat welcome 
This is NFS test file.
[root@client mnt]# touch file
touch: cannot touch ‘file’: Permission denied

可以看到无法在共享目录下创建文件,明明已经给分配了rw权限,这是因为root_squash把我们的访问权限压缩为nobody权限,自然无法对该目录进行写入操作。
对NFS的配置文件重新进行修改:

[root@nfs ~]# vim /etc/exports
/nfs_dir 192.168.4.*(rw,sync,no_root_squash)
#使用exportfs重读NFS配置,不需要重启服务
[root@nfs ~]# exportfs -rv
exporting 192.168.4.*:/nfs_dir

客户端重新测试:

[root@client mnt]# touch file
[root@client mnt]# ll
total 4
-rw-r--r--. 1 root root  0 Jun 28 14:11 file  #可以看到属主属组为root
-rw-r--r--. 1 root root 23 Jun 28 11:08 welcome
[root@client mnt]# echo 123 > file
[root@client mnt]# rm file
rm: remove regular empty file ‘file’? y  #可以删除文件
[root@client mnt]# ll
total 4
-rw-r--r--. 1 root root 23 Jun 28 11:08 welcome

很明显,将客户端访问共享文件用户映射为NFS服务器上的root是一种不安全的做法,我们可以指定客户端映射到NFS服务器的用户,配置如下:

[root@nfs ~]# useradd nfSUSEr -s /sbin/nologin 
[root@nfs ~]# id nfsuser
uid=1003(nfsuser) gid=1003(nfsuser) groups=1003(nfsuser)
[root@nfs ~]# chown -R nfsuser:nfsuser /nfs_dir/
[root@nfs ~]# vim /etc/exports
[root@nfs ~]# cat /etc/exports
/nfs_dir 192.168.4.*(rw,sync,all_squash,anonuid=1003,anongid=1003)
[root@nfs ~]# exportfs -rv
exporting 192.168.4.*:/nfs_dir

客户端进行测试:

[root@client mnt]# touch file
[root@client mnt]# ll
total 4
-rw-r--r--. 1 1003 1003  0 Jun 28 14:27 file
-rw-r--r--. 1 1003 1003 23 Jun 28 11:08 welcome
[root@client mnt]# echo 123 > file
[root@client mnt]# cat welcome 
This is NFS test file.
[root@client mnt]# rm file
rm: remove regular file ‘file’? y
[root@client mnt]# ll
total 4
-rw-r--r--. 1 1003 1003 23 Jun 28 11:08 welcome

Debian Linux安装NFS

要在两台Linux电脑上共享一个目录,最简单的方式是使用NFS,将一台电脑的目录映射到另一台。

在Debian上实现NFS非常容易,首先,在作为服务端的电脑192.168.1.99上安装:

# apt-get install nfs-common nfs-kernel-server

创建需要共享的目录:

# mkdir /srv/upload
# chmod a+w /srv/upload

然后修改/etc/exports文件,将需要共享的目录和客户端添加进来:

/srv/upload  192.168.1.100(rw,sync)

表示允许IP为192.168.1.100的客户端以rw的模式访问。如果以只读模式访问则设置为ro。

然后启动服务:

# /etc/init.d/nfs-kernel-server start

在客户端安装NFS:

# apt-get install nfs-common

创建目录并挂载NFS:

# mkdir /mnt/upload
# mount 192.168.1.99:/srv/upload /mnt/upload

此时已经可以写入/mnt/upload,对应的服务器端可以看到创建的文件。

要在客户端每次启动时自动挂载NFS,可以编辑/etc/fstab,添加一行:

192.168.1.99:/srv/upload /mnt/upload nfs rsize=8192,wsize=8192,timeo=14,intr

均为缺省参数。

Linux系统下安装nfs并配置iptables

服务端安装

系统环境(Centos6.x)
nfs服务器IP:192.168.137.10
nfs客户端IP:192.168.137.11

1. 安装NFS

yum install -y nfs-utils
vim /etc/exports   ##nfs配置文件,写入如下信息
/home/ 192.168.137.0/24(rw,sync,all_squash,anonuid=501,anongid=501)

注:如上信息分为三部分,第一部分就是本地要共享出去的目录,第二部分为允许访问的主机(可以是一个IP也可以是一个IP段)第三部分就是小括号里面的,为一些权限选项。它表示:共享的目录为/home,信任的主机为192.168.137.0/24这个网段,权限为读写,同步,限定所有使用者,并且限定的uid和gid都为501。

2. NFS相关配置选项

未分类

3. 启动服务

service rpcbind start
service nfs start             ##成功启动的条件是防火墙没有做设置或者未开启。

客户端挂载NFS

yum install -y nfs-utils
#查看服务器端都共享了哪些目录 
showmount -e 192.168.137.10
/home 192.168.137.0/24(rw,sync,all_squash,anonuid=501,anongid=501)
#挂载
mount -t nfs -o nolock 192.168.137.10:/home /mnt
#查看挂载的情况
df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        28G  1.5G   25G   6% /
tmpfs           1.9G     0  1.9G   0% /dev/shm
/dev/sda1       194M   27M  158M  15% /boot
/home           480G   10G  470G  47% /mnt

iptables设置

以上nfs服务端和客户端能正常使用的前提是系统没设置防火墙,或者未开启iptables.
实际在生产环境下,为了系统和业务的安全性我们都有设置防火墙。那么需要添加iptables的端口。

vim /etc/sysconfig/nfs        #指定以下的端口号

RQUOTAD_PORT=10001
LOCKD_TCPPORT=10002
LOCKD_UDPPORT=10003
MOUNTD_PORT=10004
STATD_PORT=10005

查看当前这5个服务的端口并记录下来:

rpcinfo -p    #nfs  2049, portmapper  111, 将剩下的三个服务的端口随便选择一个记录下来

添加iptables设置:

iptables -A INPUT -p tcp --dport 111 -j ACCEPT
iptables -A INPUT -p udp --dport 111 -j ACCEPT
iptables -A INPUT -p tcp --dport 2049 -j ACCEPT
iptables -A INPUT -p udp --dport 2049 -j ACCEPT
iptables -A INPUT -p tcp --dport 10001:10005 -j ACCEPT
iptables -A INPUT -p udp --dport 10001:10005 -j ACCEPT
service iptables save
service iptables restart

重启服务:

service rpcbind restart
service nfs restart