NFS共享存储

NFS

  • 什么是NFS?
    共享存储,⽂件服务器

  • NFS基本概述
    NFS是Network File System的缩写,中文意思是网络文件共享系统
    它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录存储服务的种类,只支持Linux与Linux之间数据传输。

NFS存储的优点与缺点

  • 优点:
    1. NFS⽂件系统简单易⽤、⽅便部署、数据可靠、服务稳定、满⾜中⼩企业需求。
    2. NFS⽂件系统内存放的数据都在⽂件系统之上,所有数据都是能看得⻅。
  • 缺点:
    1. 存在单点故障
    2. NFS数据是明⽂, 并不对数据做任何校验。
    3. 客户端挂载NFS服务没有密码验证, 安全性⼀般(内⽹使⽤)

常见的数据存储方式

  • 网络存储:glusterfs、ceph、OSS
  • 分布式:将多台机器,组成像一台机器一样使用
    分布式存储原理图
    在这里插入图片描述
  • 微服务:将一台机器,拆分成多台机器使用

NFS的作用

  • 如果没有NFS会有什么影响?
    在这里插入图片描述
  • 存储服务器的作用
    在这里插入图片描述

NFS工作流程图
在这里插入图片描述

RPC服务的作用

  • 没有RPC服务会有什么影响?
  1. NFS服务启动会有产生多个进程,客户端访问服务端的时,不知道该访问哪一个进程
  2. NFS服务启动产生的进程,端口号是随机分配的,服务端一旦重启服务,那么客户端需要重新建立连接请求
    在这里插入图片描述
  • RPC服务的主要作用
  • 会把客户端存储的请求,由RPC发送给相应的进程,最终实现数据的存储
    在这里插入图片描述
    nginx页面编辑
  1. 下载nginx
1. 准备两台机器
web1  192.168.15.7			
web2  192.168.15.8

2. 两台机器分别添加nginx.repo网址: http://nginx.org/en/linux_packages.html#RHEL-CentOS	
vim /etc/yum.repos.d/nginx.repo 
	[nginx-stable]
	name=nginx stable repo
	baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
	gpgcheck=1
	enabled=1
	gpgkey=https://nginx.org/keys/nginx_signing.key
	module_hotfixes=true
	
	[nginx-mainline]
	name=nginx mainline repo
	baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
	gpgcheck=1
	enabled=0
	gpgkey=https://nginx.org/keys/nginx_signing.key
	module_hotfixes=true

yum clean all						清空yum缓存
yum makecache						重新生成yum缓存
yum -y install nginx 				下载nginx
systemctl start nginx				启动nginx服务
  1. 编辑nginx网页页面内容
cd /usr/share/nginx/html/				nginx网页页面显示指定的目录文件位置/usr/share/nginx/html/index.html
echo 111 > index.html

我们在网页输入web01的网址192.168.15.7,页面是可以显示我们输入的内容111的。
我们只有再次对web02服务器操作命令:echo 111 > /usr/share/nginx/html/index.html才可以实现两台服务器的数据同步。

NFS共享存储

  • NFS服务端配置
1、关闭防火墙
systemctl disable --now firewalld

2、关闭seLinux
sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config
setenforce 0

3、安装nfs
yum install -y nfs-utils rpcbind

4、修改配置文件
vim /etc/exports
	/mnt/data 172.16.1.0/16(rw,sync,all_squash)
	# nfs存储目录   监听的IP(读写权限,内存数据同步到硬盘,压缩权限)

mkdir /mnt/data					创建共享目录
chown nfsnobody:nfsnobody -R /mnt/			修改共享目录的属主和属组
	
5、启动NFS
systemctl start nfs-server

6、查看
showmount -e
# Export list for nfs:
# /mnt/data 172.16.1.0/16
cat /var/lib/nfs/etab 
# /mnt/data 172.16.1.0/16(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,all_squash)
  • 客户端配置
1、关闭防火墙
systemctl disable --now firewalld

2、关闭seLinux
sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config
setenforce 0

3、安装nfs
yum install -y nfs-utils rpcbind

4、将服务端的存储目录挂载到客户端
mount -t nfs 172.16.1.31:/mnt/data /usr/share/nginx/html/			# 将服务端的存储目录挂载到nginx网页编辑指定的目录下

5、查看服务端存储目录是否挂载成功
df -h
# 172.16.1.31:/mnt/data     19G  2.2G   17G  12% /usr/share/nginx/html
  • 修改NFS权限,实现web01,web02数据同步
1. 验证
echo 111 > /mnt/data/index.html
我们在web01,web02里面都按照客户端的配置进行操作。
在浏览器中输入web01的IP和web02的IP地址,发现网站页面的内容都是NFS服务端存储目录(/mnt/data/index.html)的内容111。

