NFS共享存储
NFS概述
NFS一般用于文件服务器
# 企业中文件服务器(共享存储)
NFS
GFS(GlusterFS)
FastDFS
HDFS
Ceph
NAS
为什么要使用共享存储
1.实现多台服务器之间数据共享
2.实现多台服务器之间数据一致
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)如果没有缓存或架构本身历史遗留问题太大, 在多存储也无用