NFS共享存储

NFS共享存储

NFS概述

NFS一般用于文件服务器
# 企业中文件服务器(共享存储)
NFS
GFS(GlusterFS)
FastDFS
HDFS
Ceph
NAS

为什么要使用共享存储

1.实现多台服务器之间数据共享
2.实现多台服务器之间数据一致

NFS的原理

NFS共享存储

上传图片后,在本地保存不保存?

不保存,但是本地的指定目录中可以看到,它已经是远端的data目录了

NFS实战

环境准备

主机名 角色 外网IP 内网IP
nfs NFS的服务端 10.0.0.31 172.16.1.31
web01 NFS的客户端 10.0.0.7 172.16.1.7
web02 NFS的客户端 10.0.0.8 172.16.1.8

NFS服务部署(服务端操作)

# 1.安装nfs
[root@nfs ~]# yum install -y nfs-utils

# 2.修改配置文件
[root@nfs ~]# vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash)

# 3.创建共享目录
[root@nfs ~]# mkdir /data

# 4.修改目录权限
[root@nfs ~]# chown nfsnobody.nfsnobody /data

# 5.启动服务
[root@nfs ~]# systemctl start nfs-server

# 6.将nfs服务加入开机自启
[root@nfs ~]# systemctl enable nfs-server

# 7.检查进程
Wed Jul 07 20:19:14 root@nfs ~]
 #  ps -ef|grep [n]fs
root      19415      2  0 10:31 ?        00:00:00 [nfsd4_callbacks]
root      19421      2  0 10:31 ?        00:00:00 [nfsd]
root      19422      2  0 10:31 ?        00:00:00 [nfsd]
root      19423      2  0 10:31 ?        00:00:00 [nfsd]
root      19424      2  0 10:31 ?        00:00:00 [nfsd]
root      19425      2  0 10:31 ?        00:00:00 [nfsd]
root      19426      2  0 10:31 ?        00:00:00 [nfsd]
root      19427      2  0 10:31 ?        00:00:00 [nfsd]
root      19428      2  0 10:31 ?        00:00:00 [nfsd]

# 8.检查rpcbind端口号
[Wed Jul 07 20:19:18 root@nfs ~]
 # netstat -lntup|grep 111
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      5817/rpcbind        
tcp6       0      0 :::111                  :::*                    LISTEN      5817/rpcbind        
udp        0      0 0.0.0.0:111             0.0.0.0:*                           5817/rpcbind        
udp6       0      0 :::111                  :::*                                5817/rpcbind

客户端操作

# 1.先安装nfs-utils
[root@web01 ~]# yum install -y nfs-utils

# 2.查看挂载点
[root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24

# 3.创建一个用户上传数据的目录
[root@web01 ~]# mkdir /user_pic

# 4.挂载远端的目录
[root@web01 ~]# mount -t nfs 172.16.1.31:/data /user_pic

企业实战

NFS客户端部署web站点

## 安装网站服务
[root@web01 ~]# yum install -y httpd php
[root@web02 ~]# yum install -y httpd php

## 查找http服务的站点目录
[root@web01 ~]# rpm -ql httpd
/var/www/html

## 部署代码
上传代码
rz

## 解压代码
[root@web01 html]# unzip kaoshi.zip

## 修改了php代码,改了里面上传目录
[root@web02 html]# vim upload_file.php
$wen="/var/www/html/pic";

## 修改目录的权限
[root@web02 html]# chown apache.apache /var/www/html/

## 启动服务
[root@web01 html]# systemctl start httpd

## 将用户上传文件的路径做成共享存储
[root@web02 html]# mount -t nfs 172.16.1.31:/data /var/www/html/pic/

## 查看挂载
[root@web02 html]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 1.4G 18G 8% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.8M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 497M 120M 378M 25% /boot
tmpfs 98M 0 98M 0% /run/user/0
172.16.1.31:/data 19G 1.5G 18G 8% /var/www/html/pic

如何将nfs的客户端做成开机自动挂载

## 编辑开机挂载的配置文件(不建议)
[root@web01 ~]# vim /etc/fstab
172.16.1.31:/data /var/www/html/pic nfs defaults
0 0

注意:如果NFS服务端出现问题,客户端一直挂载不上,可能会导致系统起不来

nfs卸载

[root@web01 ~]# umount /var/www/html/pic

增加挂载的安全性

在企业工作场景,通常情况NFS服务器共享的只是普通静态数据(图片、附件、视频),不需要执行 suid、exec 等
权限,挂载的这个文件系统只能作为数据存取之用,无法执行程序,对于客户端来讲增加了安全性。例如: 很多木马
篡改站点文件都是由上传入口上传的程序到存储目录。然后执行的。

#通过mount -o指定挂载参数,禁止使用suid,exec,增加安全性能
[root@nfs-client ~]# mount -t nfs -o nosuid,noexec,nodev 172.16.1.31:/data /mnt

验证nfs的ro权限

[root@nfs ~]# vim /etc/exports
/pic 10.0.0.0/24(ro,sync,all_squash)

# 挂载
[root@web02 ~]# mount -t nfs 10.0.0.31:/pic /mnt

# 查看
[root@web02 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 1.4G 18G 8% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.7M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 497M 120M 378M 25% /boot
tmpfs 98M 0 98M 0% /run/user/0
10.0.0.31:/pic 19G 1.5G 18G 8% /mnt

# 创建文件报错
[root@web02 mnt]# touch /mnt/file
touch: cannot touch ‘file’: Read-only file system

# 查看etab配置文件是否生效
[root@nfs ~]# cat /var/lib/nfs/etab

企业中一定要统一用户权限

## 统一用户,一定要保证uid和gid一样
[root@nfs ~]# groupadd www -g 666
[root@nfs ~]# useradd www -u 666 -g 666 -s /sbin/nologin -M
[root@backup ~]# groupadd www -g 666
[root@backup ~]# useradd www -u 666 -g 666 -s /sbin/nologin -M
[root@web01 ~]# groupadd www -g 666
[root@web01 ~]# useradd www -u 666 -g 666 -s /sbin/nologin -M
[root@web02 mnt]# groupadd www -g 666
[root@web02 mnt]# useradd www -u 666 -g 666 -s /sbin/nologin -M

# 1.统一apache服务用户
[root@web02 ~]# vim /etc/httpd/conf/httpd.conf

## 修改前
66 User apache
67 Group apache

## 修改后
66 User www
67 Group www

# 2.统一nfs服务用户
[root@nfs ~]# vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)

# 3.rsync服务的用户
[root@backup ~]# vim /etc/rsyncd.conf

# 服务启动的用户
uid = www

# 服务启动的用户组
gid = www

NFS小结

1.NFS存储优点 1)NFS文件系统简单易用、方便部署、数据可靠、服务稳定、满足中小企业需求。2)NFS文件系统
内存放的数据都在文件系统之上,所有数据都是能看得见。
2.NFS存储局限 1)存在单点故障, 如果构建高可用维护麻烦web->nfs()->backup2)NFS数据明文, 并不对数据做任何校
验。3)客户端挂载NFS服务没有密码验证, 安全性一般(内网使用)
3.NFS应用建议 1)生产场景应将静态数据尽可能往前端推, 减少后端存储压力2)必须将存储里的静态资源通过CDN
缓存jpg\png\mp4\avi\css\js3)如果没有缓存或架构本身历史遗留问题太大, 在多存储也无用
上一篇:Numpy的索引使用


下一篇:阿里云内部K8s、ECS、RDS、DevOps实战手册,超赞