搭建NFS服务器

搭建NFS服务器,第1张

NFS 是Network File System的缩写,即网络文件系统。一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布。功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类Unix系统间实现磁盘文件共享的一种方法。

NFS在文件传送或信息传送过程中依赖于RPC协议。RPC,远程过程调用 (Remote Procedure Call) 是能使客户端执行其他系统中程序的一种机制。NFS本身是没有提供信息传输的协议和功能的。

NFS应用场景,常用于高可用文件共享,多台服务器共享同样的数据,可扩展性比较差,本身高可用方案不完善,取而代之的数据量比较大的可以采用MFS、TFS、HDFS等等分布式文件系统。

1. 环境准备两台Centos7.6虚拟机:

服务端:192.168.199.180

客户端:192.168.199.190

2.创建用户,指定用户访问共享文件夹:

useradd test   #创建test用户

                                   passwd   test  #设置test密码为123456

6.编辑nfs主配置文件/etc/exports;并添加以下内容:

/www  192.168.199.190(rw,sync,root_squash,no_all_squash,anonuid=1002,anongid=1002)     

参数详解:

NFS安装完毕,需要创建共享目录,共享目录在/etc/exports文件里面配置,可配置参数如下:

/www  192.168.199.190(rw,sync,root_squash,no_all_squash,anonuid=1002,anongid=1002)

第一列/www 表示需要共享的目录

IP表示允许哪个客户端访问

IP后括号里的设置表示对该共享文件的权限

ro                      只读访问

rw                      读写访问

sync                    所有数据在请求时写入共享

hide                    在NFS共享目录中不共享其子目录

no_hide                 共享NFS目录的子目录

all_squash              共享文件的UID和GID映射匿名用户anonymous,适合公用目录。

no_all_squash           保留共享文件的UID和GID(默认)

root_squash             root用户的所有请求映射成如anonymous用户一样的权限(默认)

no_root_squas           root用户具有根目录的完全管理访问权限

anonuid                 指定用户UID

anongid                 指定用户组ID

7.启动nfs服务:systemctl start nfs

8.查看nfs及rpc端口是否启动成功:

9. rpcinfo -p 192.168.199.180 查看,如图所示:

RPC命令详解: rpcinfo 命令会向 RPC 服务器发出 RPC 调用,并将得到的结果显示出来。rpcinfo 会列出所有在主机 host 上向 rpcbind 注册的 RPC 服务。

10. 使用showmount -e localhost 命令用于查询NFS服务器的相关信息,显示NFS服务器的输出清单。

11. 创建共享文件夹目录www 并在www目录下新建jfedu.txt并加入内容,授予www用户用户组的nfsnobody.nfsnobody权限

mkdir -p /www                       #创建www共享目录

touch  /www/jfedu.txt               #在www目录下创建jfedu.txt文件

chown  -R  test:test  /www  #授权用户用户组test给www目录

二、安装客户端:(192.168.199.190)

1. yum  install nfs-utils  -y

客户端上不需要启动nfs服务,只是为了使用showmount工具

2. 查看RPC端口是否启动:netstat -ntpl

3.使用showmount -e 192.168.199.180命令显示NFS服务器输出结果:

4.远程挂载www共享目录到客户端的/mnt目录下:mount -t nfs 192.168.199.180:/www /mnt

5. 进入到/mnt挂载盘符目录下cd /mnt  确认是否有jfedu.txt文件存在及查看文件权限属于谁:

确认文件已存在,用户用户组均为test用户所属,其他用户不能操作此目录下的文件及文件夹;包括root用户都不能操作删除及修改文件,例如root用户都不能删除jfedu.txt文件:

6.如果也只需要客户端的test用户去对www共享文件夹有增删改查权限的话,需要以下步骤:

a. 在客户端创建相同的test用户,并保证UID一致的情况下才能对共享目录有权限进行操作

b. 设置tets用户密码为123456

c. 查看test用户UID参数值是多少  cat /etc/passwd

d. 那么问题来了,服务端的test用户UID为1002,客户端test用户UID为1004,共享目录在客户端的权限也为1002,那么1004是没有权限去访问共享目录的,可参考下目前状态的错误图;首先切换到test用户,然后进入到/mnt目录下进行jfedu.txt文件删除看是否报错:

