NFS服务器搭建与配置
Posted 未末0902
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NFS服务器搭建与配置相关的知识,希望对你有一定的参考价值。
前言
提示:这里可以添加本文要记录的大概内容:
提示:以下是本篇文章正文内容,下面案例可供参考
一、nfs介绍:
1.什么是nfs?
网络文件系统,英文Network File System(NFS),是由SUN公司研制的UNIX表示层协议(presentation layer protocol),能使使用者访问网络上别处的文件就像在使用自己的计算机一样。
在网络上共享自己机器里的文件,其他的机器可以使用
2.为什么需要nfs服务器?
保障网站数据的一致性–》不管负载均衡器将请求分配到那台后端的服务器,客户机看到的内容是一样。
3.nfs服务器是否是最佳的解决方法?
答案: 不是的
nfs是比较廉价的解决方法,一般的公司不会采用,性能不是特别棒,建议使用专用的存储服务器。
廉价的解决方法:nfs
有钱的解决方法: san
4.存储服务器的优缺点
优点:读写性能好,有灾备
san:区域存储网络
存储区域网络(Storage Area Network,简称SAN)采用网状通道(Fibre Channel ,简称FC,区别与Fiber Channel光纤通道)技术,通过FC交换机连接存储阵列和服务器主机,建立专用于数据存储的区域网络。
缺点:价格昂贵
5.nfs解决了什么问题?有什么优缺点?
数据同源: 到同一个地方去拿数据,保障数据的一致性
nfs的优点和缺点
优点: 随便一台linux服务器都可以搭建,成本非常低,构建非常容易
缺点: 读取速度有限,跟网络质量,磁盘IO,cpu,内存等因素有关,在传统的tcp/ip网络上传输的
二、具体实验操作:
1.环境准备:
准备一台服务器:
配置没有关系,可以简单点: 1核/1G
配置好ip地址:192.168.0.193
2.安装nfs的相关软件
[root@nfs-server ~]# yum install nfs-utils -y
3.启动nfs-server服务
[root@nfs-server ~]# service nfs-server stop
Redirecting to /bin/systemctl stop nfs-server.service
[root@nfs-server ~]# service nfs-server start
Redirecting to /bin/systemctl start nfs-server.service
[root@nfs-server ~]# service nfs-server restart
Redirecting to /bin/systemctl restart nfs-server.service
查看nfs进程:
[root@nfs-server ~]# ps aux|grep nfs
root 431 0.0 0.0 0 0 ? I 8月01 0:01 [kworker/u128:4-nfsd4]
root 833 0.0 0.3 50304 2932 ? Ss 8月01 0:00 /usr/sbin/nfsdcld
root 5311 0.0 0.0 0 0 ? S 11:02 0:00 [nfsd]
root 5312 0.0 0.0 0 0 ? S 11:02 0:00 [nfsd]
root 5313 0.0 0.0 0 0 ? S 11:02 0:00 [nfsd]
root 5314 0.0 0.0 0 0 ? S 11:02 0:00 [nfsd]
root 5315 0.0 0.0 0 0 ? S 11:02 0:00 [nfsd]
root 5316 0.0 0.0 0 0 ? S 11:02 0:00 [nfsd]
root 5317 0.0 0.0 0 0 ? S 11:02 0:00 [nfsd]
root 5318 0.0 0.0 0 0 ? S 11:02 0:00 [nfsd]
root 5326 0.0 0.1 12320 992 pts/0 S+ 11:03 0:00 grep --color=auto nfs
[root@nfs-server ~]#
**
4.原理部分:
**
nfs服务和rpc到底是如何实现的呢?工作原理
端口号:
ssh–>22
nginx -->80
mysql -->3306
我们就得需要远程过程调用 (RPC) 的服务啦!RPC 最主要的功能就是在指定每个 NFS 功能所对应的 port number ,并且回报给客户端,让客户端可以连结到正确的端口上去。 那 RPC 又是如何知道每个 NFS 的端口呢?这是因为当服务器在启动 NFS 时会随机取用数个端口,并主动的向 RPC 注册,因此 RPC 可以知道每个端口对应的 NFS 功能。
nfs自己并没有去对外监听某个端口号,而是外包给了rpc服务,rpc帮助nfs去监听端口,然后告诉客户机和本机的那个进程对应的端口连续.
代码如下(示例):
[root@nfs-server ~]# netstat -anplut|grep nfs
[root@nfs-server ~]# netstat -anplut|grep rpc 查看rpc服务相关的端口
tcp 0 0 0.0.0.0:35503 0.0.0.0:* LISTEN 960/rpc.statd
tcp 0 0 0.0.0.0:20048 0.0.0.0:* LISTEN 5304/rpc.mountd
tcp6 0 0 :::20048 :::* LISTEN 5304/rpc.mountd
tcp6 0 0 :::42099 :::* LISTEN 960/rpc.statd
udp 0 0 0.0.0.0:20048 0.0.0.0:* 5304/rpc.mountd
udp 0 0 127.0.0.1:717 0.0.0.0:* 960/rpc.statd
udp 0 0 0.0.0.0:42974 0.0.0.0:* 960/rpc.statd
udp6 0 0 :::20048 :::* 5304/rpc.mountd
udp6 0 0 :::43399 :::* 960/rpc.statd
[root@nfs-server ~]#
5.共享文件
编辑/etc/exports文件,写好具体的共享的目录和权限
/etc/exports
[root@nfs-server ~]# vim /etc/exports
/web 192.168.0.0/24(rw,all_squash,sync)
/web 是我们共享的文件夹的路径–》使用绝对路径 --》需要自己新建
192.168.0.0/24 允许过来访问的客户机的ip地址网段
(rw,all_squash,sync) 表示权限的限制
rw 表示可读可写 read and write
ro 表示只能读 read-only
all_squash :任何客户机上的用户过来访问的时候,都把它认为是普通的用户
root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器匿名用户
no_root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员
sync 同时将数据写入到内存与硬盘中,保证不丢失数据
async 优先将数据保存到内存,然后再写入硬盘,效率更高,但可能丢失数据
[root@nfs-server ~]# mkdir /web
[root@nfs-server ~]# cd /web
[root@nfs-server web]#vim index.html 创建首页文件
index.html
[root@nfs-server web]# cat index.html
welcome to sanchuang!
[root@nfs-server web]#
6.刷新输出文件的列表
[root@nfs-server web]# exportfs -rv
exporting 192.168.0.0/24:/web
[root@nfs-server web]#
[root@nfs-server web]# cat /etc/exports
/web 192.168.0.0/24(rw,all_squash,sync)
[root@nfs-server web]#
[root@nfs-server web]# mkdir /download 新建/download
[root@nfs-server web]# exportfs -rv
exporting 192.168.0.190:/download
exporting 192.168.0.192:/download
exporting 192.168.0.180:/download
exporting 192.168.0.0/24:/download
exporting 192.168.0.0/24:/web
[root@nfs-server web]#
复制一点点数据到/download目录下
[root@nfs-server download]# cp /etc/hosts .
[root@nfs-server download]# tar czf boot.tar.gz /boot
tar: 从成员名中删除开头的“/”
[root@nfs-server download]#
[root@nfs-server download]# ls
boot.tar.gz hosts
[root@nfs-server download]#
7.建议关闭防火墙和selinux
[root@nfs-server download]# service firewalld stop
Redirecting to /bin/systemctl stop firewalld.service
[root@nfs-server download]# systemctl disable firewalld
[root@nfs-server download]# getenforce
Disabled
[root@nfs-server download]#
8.在客户机上挂载nfs服务器上共享的/web和/download目录
[root@web-server2 ~]# yum install nfs-utils -y 安装nfs-utils软件,方便客户机上进行挂载,具有了相关命令了,例如:showmount
[root@web-server2 ~]# showmount -e 192.168.0.21 查看nfs服务器上共享输出了哪些文件夹
[root@manager17 _data]# showmount -e 192.168.0.21
Export list for 192.168.0.21:
/download 192.168.0.17/24
/web 192.168.0.0/24
[root@manager17 _data]#
9.挂载nfs服务器上的目录到本机上
[root@web-server2 ~]# mkdir /web 在客户机的本地新建一个目录/web
[root@web-server2 ~]# mount 192.168.0.139:/web /web 将nfs服务器上的/web目录挂载到本地的/web目录,今后访问本地的/web目录,就是访问到nfs服务器上的/web目录
mount 是挂载的命令,可以理解为一种映射
10.显示效果:
[root@manager17 web]# pwd
/web
[root@manager17 web]# mount 192.168.0.21:/web /web
[root@manager17 web]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 1.8G 0 1.8G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 34M 1.8G 2% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/cl-root xfs 64G 9.1G 55G 15% /
/dev/sda1 xfs 1014M 194M 821M 20% /boot
/dev/mapper/cl-home xfs 32G 255M 31G 1% /home
tmpfs tmpfs 371M 0 371M 0% /run/user/0
overlay overlay 64G 9.1G 55G 15% /var/lib/docker/overlay2/6c8bbfd010acdcf3176137e20aa6bbfde70c294fca36eb4f0a00a0375a37ba10/merged
overlay overlay 64G 9.1G 55G 15% /var/lib/docker/overlay2/f92f29ded8924003e4440c092b5161fcd943cda9f989946efedc323d774a9a3a/merged
192.168.0.21:/web nfs4 17G 3.9G 14G 23% /web
[root@manager17 web]# mkdir /download
[root@manager17 web]# mount 192.168.0.21:/download /download/
[root@manager17 web]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 1.8G 0 1.8G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 34M 1.8G 2% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/cl-root xfs 64G 9.1G 55G 15% /
/dev/sda1 xfs 1014M 194M 821M 20% /boot
/dev/mapper/cl-home xfs 32G 255M 31G 1% /home
tmpfs tmpfs 371M 0 371M 0% /run/user/0
overlay overlay 64G 9.1G 55G 15% /var/lib/docker/overlay2/6c8bbfd010acdcf3176137e20aa6bbfde70c294fca36eb4f0a00a0375a37ba10/merged
overlay overlay 64G 9.1G 55G 15% /var/lib/docker/overlay2/f92f29ded8924003e4440c092b5161fcd943cda9f989946efedc323d774a9a3a/merged
192.168.0.21:/web nfs4 17G 3.9G 14G 23% /web
192.168.0.21:/download nfs4 17G 3.9G 14G 23% /download
[root@manager17 ~]# cd /web/
[root@manager17 web]# ls
feng.jpg index.html sc.html su.tar.gz xiong.jpg
[root@manager17 web]#
[root@manager17 web]# cd /web/
[root@manager17 web]# mkdir feng
mkdir: 无法创建目录 “feng”: 只读文件系统
[root@manager17 web]# cd /download/
[root@manager17 download]# mkdir feng
[root@manager17 download]# ls
feng
[root@manager17 download]#
三.拓展
1.客户机上能否有写的权限要看2种权限:
(1) 共享权限 --》/etc/exports文件里的权限,例如ro,rw
(2) 文件系统里的权限 --》/web 在linux里的权限
[root@nfs-server web]# ll -d /web
drwxrwxrwx. 3 root root 56 8月 2 11:55 /web
[root@nfs-server web]# ll -d /download
drwxr-xr-x 2 root root 38 8月 2 11:44 /download ---》nfs客户机挂载后,没有写的权限,因为其他人没有w权限
[root@nfs-server web]#
[root@nfs-server web]# ll -d /web
drwxr-xr-x. 2 root root 24 8月 23 16:21 /web
[root@nfs-server web]# ll -d /download/
drwxr-xr-x. 2 root root 6 8月 23 16:25 /download/
[root@nfs-server web]# chmod o+w /download/
[root@nfs-server web]#
2.授权和验证
在nfs服务器上授权
[root@nfs-server web]# chmod a+w /download/
[root@nfs-server web]# ll -d /download
drwxrwxrwx 2 root root 38 8月 2 11:44 /download
[root@nfs-server web]#
在客户机上验证
[root@web-server2 web]# cd /download/
[root@web-server2 download]# mkdir fengdeyong
[root@web-server2 download]# ls
boot.tar.gz fengdeyong hosts
[root@web-server2 download]#
3.挂载问题
剩下的其他的nginx服务器都要挂载
考虑开机自动挂载的问题
====
挂载: 其实就是相当于我们把u盘或者移动硬盘插到我们的电脑上,我们的系统给分配一个盘符,例如:H,G ,这个过程就叫挂载 mount
挂车:
挂载 --》挂上加载
umount --》卸载 --》相当于弹出u盘
====
volume driver 卷的驱动程序(库):
1.ssh
2.nfs
[root@web-server1 ~]# showmount -e 192.168.0.139
Export list for 192.168.0.139:
/web 192.168.0.0/24
/download 192.168.0.0/24
四.volume机制
1.什么是volme?
nfs–》volume–》container
sshfs–》volume–》container
Docker 提供了 Volume 机制以便将数据持久化存储。
Kubernetes 提供了更强大的 Volume 机制和丰富的插件,解决了容器数据持久化和容器间共享数据的问题。
nfs共享/web目录—》docker宿主机挂载–》manager上启动service–》启动容器–》使用volume挂载到容器里
[root@manager161 ~]# docker service create -d --name nfs-service-2 --mount 'type=volume,source=nfsvolume,target=/usr/share/nginx/html,volume-driver=local,volume-opt=type=nfs,volume-opt=device=:/web,"volume-opt=o=addr=192.168.80.13,rw,nfsvers=4,async"' --replicas 6 -p 80:80 nginx:latest
[root@manager161 ~]# docker service create -d --name sc-nfs-web --mount 'type=volume,source=nfsvolume,target=/usr/share/nginx/html,volume-driver=local,volume-opt=type=nfs,volume-opt=device=:/web,"volume-opt=o=addr=192.168.0.21,rw,nfsvers=4,async"' --replicas 10 -p 8089:80 nginx:latest
2.指令操作
source=nfsvolume --》docker宿主机上的卷的名字
/usr/share/nginx/html -->容器里存放网页的目录
volume-driver=local 访问本地的某个目录的
volume-opt=type=nfs --》volume对nfs的支持选项
volume-opt=device=:/web --》是nfs服务器共享目录
volume-opt=o=addr=192.168.0.21,rw,nfsvers=4,async 挂载具体的nfs服务器的ip地址和选项
–replicas 10 副本的数量
-p 8089:80 端口映射
nginx:latest 具体的镜像版本
需要等待10分钟
[root@manager17 download]# docker service create --name sc-nfs-web --mount 'type=volume,source=nfsvolume2,target=/usr/share/nginx/html,volume-driver=local,volume-opt=type=nfs,volume-opt=device=:/web,"volume-opt=o=addr=192.168.0.21,rw,nfsvers=4,async"' --replicas 10 -p 8089:80 nginx:latest
rkjry4donhb1b9xqry1f3o1g7
overall progress: 10 out of 10 tasks
1/10: running [==================================================>]
2/10: running [==================================================>]
3/10: running [==================================================>]
4/10: running [==================================================>]
5/10: running [==================================================>]
6/10: running [==================================================>]
7/10: running [==================================================>]
8/10: running [==================================================>]
9/10: running [==================================================>]
10/10: running [==================================================>]
verify: Service converged
[root@manager17 download]#
[root@manager17 download]# docker volume inspect nfsvolume2
[
{
"CreatedAt": "2021-08-23T16:32:32+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/nfsvolume2/_data",
"Name": "nfsvolume2",
"Options": {
"device": ":/web",
"o": "addr=192.168.0.21,rw,nfsvers=4,async",
"type": "nfs"
},
"Scope": "local"
}
]
[root@manager17 download]#
[root@manager17 download]# cd /var/lib/docker/volumes/nfsvolume2/_data/
[root@manager17 _data]# ls
feng.jpg index.html sc.html su.tar.gz xiong.jpg
[root@manager17 _data]#
五.课后练习
启动一个service使用nfs服务器共享的目录,使用nginx镜像,让所有的容器都使用相同的网页数据
1.sshfs
2.nfs
该处使用的url网络请求的数据。
总结
1.在docker 的学习中,nfs是其中重点的章节,对于原理的部分以及服务器的搭建和配置很重要,需要好好地消化一下.
2.对于volume机制,我们可以对比docker 和 Kubernetes 中的区别来学习,这样更容易理解
3.如果你看到这里了,麻烦👍 + 关注哈,感谢支持,码字不易,谢谢理解.
以上是关于NFS服务器搭建与配置的主要内容,如果未能解决你的问题,请参考以下文章