IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 【Linux集群教程】05 集群存储 - NFS -> 正文阅读

[系统运维]【Linux集群教程】05 集群存储 - NFS

4 文件存储之 NFS

4.1 NFS 简介

4.1.1 NFS 发展史

NFS(Network File System)即网络文件系统,是 FreeBSD 支持的文件系统中的一种,它允许网络中 的计算机之间通过 TCP/IP 网络共享资源。在 NFS 的应用中,本地 NFS 的客户端应用可以透明地读写 位于远端 NFS 服务器上的文件,就像访问本地文件一样。其实大部分的网络文件共享都是基于TCP/IP(更加的安全)的,极有少部分并不是TCP/IP的,例如:TFTP(走的是UDP协议)等。

NFS 最早是由 Sun 公司发展出来的,后被逐渐完整以及整合至 Linux 内核。

4.1.2 NFS 功能

它就是是可以透过网络,让不同的主机、不同的操作系统可以共享存储

4.1.3 NFS 原理

NFS 在文件传送或信息传送过程中依赖于 RPC 协议。远程过程调用 (Remote Procedure Call) 是能使 客户端执行其他系统中程序的一种机制,所以只要用到 NFS 的地方都要启动 RPC 服务,不论是 NFS SERVER 或者 NFS CLIENT 。这样 SERVER 和 CLIENT 才能通过 RPC 来实现 PROGRAM PORT 的对应。可以这么理解 RPC 和 NFS 的关系:NFS 是一个文件系统,而 RPC 是负责数据信息的传输,NFS 本身只是文件数据的控制和配置。

img

4.1.4 NFS 优点

  1. 节省本地存储空间,将常用的数据存放在一台 NFS 服务器上且可以通过网络访问,那么本地终端 将可以减少自身存储空间的使用
  2. 用户不需要在网络中的每个机器上都建有 Home 目录,Home 目录可以放在 NFS 服务器上且可 以在网络上被访问使用
  3. 一些存储设备 CDROM 和 Zip 等都可以在网络上被别的机器使用。这可以减少整个网络上可移动介质设备的数量

4.1.5 NFS 特点

  • NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源
  • 在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样
  • NFS 适用于Linux与Unix之间实现文件共享,不能实现Linux与Windows间的文件共享功能
  • NFS 是运行在应用层的协议,其监听于2049/TCP 和 2049/UDP套接字上
  • NFS 服务只能基于IP进行认证

4.2 NFS 安装构建及配置

4.2.1 安装软件包介绍

  • nfs-utils:这个是 NFS 服务主程序(包含 rpc.nfsd、rpc.mountd、daemons)
  • rpcbind:这个是 CentOS6.X 的 RPC 主程序(CentOS5.X 的为 portmap),是Linux(CentOS / RHEL)内核本身自带的功能。

实验环境:两台服务器

10.10.10.11

10.10.10.12

4.2.2 配置文件 /etc/exports 书写规则

/etc/exports 文件的配置格式为:

  • NFS共享目录 NFS客户端地址1(参数 1,参数 2,参数 3…) 客户端地址 2(参数 1,参数 2,参数 3…)

  • NFS共享目录 NFS客户端地址 (参数 1,参数 2,参数 3…)

    • NFS 共享目录: 共享目录是指 NFS 服务器共享给客户机使用的目录
    • NFS 客户端: 客户端是指网络中可以访问这个 NFS 共享目录的计算机
    • NFS 客户端常用的指定方式:
      • 指定 ip 地址的主机:192.168.0.200
      • 指定子网中的所有主机:192.168.88.0
      • 指定域名的主机:www.baidu.com
      • 指定域中的所有主机:*.baidu.com
      • 所有主机:*

在 NFS 配置文件中是按行匹配的,一行就是一个完整的共享,另一行就是另外一个共享,以此类推。

相关的NFS命令

#显示NFS服务器加载的信息
showmount [选项] [参数]
showmount -e ip 	#-e:显示NFS服务器上所有的共享目录
showmount -d ip 	#-d:仅显示已被NFS客户端加载的目录

#查看挂载
mount -t nfs ip:/file /file1

4.2.3 共享权限解释

/etc/exports 配置文件参数解释

rw:read-write,可读可写,注意,仅仅这里设置成读写客户端还是不能正常写入,还要正确地设置共享目录的权限 ;

ro:read-only,只读;

  • 相互冲突的参数不能都使用。

sync:文件同时写入硬盘和内存,更加的安全,使用的速度会较慢;

async:文件暂存于内存,而不是直接写入内存;

no_root_squash:NFS 客户端连接服务端时如果使用的是 root 的话,那么对服务端分享的目录来说, 也拥有 root 权限。显然开启这项是不安全的;

root_squash:NFS 客户端连接服务端时如果使用的是 root 的话,那么对服务端分享的目录来说,拥 有匿名用户权限,通常他将使用 nobody 或 nfsnobody 身份 ;

all_squash:不论 NFS 客户端连接服务端时使用什么用户,对服务端分享的目录来说都是拥有匿名用户权限;

anonuid:匿名用户的 UID 值,通常是 nobody 或 nfsnobody,可以在此处自行设定;

anongid:匿名用户的 GID 值;

哪怕有一点的安全性提升,都需要管理员进行操作提升系统的安全性。

4.2.4 NFS Server 配置(10.10.10.11)

$ yum -y install rpcbind nfs-utils 
#服务器端安装 rpcbind 和 NFS-utils 软件包 
$ mkdir /nfs1 /nfs2  
#共享点
$ chown -R nobody:nobody /nfs1 /nfs2 
#给匿名用户权限
$ ls -ld /nfs1 /nfs2
drwxr-xr-x 2 nobody nobody 6 Sep  5 11:02 /nfs1
drwxr-xr-x 2 nobody nobody 6 Sep  5 11:02 /nfs2