e. 经过测试同样的tets用户,但是客户端的用户UID跟服务端不一致,所以是没有权限删除文件的,首先退出tets用户,切换root用户后,需要修改客户端test用户UID跟服务端一致即可解决问题,命令:usermod -u 1002  tets

7.修改完客户端test用户UID为1002后,切换到test用户,查看是否有jfedu.txt文件存在;然后追加新内容123456到jfedu.txt中;最后新建123.txt文件成功,代表NFS共享目录指定用户读取(增删改查)成功。

8. 在NFS服务端把NFS跟RPC服务加入开机自启动:

systemctl enable nfs-server

systemctl enable rpcbind

9. 在客户端将NFS远程共享目录挂载命令加入fstab配置,不然服务器重启挂载点将消失,加入以下配置到/etc/fstab配置文件

192.168.199.180:/www     /mnt       nfs     defaults   0 0

五一节办公室要停电,机房虽有UPS,但也支撑不了8小时。

因生产环境有业务系统挂了办公室机房的NAS存储,故需要进行迁移,步骤记录如下:

先闲谈下技术-----------------------

NFS和samba的区别

samba是混合型网络中的共享服务,windows服务器可建samba服务,linux服务器也可建samba服务

nfs只面向unix、linux间的共享,linux服务器可建nfs服务(winodws系统也可以挂载nfs,就是有点不稳定)

NFS服务器上的操作--------------------------

nfs服务器操作系统版本:

[root@c7110 ~]# more /etc/system-release

CentOS Linux release 7.9.2009 (Core)

nfs服务器安装nfs服务

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

创建nfs目录,并授权

[root@c7110 ~]# mkdir /opt/nfs-test

[root@c7110 ~]# chmod 777 /opt/nfs-test

编辑nfs服务配置文件

[root@c7110 ~]# vi /etc/exports

内容如下:

/opt/nfs-test *(rw,root_squash,all_squash,sync)

重新加载nfs配置:

[root@c7110 ~]# exportfs -r

nfs服务设置开机启动

[root@c7110 ~]# systemctl enable rpcbind

[root@c7110 ~]# systemctl enable nfs

[root@c7110 ~]# systemctl enable nfs-lock

[root@c7110 ~]# systemctl enable nfs-idmap

启动nfs服务

[root@c7110 ~]# systemctl start rpcbind

[root@c7110 ~]# systemctl start nfs

[root@c7110 ~]# systemctl start nfs-lock

[root@c7110 ~]# systemctl start nfs-idmap

查看nfs服务启动后,所监听的端口信息:

[root@c7110 ~]# rpcinfo -p

linux服务器服务器上操作-------------------------------

业务服务器安装nfs软件客户端

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

建立一个挂载目录

[root@c7111 ~]# mkdir /opt/test-m

挂载nfs服务器共享出来的目录

[root@c7111 ~]# mount -t nfs 10.x.x.10:/opt/nfs-test /opt/test-m/

查看下已挂载的nfs

[root@c7111 ~]# df -h

Filesystem Size Used Avail Use% Mounted on

devtmpfs 1.5G 0 1.5G 0% /dev

tmpfs 1.5G 0 1.5G 0% /dev/shm

tmpfs 1.5G 8.8M 1.5G 1% /run

tmpfs 1.5G 0 1.5G 0% /sys/fs/cgroup

/dev/mapper/centos-root 97G 2.3G 95G 3% /

/dev/sda1 1014M 171M 844M 17% /boot

tmpfs 297M 0 297M 0% /run/user/0

10.x.x.6:/opt/nfs-test 97G 4.1G 93G 5% /opt/test-m

经测试,数据可读可写,证明nas服务没有问题,于是进行数据同步,数据同步用rsync命令。

rsync -avp gdsz@10.87.5.6::nas_6 /mnt/guidang/ --password-file=/root/rsync_pass --bwlimit=100000

数据同步完,通知研发进行挂载切换。研发同事在测试时,发现文件属性中的uid及gid与原来的不一致,有些担心,于是又小完善了一下NFS服务。

编辑nfs服务配置文件

[root@c7110 ~]# vi /etc/exports

内容如下:

/opt/nfs-test *(no_all_squash,anonuid=600,anongid=600)

重新加载nfs配置:

[root@c7110 ~]# exportfs -r

一、NFS服务器配置实例

实验拓扑

二、实验要求及环境

2.1实验环境

NFS服务器 IP:192.168.8.5

环境:

[root@server7 ~]# uname -a