但是我们对web01和web02的挂载点目录文件(/usr/share/nginx/html/index.html)进行编辑,发现是没有权限的。
这个时候,只有NFS的root用户对于共享目录有读写权限,我们需要修改NFS服务端共享目录的权限,使客户端也可以对共享目录进行编辑。

2. 修改NFS服务端存储目录权限
cat /var/lib/nfs/etab 			查看NFS软件默认创建的用户anonuid=65534,anongid=65534
# /mnt/data	172.16.1.0/16(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,all_squash)
grep 65534 /etc/passwd					查看用户uid,gid所对应的用户名
# nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
chown nfsnobody:nfsnobody -R /mnt/data/  			将存储目录的属组属主修改成NFS软件默认创建的用户
systemctl restart nfs-server rpcbind				重启NFS和RPC

3. 对web01,web02文件内容进行修改,验证NFS可实现的数据同步,数据共享
在web01进行操作:
重新挂载:
umount /usr/share/nginx/html
mount -t nfs 172.16.1.31:/mnt/data /usr/share/nginx/html/

cd /usr/share/nginx/html/
echo lala biubiubiu > index.html 

我们发现NFS服务器共享目录里面的数据实现了同步,web01和web02的数据也是可以实现同步的,
打开浏览器进行验证,我们发现输入web01和web02的IP后,页面显示的内容也是可以同步的。

NFS配置参数

- 常用的选项
rw:共享的⽬录权限为可读写
sync:数据写⼊内存时,同时将数据保存到磁盘(保证数据不会丢失)
all_squash:⽆论使⽤什么⽤户,都压缩权限,压缩成指定的⽤户
anonuid:指定的⽤户的uid
anongid:指定的⽤户的gid

- 不常用的选项
ro:⽂件权限为只读
async:先把数据保存到内存,再写⼊磁盘(效率高,但是可能会造成数据丢失)
no_all_squash:⽆论使⽤什么⽤户,都不压缩权限
root_squash:客户端使⽤root访问时,压缩权限
no_root_squash:客户端使⽤root访问时,不压缩权限
  • 创建NFS服务端和WEB客户端的统一用户
1. NFS服务端
useradd www									创建新用户
tail -1 /etc/passwd							查看新创建用户的uid,gid
# www:x:1000:1000::/home/www:/bin/bash	
	
vim /etc/exports							修改NFS服务端配置文件
	/mnt/data 172.16.1.0/16(rw,sync,all_squash,anonuid=1000,anongid=1000)

systemctl restart nfs-server rpcbind			重启nfs,rpc服务

cat /var/lib/nfs/etab 							查看nfs服务的基本信息	
# /mnt/data	172.16.1.0/16(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=1000,anongid=1000,sec=sys,rw,secure,root_squash,all_squash)
chown www:www -R /mnt/data						修改共享目录的属组和属主
cd /mnt/data/						
ll												查看nfs目录文件的属组和属主
# total 4
# -rw-r--r-- 1 www www 15 Apr 22 15:55 index.html

2. web客户端 
重新挂载:
umount /usr/share/nginx/html
mount -t nfs 172.16.1.31:/mnt/data /usr/share/nginx/html/

cd /usr/share/nginx/html/					切换到挂载目录
ll											查看挂载目录下的属组和属主
# total 0
# drwxr-xr-x 2 1000 1000 24 Apr 22 15:42 html
useradd www -u1000							创建uid,gid为1000的用户	
tail -1 /etc/passwd							
# www:x:1000:1000::/home/www:/bin/bash

这个时候我们对于NFS共享目录的权限做了控制,客户端只有www用户才可以对NFS共享目录进行编辑

设置开机自动挂载

- 将挂载点写入开机自启脚本文件
方式1:
vim /etc/rc.local			局限性:挂载之后无法测定
	mount -t nfs 172.16.1.31:/mnt/data /usr/share/nginx/html

方式2:
vim /etc/fstab				挂载之后可以测试挂载命令是否书写错误
	172.16.1.31:/mnt/data     /usr/share/nginx/html     nfs    defaults  0 0

mount -a					测试挂载是否成功

案例

案例需求:

  1. web服务器访问的页面能够实时的备份到backup服务器
  2. web服务器的数据是要共享
  • 需求分析:

    1. web01服务器、web02服务器搭建nginx
    2. backup服务器,搭建rsync服务端
    3. web01服务器搭建rsync客户端
    4. web01服务器搭建inotify服务,实现实时监控功能
    5. nfs服务器搭建NFS,做数据共享存储
    6. web01服务器、web02服务器挂载使用NFS服务指定的共享目录
  • 做数据监控脚本

vim inotify.sh
	#!/bin/bash
	
	RSYNC="rsync -az --delete /usr/share/nginx/html/ lala@192.168.15.41::nana"
	
	export RSYNC_PASSWORD=123
	
	/usr/bin/inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib,close_write /usr/share/nginx/html/ | while read line; do $RSYNC ; done
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值