$ vim /etc/exports 
#修改配置文件
#共享目录的绝对路径 NFS客户端地址(共享权限参数,...,...)
/nfs1 10.10.10.12(rw,async,no_root_squash)
/nfs2 10.10.10.0/24(ro,async,no_root_squash)

#CentOS7
$ systemctl restart nfs && systemctl restart rpcbind
$ systemctl restart nfs
#CentOS6
#$ service nfs restart && service rpcbind restart
#$ service nfs restart 
#需要在重启下nfs

#格式: showmount -e <IP地址>
#查看挂载情况 
$ showmount -e 10.10.10.11
Export list for 10.10.10.11:
/nfs2 10.10.10.0/24
/nfs1 10.10.10.12

#拷贝测试文件
$ cp -a /etc/fstab /nfs1/
$ cp -a /var/log/messages /nfs2/

$ /etc/init.d/rpcbind status 
# 查看 rpcbind 当前状态 
LANG=en # 查看当前语言 

$ rpcinfo -p localhost | grep nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    3   tcp   2049  nfs_acl
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    3   udp   2049  nfs_acl

$ lsof –i :111
COMMAND PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rpcbind 714  rpc    6u  IPv4  18451      0t0  UDP *:sunrpc
rpcbind 714  rpc    8u  IPv4  18455      0t0  TCP *:sunrpc (LISTEN)
rpcbind 714  rpc    9u  IPv6  18456      0t0  UDP *:sunrpc
rpcbind 714  rpc   11u  IPv6  18458      0t0  TCP *:sunrpc (LISTEN)

4.2.5 NFS Client 配置(10.10.10.12)

#查看NFS上所有的共享目录
$ showmount -e 10.10.10.11
Export list for 10.10.10.11:
/nfs2 10.10.10.0/24
/nfs1 10.10.10.12

$ mkdir -pv /nfs1 /nfs2 
#创建挂载点
$ chown -R nobody:nobody /nfs1 /nfs2 
#给匿名用户权限

#格式:mount -t nfs ip:/file /file1 
#在客户端进行 NFS 的挂载操作
$ mount -t nfs 10.10.10.11:/nfs1/ /nfs1/
#把nfs服务器的/nfs1挂载到客户端的/nfs1
$ mount -t nfs 10.10.10.11:/nfs2/ /nfs2/
#这两个目录都是同步的,查看文件是否同步
$ ls -l /nfs1 /nfs2
/nfs1:
total 4
-rw-r--r-- 1 root root 583 Sep  5 11:11 fstab

/nfs2:
total 824
-rw------- 1 root root 841478 Sep  5 11:06 messages
#查看挂载点
$ mount | grep nfs
10.10.10.11:/nfs1 on /nfs1 type nfs4 (rw,relatime,vers=4.1,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.10.10.12,local_lock=none,addr=10.10.10.11)
10.10.10.11:/nfs2 on /nfs2 type nfs4 (rw,relatime,vers=4.1,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.10.10.12,local_lock=none,addr=10.10.10.11)
#10.10.10.12 /nfs1 可读可写测试
$ cat /nfs1/fstab		#可读该文件
$ echo "Hello NFS FileSystem" > /nfs1/test.txt
$ cat /nfs1/test.txt
Hello NFS FileSystem

#10.10.10.12 /nfs2 只读测试
$ cat /nfs2/messages #可读该文件
$ echo "Hello NFS FileSystem" > /nfs2/test.txt
-bash: /nfs2/test.txt: Read-only file system #只读目录

#卸载客户端的挂载目录
$ umount 挂载点
#停止服务器端的共享
$ exportfs -au

#自动挂载:
$ vim /etc/fstab
#格式:服务器ip地址:/服务器共享目录  /本地挂载目录 nfs defaults 0 0 
10.10.10.11:/nfs1 /nfs1 nfs defaults 0 0 

$ mount -a
#重启机器后会自动进行挂载操作
$ reboot 
...
$ mount | grep nfs
10.10.10.11:/nfs1 on /nfs1 type nfs4 (rw,relatime,vers=4.1,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.10.10.12,local_lock=none,addr=10.10.10.11)

4.2.6 NFS 相关命令介绍

4.2.6.1 exportfs 命令

管理NFS共享文件系统列表

补充说明

exportfs 命令用来管理当前NFS共享的文件系统列表。

参数:

-a 打开或取消所有目录共享。
-o options,...指定一列共享选项,与 exports(5) 中讲到的类似。
-i 忽略 /etc/exports 文件,从而只使用默认的和命令行指定的选项。
-r 重新共享所有目录。它使 /var/lib/nfs/xtab 和 /etc/exports 同步。 
它将 /etc/exports 中已删除的条目从 /var/lib/nfs/xtab 中删除,将内核共享表中任何不再有效的条目移除。

-u 取消一个或多个目录的共享。
-f 在“新”模式下,刷新内核共享表之外的任何东西。 任何活动的客户程序将在它们的下次请求中得到 mountd添加的新的共享条目。
-v 输出详细信息。当共享或者取消共享时,显示在做什么。 显示当前共享列表的时候,同时显示共享的选项。

4.2.6.2 showmount 命令

显示NFS服务器加载的信息

补充说明

showmount命令 查询“mountd”守护进程,以显示NFS服务器加载的信息。

语法

showmount(选项)(参数)

选项

-d:仅显示已被NFS客户端加载的目录; 
-e:显示NFS服务器上所有的共享目录。 

参数

NFS服务器:指定NFS服务器的ip地址或者主机名。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-09-21 01:04:54  更:2022-09-21 01:07:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:26:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码