Linux server7.ctos.zu 3.10.0-514.el7.centos.plus.i686 #1 SMP Wed Jan 25 12:55:04 UTC 2017 i686 i686 i386 GNU/Linux

[root@server7 ~]# cat /etc/redhat-release

CentOS release 7.3.1611 (AltArch)

客户端IP:192.168.8.7

环境:

[root@client-A ~]# uname -a

Linux client-A.ctos.zu 2.6.32-696.el6.i686 #1 SMP Tue Mar 21 18:53:30 UTC 2017 i686 i686 i386 GNU/Linux

[root@client-A ~]# cat /etc/redhat-release

CentOS release 6.9 (Final)

2.2、实验要求

NFS服务器

1、/home/share 目录可读写,并且不限制用户身份,共享给192.168.8.0/24网段不的所有主机;

2、/home/zhidata 这个目录仅共享给192.168.8.7这台主机,以供该主机上面的zhi这个用户来使用,

也就是说zhi在192.168.8.5和192.168.8.7上均有账号,且账号均为zhi;

3、/home/upload 这个目录做为192.168.8.0/24网段的数据上传目录,其中/home/upload

的用户和所属组为nfs-upload这个名字,它的UID和GID均为222;

4、/home/nfs  这个目录的属性为只读,可提供除了网段内的工作站外,向Internet也提供数据内容。

三、服务器端设置

1、 编辑/etc/exports内容

[root@server7 etc]# cat /etc/exports

/home/share  192.168.8.0/24(rw,no_root_squash)

/home/zhidata  192.168.8.7(rw)

/home/upload   192.168.8.0/24(rw,all_squash,anonuid=222,anongid=222)

/home/nfs     192.168.8.0/24(ro)  *(ro,all_squash)

2、按要求建立每个对应目录

    2.1、创建/home/share目录 任何人都可以在 /home/share内新增、修改文件,但

    仅有该文件/目录的建立者与root能够删除自己的目录或文件。

    [root@server7 etc]# mkdir -p  /home/share

    [root@server7 etc]# ll -d /home/share/

    drwxr-xr-x. 2 root root 6 9月   5 15:50 /home/share/

    [root@server7 etc]# chmod 1777  /home/share/

    [root@server7 etc]# ll -d /home/share/

    drwxrwxrwt. 2 root root 6 9月   5 15:50 /home/share/

    2.2、创建/home/nfs

    [root@server7 etc]# ll -d /home/nfs/

    drwxr-xr-x. 2 root root 6 9月   5 16:52 /home/nfs/

    2.3、创建/home/zhidata目录

    [root@server7 etc]# mkdir -v /home/zhidata

    mkdir: 已创建目录 "/home/zhidata"

    [root@server7 etc]# ll -d /home/zhidata/

    drwxr-xr-x. 2 root root 6 9月   5 16:57 /home/zhidata/

    [root@server7 etc]# useradd zhi

    root@server7 etc]# passwd zhi

    更改用户 zhi 的密码 。

    新的 密码:

    无效的密码: 密码少于 8 个字符

    重新输入新的 密码:

    passwd:所有的身份验证令牌已经成功更新。

    [root@server7 etc]# cat /etc/passwd | grep zhi

    zhi:x:1000:1000:zhi:/home/zhi:/bin/bash

    [root@server7 etc]# chmod 700 /home/zhidata/

    [root@server7 etc]# chown -R zhi:zhi /home/zhidata/

    [root@server7 etc]# ll -d /home/zhidata/

    drwx------. 2 zhi zhi 6 9月   5 16:57 /home/zhidata/

    2.4、创建/home/upload目录

#先建立对应账号与组名及UID

[root@server7 etc]# groupadd  -g 222 nfs-upload

[root@server7 etc]# useradd -g 222 -u 222 -M nfs-upload

[root@server7 etc]# cat /etc/passwd|grep nfs

rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin

nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

nfs-upload:x:222:222::/home/nfs-upload:/bin/bash

#创建目录,修改属主

[root@server7 etc]# mkdir /home/upload

[root@server7 etc]# chown -R nfs-upload:nfs-upload  /home/upload/

[root@server7 etc]# ll -d /home/upload/

drwxr-xr-x. 2 nfs-upload nfs-upload 6 9月   6 08:38 /home/upload/

2.5、重启NFS服务

[root@server7 etc]# systemctl restart  nfs

