NFS共享存储实战
NFS共享存储实战
NFS基本概述
NFS主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录。
NFS用于企业集群架构中, 如果是大型网站, 会用到更复杂的分布式文件系统FastDFS,glusterfs,HDFS
NFS一般用于文件服务器(共享存储)
为什么要使用共享存储
1.实现多台服务器之间数据共享
2.实现多台服务器之间数据一致
企业中文件服务器(共享存储)
NFS
GFS
FastDFS
HDFS
Ceph
NAS
NFS应用场景
集群没有共享存储时
1.A用户上传图片经过负载均衡,负载均衡将上传请求调度至WEB1服务器上。
2.B用户访问A用户上传的图片,此时B用户被负载均衡调度至WEB2上,因为WEB2上没有这张图片,所
以B用户无法看到A用户传的图片。
集群有共享存储
1.A用户上传图片无论被负载均衡调度至WEB1还是WEB2, 最终数据都被写入至共享存储
2.B用户访问A用户上传图片时,无论调度至WEB1还是WEB2,最终都会上共享存储访问对应的文件,这
样就可以访问到资源了
NFS实现原理
NFS的函数
Read #读取数据(访问)
write #写入(原本自己有的,写进共享存储)
create #创建(原本自己没有,在共享存储中创建出来)
remove #删除
rename #改名
注意:rpcbind是管理nfs的
portmap:端口映射,rpcbind端口号是111
rpc.nfsd:是验证客户端IP是否在IP段
rpc.mount:检测是否有权限挂载共享目录
本地文件操作方式
1.当用户执行mkdir命令, 该命令会调用shell解释器翻译给内核。
2.内核解析完成后会驱动对应的硬件设备,完成相应的操作
NFS原理
1.用户进程访问NFS客户端,使用不同的函数对数据进行处理(这里NFS客户端就是web服务器)
2.NFS客户端通过TCP/IP的方式传递给NFS服务端。
3.NFS服务端接收到请求后,会先调用portmap进程进行端口映射(rpcbind端口号111)
4.nfsd进程用于判断NFS客户端是否拥有权限连接NFS服务端。
5.Rpc.mount进程判断客户端是否有对应的权限进行验证。
6.idmap进程实现用户映射和压缩
7.最后NFS服务端会将对应请求的函数转换为本地能识别的命令,传递至内核,由内核驱动硬件
注意: rpc是一个远程过程调用,那么使用nfs必须有rpc服务
NFS服务实战
环境准备
主机名 | 主机角色 | 外网IP | 内网IP |
---|---|---|---|
web01 | NFS客户端 | 10.0.0.7 | 172.16.1.7 |
web02 | NFS客户端 | 10.0.0.8 | 172.16.1.8 |
nfs | NFS服务端 | 10.0.0.31 | 172.16.1.31 |
NFS服务部署(服务端操作)
NFS服务安装
[root@nfs ~]$ yum -y install nfs-utils rpcbind
查看nfs匿名用户
[root@web01 ~]$ cat /etc/passwd
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
修改配置文件
[root@nfs ~]$ vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash)
#NFS服务配置文件语法:/data(NFS共享目录) 172.16.1.0/24(NFS客户端IP段) (rw,sync,all_squash)(参数1,参数2......)
#PS:下面有参数详解
创建共享目录
[root@nfs ~]$ mkdir /data
#/data就是nfs服务端的共享存储目录
修改目录权限
[root@nfs ~]$ chown nfsnobody.nfsnobody /data
#将目录属主属组修改后,因为我们用的是(all_squash:无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户),这样不管哪个客户端需要访问nfs服务端都有权限操作
启动服务
[root@nfs ~]$ systemctl start nfs-server
加入开机自启
[root@nfs ~]$ systemctl enable nfs-server
检查进程
[root@nfs ~]$ ps -ef|grep [n]fs
root 7168 2 0 18:31 ? 00:00:00 [nfsd4_callbacks]
root 7174 2 0 18:31 ? 00:00:00 [nfsd]
root 7175 2 0 18:31 ? 00:00:00 [nfsd]
root 7176 2 0 18:31 ? 00:00:00 [nfsd]
root 7177 2 0 18:31 ? 00:00:00 [nfsd]
root 7178 2 0 18:31 ? 00:00:00 [nfsd]
root 7179 2 0 18:31 ? 00:00:00 [nfsd]
root 7180 2 0 18:31 ? 00:00:00 [nfsd]
root 7181 2 0 18:31 ? 00:00:00 [nfsd]
检查rpcbind端口号
[root@nfs ~]$ netstat -lntup|grep 111
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 5571/rpcbind
tcp6 0 0 :::111 :::* LISTEN 5571/rpcbind
udp 0 0 0.0.0.0:111 0.0.0.0:* 5571/rpcbind
udp6 0 0 :::111 :::* 5571/rpcbind
客户端操作
安装nfs-utils
[root@web01 ~]$ yum -y install nfs-utils
查看nfs服务端可用的挂载点(共享目录)
root@web01 ~]$ showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
#/data目录可用
创建一个用户上传数据的目录
[root@web01 ~]$ mkdir /user_pic
挂载nfs服务端的共享目录
[root@web01 ~]$ mount -t nfs 172.16.1.31:/data /user_pic
#将nfs服务端的/data目录挂载至客户端/user_pic目录
#-t:type,类型
[root@web01 ~]$ df -h
172.16.1.31:/data 19G 1.4G 18G 8% /user_pic
[root@web01 ~]$ ll /user_pic/ -d
drwxr-xr-x. 2 nfsnobody nfsnobody 6 Jul 7 18:29 /user_pic/
#此时的/user_pic/目录已经是nfs服务端的/data目录了,所以属组属主也变了
NFS配置详解
nfs共享参数 | 参数作用 |
---|---|
rw | 读写权限(客户端可以上传) |
ro | 只读权限(客户端只能读取) |
root_squash | 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户(不常用) |
no_root_squash | 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员(不常用) |
all_squash | 无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户(常用) |
no_all_squash | 无论NFS客户端使用什么账户访问,都以自身账户操作NFS(肯定没权限操作) |
sync* | 同时将数据写入到内存与硬盘中,保证不丢失数据 |
async | 优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据 |
anonuid* | 配置all_squash使用,指定NFS的用户UID,必须存在系统 |
anongid* | 配置all_squash使用,指定NFS的用户UID,必须存在系统 |
企业实战
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
#httpd是http的守护进程
部署代码
[root@web01 ~]$ cd /var/www/html/ #进入/var/www/html/中
[root@web01 /var/www/html]$
[root@web01 /var/www/html]$ rz -E #上传桌面的作业网站的代码文件
rz waiting to receive.
[root@web01 /var/www/html]$ ll
total 28
-rw-r--r--. 1 root root 26927 Jul 7 11:21 kaoshi.zip
[root@web01 /var/www/html]$ systemctl start httpd
解压代码
[root@web01 /var/www/html]$ unzip kaoshi.zip
Archive: kaoshi.zip
inflating: info.php
inflating: upload_file.php
inflating: bg.jpg
inflating: index.html
#解压该压缩文件
修改了php代码,改了里面上传目录
[root@web01 /var/www/html]$ vim upload_file.php
$wen="/var/www/html/pic";
查看httpd服务的匿名用户
[root@web01 /var/www/html]$ ps -ef|grep httpd
root 8272 1 0 01:45 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 8273 8272 0 01:45 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 8274 8272 0 01:45 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 8275 8272 0 01:45 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 8276 8272 0 01:45 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 8277 8272 0 01:45 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
root 8288 7023 0 01:49 pts/0 00:00:00 grep --color=auto httpd
#用户是apache
修改目录的权限
[root@web01 /var/www/html]$ chown apache.apache /var/www/html/
关闭selinux服务
[root@web01 /var/www/html]$ setenforce 0
[root@web01 /var/www/html]$ sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux
启动服务
[root@web01 /var/www/html/]$ systemctl start httpd
#此时就可以通过IP10.0.0.7(web01)进入网站并上传文件,并且在/var/www/html/pic中创建的文件也能在网页中10.0.0.7/pic查看到
将用户上传文件的路径做成共享存储
mount -t nfs 172.16.1.31:/data /var/www/html/pic/
#开启共享存储后10.0.0.8(web02)也可以上传文件至10.0.0.7/pic目录下,实现共享
查看挂载
df -h
如何将nfs的客户端做成开机自动挂载
# 编辑开机挂载的配置文件(不建议)
vim /etc/fstab
172.16.1.31:/data /var/www/html/pic nfs defauts 0 0
注意:如果NFS服务端出现问题,客户端一直挂载不上,可能会导致系统起不来,如果挂载不上只能进入救援模式
nfs卸载
umount /var/www/html/pic
umount -f :强制卸载
增加挂载安全性
在企业工作场景,通常情况NFS服务器共享的只是普通静态数据(图片、附件、视频),不需要执行suid、exec等权限,挂载的这个文件系统只能作为数据存取之用,无法执行程序,对于客户端来讲增加了安全性。例如: 很多木马篡改站点文件都是由上传入口上传的程序到存储目录。然后执行的
#通过mount -o指定挂载参数,禁止使用suid,exec,增加安全性能
mount -t nfs -o nosuid,noexec,nodev 172.16.1.31:/data 挂载点
验证nfs的ro权限
[root@nfs ~]# vim /etc/exports
/pic 10.0.0.0/24(ro,sync,all_squash)
客户端验证:
# 挂载
[root@nfs ~]$ mkdir /pic
[root@web01 ~]$ mount -t nfs 10.0.0.31:/pic /mnt/
# 查看
[root@web01 ~]$ 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.4G 18G 8% /mnt
# 创建文件报错,显示只是一个只读文件
[root@web01 ~]$ touch /mnt/1.txt
touch: cannot touch ‘/mnt/1.txt’: 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 ~]$ groupadd www -g 666
[root@web02 ~]$ useradd www -u 666 -g 666 -s /sbin/nologin -M
#1.统一apache服务用户
[root@web01 ~]$ vim /etc/httpd/conf/httpd.conf
[root@web02 ~]$ vim /etc/httpd/conf/httpd.conf
1)修改前
66 User apache
67 Group apache
2)修改后
66 User www
67 Group www
#更改/var/www/html目录的属主属组为www
[root@web01 ~]$ chown www.www /var/www/html/
[root@web01 ~]$ ll /var/www/html/ -d
drwxr-xr-x. 3 www www 106 Jul 8 01:56 /var/www/html/
[root@web02 ~]$ chown www.www /var/www/html/
[root@web02 ~]$ ll /var/www/html/ -d
drwxr-xr-x. 2 www www 6 Nov 17 2020 /var/www/html/
#再重启httpd服务
[root@web01 ~]$ systemctl restart httpd
#2.统一nfs服务用户
[root@nfs ~]$ vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
#更改共享目录的属主属组
[root@nfs ~]$ chown www.www /data/
[root@nfs ~]$ ll -d /data/
drwxr-xr-x. 2 www www 19 Jul 8 01:02 /data/
#再重启nfs-server服务
[root@nfs ~]$ systemctl restart nfs-server
#3.rsync服务的用户
[root@backup ~]$ vim /etc/rsyncd.conf
uid = www
gid = www
#更改同步目录的属主属组
[root@backup ~]$ chown www.www /backup/
[root@backup ~]$ ll -d /backup/
drwxr-xr-x. 5 www www 108 Jul 8 01:00 /backup/
#再重启rsyncd服务
[root@backup ~]$ systemctl restart rsyncd
NFS小结
1.NFS存储优点
1)NFS文件系统简单易用、方便部署、数据可靠、服务稳定、满足中小企业需求。
2)NFS文件系统内存放的数据都在文件系统之上,所有数据都是能看得见。
2.NFS存储局限
1)存在单点故障, 如果构建高可用维护麻烦web->nfs()->backup
2)NFS数据明文, 并不对数据做任何校验。
3)客户端挂载NFS服务没有密码验证, 安全性一般(内网使用)
3.NFS应用建议
1)生产场景应将静态数据尽可能往前端推, 减少后端存储压力
2)必须将存储里的静态资源通过CDN缓存jpg\png\mp4\avi\css\js
3)如果没有缓存或架构本身历史遗留问题太大, 在多存储也无用
NFS实践案例
环境准备
主机名 | 角色 | 外网IP | 内网IP |
---|---|---|---|
nfs | nfs服务端,rsync的客户端 | 10.0.0.31 | 172.16.1.31 |
backup | rsync服务端 | 10.0.0.41 | 172.16.1.41 |
web01 | nfs客户端,rsync的客户端 | 10.0.0.7 | 172.16.1.7 |
web02 | nfs客户端,rsync的客户端 | 10.0.0.8 | 172.16.1.8 |
要求:
1.目录名$hostname_$ip_$date
2.无差异同步
1.将三台rsync客户端的数据同步到rsync服务端
1.web01:
[root@web01 ~]$ vim tb1.sh
#!/bin/bash
bak_dir=/backup/
HOSTNAME=$(hostname)
IP=$(ifconfig eth1|awk 'NR==2 {print $2}')
DATE=$(date +%F-%T)
tar_dir=$bak_dir/${HOSTNAME}_${IP}_${DATE}
echo '123' > /etc/rsync.passwd
chmod 600 /etc/rsync.passwd
mkdir -p $tar_dir
cd /etc
tar zcf $tar_dir/passwd.tgz passwd
rsync -avz --delete $bak_dir/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.passwd
2.web02:
[root@web01 ~]$ vim tb2.sh
#!/bin/bash
bak_dir=/backup01/
HOSTNAME=$(hostname)
IP=$(ifconfig eth1|awk 'NR==2 {print $2}')
DATE=$(date +%F-%T)
tar_dir=$bak_dir/${HOSTNAME}_${IP}_${DATE}
echo '123' > /etc/rsync.passwd
chmod 600 /etc/rsync.passwd
mkdir -p $tar_dir
cd /etc
tar zcf $tar_dir/passwd.tgz passwd
rsync -avz --delete $bak_dir/ rsync_backup@172.16.1.41::backup01 --password-file=/etc/rsync.passwd
#在backup服务端创建/backup01目录,并指定属组属主为www
3.nfs:
[root@nfs ~]$ vim tb3.sh
#!/bin/bash
bak_dir=/backup02/
HOSTNAME=$(hostname)
IP=$(ifconfig eth1|awk 'NR==2 {print $2}')
DATE=$(date +%F-%T)
tar_dir=$bak_dir/${HOSTNAME}_${IP}_${DATE}
echo '123' > /etc/rsync.passwd
chmod 600 /etc/rsync.passwd
mkdir -p $tar_dir
cd /
tar zcf $tar_dir/data.tgz data
rsync -avz --delete $bak_dir/ rsync_backup@172.16.1.41::backup02 --password-file=/etc/rsync.passwd
#在backup服务端创建/backup02目录,并指定属组属主为www
2.将web01,web02nfs客户端挂载nfs服务端
[root@web01 ~]$ mount -t nfs 172.16.1.31:/data /user_pic/
[root@web01 ~]$ df -h
172.16.1.31:/data 19G 1.4G 18G 8% /user_pic
[root@web02 ~]$ mount -t nfs 10.0.0.31:/pic /user_pic/
[root@web02 ~]$ df -h
10.0.0.31:/pic 19G 1.4G 18G 8% /user_pic #这里挂载的是nfs服务端的/pic
NFS共享存储实战的更多相关文章
- NFS 共享存储实战
目录 NFS 共享存储实战 一.NFS概述 二.NFS部署 部署NFS客户端backup和web01 统一web.nfs.backup的用户权限 代码部署步骤 三.NFS配置详解 NFS存储小结 四. ...
- 生产场景NFS共享存储优化及实战
生产场景NFS共享存储优化: 1.硬件:sas/ssd磁盘,买多块,raid0/raid10,网卡好 2.NFS服务器端优化加all_squash,async /backup/NFS 192.168. ...
- Linux架构之NFS共享存储1
第35章 NFS共享存储 35.1 NFS基本概述 NFS是Network File System的缩写及网络文件系统.NFS主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录. 常见的文件 ...
- Linux之nginx反向代理+三台web+nfs共享存储实现集群配置
作业四:nginx反向代理+三台web+nfs共享存储实现集群配置 在各个web服务器上挂载nfs [root@localhost nginx]# mount -t nfs 192.168.152.1 ...
- 负载均衡LVS之DR(附:NFS共享存储) 五分钟搭建手册
一:DR-模式 调度器Ip:192.168.1.254 服务器ip:192.168.1.1/192.168.1.2 VIP:192.168.1.10 ——配置负载均衡调度器: 关闭重定向响应配置: V ...
- 使用URLOS在linux系统中极速部署NFS共享存储服务
如何在linux系统里搭建NFS服务?其实我们只需要安装一个URLOS面板,然后就能在3分钟内将NFS服务部署完成.近日,URLOS在应用市场中上架了一款NFS应用,它可以让我们的节点主机在3分钟内极 ...
- 基于NFS共享存储实现KVM虚拟机动态迁移
基于NFS共享存储实现KVM虚拟机动态迁移 一:配置环境 二:安装相关的依赖包 三:实现NFS共享存储 四:KVM机配置相同的步骤 五:安装KVM01安装虚拟机 六:实现迁移 实验初始配置:所有主机 ...
- NFS 共享存储
目录 环境准备 NFS服务端 NFS客户端 部署时常见报错 httpd服务 NFS 共享存储的坑 环境准备 主机名 WanIP(Wide Area Network) LanIP(Local Area ...
- NFS共享存储服务
NFS共享存储服务 一.NFS共享 1)NFS(Network File System)网络文件系统 ...
- NFS共享存储服务 (如果厌倦了外面的生活,那就来我身边吧,帮我插秧)
NFS共享存储服务 1.NFS概述 2.在服务器使用NFS发布共享资源 3.在客户机中访问NFS共享资源 1.NFS概述: NFS是一种基于TCP/IP传输的网络文件系统协议.通过使用NFS协 ...
随机推荐
- Linux 系统设置
ubuntu下使用PageUp/PageDown快速翻出历史命令 #vim/etc/inputrc 解除两行注视后重启终端 "\e[5~": history-search-back ...
- 前端小白启动开源框架vue-element
开发java的我按耐不住想学前端的冲动不想看培训机构的视频,决定自学遇到那种"前端知识图谱"的知识架构,看一眼就完了,不能拿来做入门用入门就得是先把工作环境搭起来,能出活就ok了 ...
- Xamarin.Android 利用作业计划程序实现ImageSwitcher图片自动定时轮播
在开发android程序时,遇到一个问题,ImageSwitcher只支持手动的切换图片,不支持自动定时的切换.因为xamarin的资料很少,官方也没有相应的教程,所以想到这个方法,利用job程序来实 ...
- redis保存数据
转载: https://blog.csdn.net/y510662669/article/details/106677717
- 使用ELRepo升级CentOS内核
在腾讯云中部署了一些服务器,操作系统使用的是CentOS 7.6,但是其默认内核版本较低,现使用ELRepo对CentOS的内核进行升级. 操作环境 服务器:腾讯云轻量应用服务器 操作系统:CentO ...
- Linux & 标准C语言学习 <DAY1>
Linux系统简单介绍: BCPL->New B->C->UNIX->Minix->Linux->gcc 美国贝尔实验室 1968 Linu ...
- 暗夜发光,独自闪耀,盘点网页暗黑模式(DarkMode)下的特效和动效,CSS3实现
众所周知,网页的暗黑模式可以减少屏幕反射和蓝光辐射,减少眼睛的疲劳感,特别是在夜间使用时更为明显.其实暗黑模式也给霓虹灯效应(Neon Effect)提供了发挥的环境. 霓虹灯效应是一种视觉效果,其特 ...
- VideoPipe可视化视频结构化框架更新总结(2023-3-30)
项目地址:https://github.com/sherlockchou86/video_pipe_c 往期文章:https://www.cnblogs.com/xiaozhi_5638/p/1696 ...
- 端口转发、Http Tunnel、内网穿透
原文链接:https://www.yuque.com/tec-nine/architecture/mgxc71 SSH 命令帮助 命令行选项有: -a 禁止转发认证代理的连接. -A 允许转发认证代理 ...
- 通过python修改本地ip
写在前面, 1 对于个人公司需要固定ip,而回家需要用到家里的ip, 2对于公司it人员,每台电脑都需要设置ip,,尤其批量的时候,这个作为it的自己知道 3运维人员,可以通过ip测试哪些ip可以用, ...