• 4.存储NFS


    NFS是一种基于TCP/IP 传输的网络文件系统协议。一般适用于内网
    通过使用NFS协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源

    NAS存储: 它的实现依赖RPC (Remote Process Call,远端过程调用),通过RPC机制完成远程到本地的映射过程。

    NFS服务: 提供目录共享的功能

    当没有共享存储的时候
    用户A上传图片到web服务器,通过负载均衡,将图片上传到了web1服务器
    这时候用户A想让用户B去查看自己上传的图片
    用户B通过负载均衡的时候,访问被分配到了web2服务器上了,但是web服务器上并没有用户A上传的图片,所以用户B访问不到
    在这里插入图片描述

    有了共享存储的时候
    有了共享存储后,给每台web服务器都挂载上,存储里面的内容从任何一台web服务器都能看到
    挂载在某个目录,这个目录其实就是这个存储的入口
    用户A上传文件到web1服务器挂载的存储
    用户B通过负载均衡访问web2服务器挂载的存储后,就可以访问到用户A上传的图片资源了

    在这里插入图片描述

    操作NFS其实就像操作本地的一个目录一样
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    服务端

    服务端192.168.51.180
    服务端192.168.51.187

    1.安装
    #yum install nfs-utils -y

    2.配置
    #cat /etc/exports

    /data 192.168.51.1/24(rw,async)

    3.根据配置进行初始化操作
    #mkdir -p /data

    4.启动
    #systemctl start nfs
    #systemctl enable nfs

    客户端

    1.客户端挂载
    #yum install nfs-utils -y
    #showmount -e 192.168.51.180 查看某主机提供的nfs服务

    Export list for 192.168.51.180:
    /data 192.168.51.1/24
    
    • 1
    • 2

    挂载
    #mount -t nfs 192.168.51.180:/data /tmp
    这里挂载时候指定文件系统的类型为nfs类型,挂载到本地的/tmp目录,所以/tmp就成了nfs存储的入口

    查看
    #df -h
    文件系统 容量 已用 可用 已用% 挂载点
    192.168.51.180:/data 17G 4.4G 13G 26% /tmp
    根下的/date目录和根用的不是一个盘符,所以通过NFS共享出去的也只是/date的容量,不包含根的容量

    2.客户端执行创建操作,测试是否能读能写:
    #touch /tmp/test.txt
    touch: 无法创建"/tmp/test.txt": 只读(权限不够)

    nfs客户端只读(权限不足)

    解决:
    先查看nfs是以哪个用户的身份运行的
    #cat /var/lib/nfs/etab

    /data			192.168.51.1/24(rw,async,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,**anonuid=65534,anongid=65534**,sec=sys,rw,secure,root_squash,no_all_squash)
    
    • 1

    这里发现了这个用户的id,查询对应的用户名即可
    cat /etc/passwd|grep 65534
    在这里插入图片描述
    用户名是nfsnobody

    然后再查看一下我们共享的目录的权限
    ll -d /data
    在这里插入图片描述
    发现运行nfs的nfsnobody对共享的目录/data压根没有权限,怪不得客户端没权限操作
    所以我们给/data的权限到用户nfsnobody就行了
    在这里插入图片描述
    然后重启一下nfs服务
    systemctl restart nfs

    然后在客户端就可以进行写入的操作了

    nfs配置文件参数

    nfs配置文件中挂载有一些参数,需要我们了解:

    nfs共享参数	参数作用
    rw	---读写权限
    ro		---只读权限
    root_squash	---当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户(65534)(不常用)
    no_root_squash	---当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员(不常用)
    no_all_squash	---无论NFS客户端使用什么账户访问,都不进行压缩
    sync ---同时将数据写入到内存与硬盘中,保证不丢失数据.
    async	---优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据
    
    
    all_squash	---无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户(65534)(常用)
    anonuid	---配置all_squash使用,指定NFS的用户UID,必须存在系统	(666)
    anongid	---配置all_squash使用,指定NFS的用户UID,必须存在系统	(666)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    例:

    1.ro	NFS限制只读。
    [root@nfs ~]# cat /etc/exports
    /data 172.16.1.0/24(ro,async,all_squash)
    [root@nfs ~]# systemctl restart nfs
    
    验证
    [root@backup ~]# mount -t nfs 172.16.1.31:/data /opt
    [root@backup ~]# touch /opt/123.txt
    touch: cannot touch '/opt/123.txt': Read-only file system
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    2.all_squash进行用户身份压缩,压缩为匿名用户65534,如果想调整匿名用户为666,需要使用anonuid、anongid、两个参数配置。
    
    我希望调整匿名用户为 www  uid 为 666
    
    [root@nfs ~]# cat /etc/exports
    /data 172.16.1.0/24(rw,async,all_squash,anonuid=666,anongid=666)
    [root@nfs ~]# systemctl restart nfs
    
    [root@nfs ~]# groupadd -g666 www
    [root@nfs ~]# useradd -u666 -g666 www
    [root@nfs ~]# id www
    uid=666(www) gid=666(www) 组=666(www)
    
    [root@nfs ~]# chown -R www.www /data/
    
    
    客户端进行挂载操作:
    [root@backup ~]# mount -t nfs 172.16.1.31:/data /opt
    
    [root@backup ~]# touch /opt/111
    [root@backup ~]# ll /opt/
    -rw-r--r-- 1 666 666 0 May 17 16:45 111
    -rw-r--r-- 1 666 666 0 May 17 16:16 test.txt
    
    建议:客户端也创建与服务端相同的用户、相同的uid和gid
    [root@backup ~]# groupadd -g666 www
    [root@backup ~]# useradd -u666 -g666 www
    [root@backup ~]# ll /opt/
    -rw-r--r-- 1 www www 0 May 17 16:45 111
    -rw-r--r-- 1 www www 0 May 17 16:16 test.txt
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    如何实现永久挂载 ( 客户端上操作 )

    需要将挂载的信息,写入到/etc/fstab文件中,以确保下次启动能正常的挂载。
    
    • 1

    #cat /etc/fstab
    #…增加如下行

    192.168.51.180:/data	/opt			nfs	defaults	0 0
    
    • 1

    如何检查写的对与不对? 如果不对,一重启就会出现挂载不上的情况。
    #mount -a #如果没有报错,那么下次开机一定会自动挂载。(前提NFS服务端要确保是存活的。)

    如何卸载

    #umount /tmp		#卸载
    #umount -lf /tmp	#强制卸载
    
    • 1
    • 2
  • 相关阅读:
    go语言---锁
    Java FileWriter.flush()具有什么功能呢?
    MYSQLg高级------聚簇索引和非聚簇索引
    单片机代码分层
    十二、JSONView插件和 浏览器屏纸在Google浏览器上安装和使用
    thinkphp 导出电子表格【动态表头+动态数据】
    Linux系统防火墙firewalld
    vue3初尝试
    【ELFK】之消息队列kafka
    Lua的协程
  • 原文地址:https://blog.csdn.net/Wangjiachenga/article/details/125882632