[root@server7 etc]# systemctl status  nfs

● nfs-server.service - NFS server and services

   Loaded: loaded (/usr/lib/systemd/system/nfs-server.serviceenabledvendor preset: disabled)

   Active: active (exited) since 三 2017-09-06 08:41:40 CST8s ago

  Process: 9171 ExecStopPost=/usr/sbin/exportfs -f (code=exited, status=0/SUCCESS)

  Process: 9169 ExecStopPost=/usr/sbin/exportfs -au (code=exited, status=0/SUCCESS)

  Process: 9168 ExecStop=/usr/sbin/rpc.nfsd 0 (code=exited, status=0/SUCCESS)

  Process: 9181 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS)

  Process: 9180 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)

 Main PID: 9181 (code=exited, status=0/SUCCESS)

   CGroup: /system.slice/nfs-server.service

9月 06 08:41:40 server7.ctos.zu systemd[1]: Starting NFS server and services...

9月 06 08:41:40 server7.ctos.zu systemd[1]: Started NFS server and services.

[root@server7 etc]# tail /var/log/messages

Sep  6 08:41:40 server7 systemd: Started NFS Mount Daemon.

Sep  6 08:41:40 server7 rpc.mountd[9178]: Version 1.3.0 starting

Sep  6 08:41:40 server7 systemd: Started NFSv4 ID-name mapping service.

Sep  6 08:41:40 server7 systemd: Starting NFS server and services...

Sep  6 08:41:40 server7 kernel: NFSD: starting 90-second grace period (net c0c932c0)

Sep  6 08:41:40 server7 systemd: Started NFS server and services.

Sep  6 08:41:40 server7 systemd: Starting Notify NFS peers of a restart...

Sep  6 08:41:40 server7 sm-notify[9198]: Version 1.3.0 starting

Sep  6 08:41:40 server7 sm-notify[9198]: Already notifying clientsExiting!

Sep  6 08:41:40 server7 systemd: Started Notify NFS peers of a restart.

2.6、查看NFS服务器共享出来目录

2.7、关闭防火墙、selinux

2.8查看配置

[root@server7 ~]# exportfs -v

/home/zhidata     192.168.8.7(rw,wdelay,root_squash,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)

/home/share       192.168.8.0/24(rw,wdelay,no_root_squash,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)

/home/upload      192.168.8.0/24(rw,wdelay,root_squash,all_squash,no_subtree_check,anonuid=222,anongid=222,sec=sys,rw,secure,root_squash,all_squash)

/home/nfs         192.168.8.0/24(ro,wdelay,root_squash,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)

/home/nfs         <world>(ro,wdelay,root_squash,all_squash,no_subtree_check,sec=sys,ro,secure,root_squash,all_squash)

四、客户端配置

4.1、客户端也要安装nfs-utils和rcpbind软件包

[root@client-A ~]# yum install nfs-utils rpcbind -y

4.2、启动RPC

[root@client-A ~]# service rpcbind start  /systemctl start rpcbind

Starting rpcbind:                                          [  OK  ]

[root@client-A ~]# service rpcbind status

rpcbind (pid  1926) is running...

[root@client-A ~]# chkconfig --list |grep rpcbind

4.3、客户端关闭防火墙、selinux

[root@client-A ~]# service iptables stop /systemctl stop firewalld

iptables: Setting chains to policy ACCEPT: filter          [  OK  ]

iptables: Flushing firewall rules:                         [  OK  ]

iptables: Unloading modules:                               [  OK  ]

4.4 测试网络

[root@client-A ~]# ping 192.168.8.5

PING 192.168.8.5 (192.168.8.5) 56(84) bytes of data.

64 bytes from 192.168.8.5: icmp_seq=1 ttl=64 time=2.16 ms

64 bytes from 192.168.8.5: icmp_seq=2 ttl=64 time=0.697 ms

64 bytes from 192.168.8.5: icmp_seq=3 ttl=64 time=0.346 ms

64 bytes from 192.168.8.5: icmp_seq=4 ttl=64 time=0.336 ms

64 bytes from 192.168.8.5: icmp_seq=5 ttl=64 time=0.335 ms

64 bytes from 192.168.8.5: icmp_seq=6 ttl=64 time=0.317 ms

64 bytes from 192.168.8.5: icmp_seq=7 ttl=64 time=0.512 ms

64 bytes from 192.168.8.5: icmp_seq=8 ttl=64 time=0.320 ms

^C

--- 192.168.8.5 ping statistics ---

8 packets transmitted, 8 received, 0% packet loss, time 7555ms

rtt min/avg/max/mdev = 0.317/0.629/2.169/0.595 ms

4.5 在客户端查看NFS服务器共享出来目录

[root@client-A ~]# showmount -e 192.168.8.5

Export list for 192.168.8.5:

/home/nfs     (everyone)

/home/upload  192.168.8.0/24

/home/share   192.168.8.0/24

/home/zhidata 192.168.8.7

4.6、挂载NFS服务器上/home/nfs目录到本地/opt/data目录下

#临时挂载

#永久挂载

编辑、/etc/fstab文件,新增如下条目:

192.168.8.5:/home/nfs  /opt/data/nfs4defaults0 0

更多信息参考 nfs参数详解

#查看信息

[root@client-A data] # df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/mapper/VolGroup-lv_root

                      6.5G  644M  5.6G  11% /

tmpfs                 250M     0  250M   0% /dev/shm

/dev/sda1             477M   26M  426M   6% /boot

192.168.8.5:/home/nfs

                      8.0G  1.6G  6.5G  20% /opt/data

[root@client-A data]# mount

/dev/mapper/VolGroup-lv_root on / type ext4 (rw)

proc on /proc type proc (rw)

sysfs on /sys type sysfs (rw)

devpts on /dev/pts type devpts (rw,gid=5,mode=620)

tmpfs on /dev/shm type tmpfs (rw)

/dev/sda1 on /boot type ext4 (rw)

none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

nfsd on /proc/fs/nfsd type nfsd (rw)

192.168.8.5:/home/nfs on /opt/data type nfs (rw,vers=4,addr=192.168.8.5,clientaddr=192.168.8.7)

#创建文件测试

[root@client-A data]# touch testabc

touch: cannot touch `testabc': Read-only file system

4.7挂载/home/upload 目录到客户端/opt/upload目录下

#挂载

[root@client-A data]# mkdir /opt/upload

[root@client-A data]# mount -t nfs  192.168.8.5:/home/upload   /opt/upload/

#查看挂载是否成功

[root@client-A data]# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/mapper/VolGroup-lv_root

                      6.5G  644M  5.6G  11% /

tmpfs                 250M     0  250M   0% /dev/shm

/dev/sda1             477M   26M  426M   6% /boot

192.168.8.5:/home/nfs

                      8.0G  1.6G  6.5G  20% /opt/data

192.168.8.5:/home/upload

                      8.0G  1.6G  6.5G  20% /opt/upload

#客户端创建nfs-upload用户

[root@client-A ~]# groupadd  -g 222 nfs-upload

[root@client-A ~]# useradd -g 222 -u 222 -m nfs-upload

#测试,可以看到创建的文件及目录默认属主为nfs-upload属组为nfs-upload

[zhi@client-A upload]$ pwd

/opt/upload

[zhi@client-A upload]$ ll

total 0

#测试创建文件

[zhi@client-A upload]$ touch test123

测试创建目录

[zhi@client-A upload]$ mkdir  testdir

[zhi@client-A upload]$ ll -a

total 4

drwxr-xr-x  3 nfs-upload nfs-upload   36 Sep  6 10:28 .

drwxr-xr-x. 4 root       root       4096 Sep  6 18:22 ..

-rw-rw-r--  1 nfs-upload nfs-upload    0 Sep  6 10:28 test123

drwxrwxr-x  2 nfs-upload nfs-upload    6 Sep  6 10:28 testdir

# 在客户端用root用户创建文件测试

root@client-A upload]# touch testabc

[root@client-A upload]# ll

total 0

-rw-r--r-- 1 root       root       0 Sep  6 10:31 nfstest123

-rw-r--r-- 1 nfs-upload nfs-upload 0 Sep  6 10:32 testabc

drwxrwxr-x 2 nfs-upload nfs-upload 6 Sep  6 10:28 testdir

可以看到用root用户创建的文件属主仍是nfs-upload

#测试删除文件

[zhi@client-A upload]$ rm test123

[zhi@client-A upload]$ ll

total 0

drwxrwxr-x 2 nfs-upload nfs-upload 6 Sep  6 10:28 testdir


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/481101.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-06-08
下一篇2023-06-08

发表评论

登录后才能评论

评论列表(0条)

    保存