一、简介
1.1 NFS概述
简介:
NFS(Network File System,网络文件系统)是一种分布式文件系统,它允许在网络上的不同机器之间共享文件和目录。NFS的主要目的是使客户端能够像访问本地文件一样访问远程服务器上的文件,从而实现资源的共享和便利的文件管理
NFS的基本工作原理:
- 服务器端:NFS服务器负责管理共享的文件和目录,并监听来自客户端的请求。当客户端请求访问某个文件或目录时,服务器会根据请求类型(例如读/写、创建、删除等)和权限来执行相应的操作。
- 客户端:客户端通过挂载远程共享的文件系统来访问服务器上的文件和目录。一旦挂载成功,客户端就可以像操作本地文件一样对远程文件进行操作
NFS基本工作原理图:
NFS的优点包括:
- 灵活性:客户端可以随时挂载或卸载NFS共享,使得文件的共享非常灵活。
- 可扩展性:NFS可以很容易地扩展到多台服务器,从而实现大规模的文件共享。
- 安全性:NFS提供了用户身份验证和访问控制机制,以确保只有经过授权的用户才能访问特定的文件或目录。
NFS的缺点:
- 网络带宽需求高:由于所有文件操作都通过网络进行,因此对网络带宽的需求较高。这在低带宽或高延迟的网络环境中可能会成为问题。
- 配置和管理复杂:NFS的配置和管理可能相对复杂,尤其是在大规模部署的情况下。需要进行适当的规划和配置以确保NFS的正常运行和性能。
- 单点故障问题:如果NFS服务器出现故障,客户端将无法访问共享的文件和目录。为了解决这个问题,可以部署多个NFS服务器以实现高可用性和容错性。
- 数据一致性问题:NFS协议本身不提供强一致性保证,因此可能会出现数据不一致的情况。这需要客户端在操作文件时进行适当的同步和一致性检查。
- 安全问题:虽然NFS提供了用户身份验证和访问控制机制,但它可能不如其他一些安全协议那样安全。因此,需要采取额外的安全措施来保护NFS共享的安全性
1.2 Nginx概述
(1).简介:
- Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布
- Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
- Nginx 是高性能的 HTTP 和反向代理的web服务器,处理高并发能力是十分强大的,能经受高负 载的考验,有报告表明能支持高达 50,000 个并发连接数。
- Nginx支持热部署,启动简单,可以做到7*24不间断运行。几个月都不需要重新启动
(2).Nginx的正反向代理
首先,看一张关于正向代理和反向代理的图片
在这里,用通俗易懂的方式解释一下:
- 正向代理: 我们平时需要访问国外的浏览器是不是很慢,比如我们要看推特,看GitHub等等。我们直接用国内的服务器无法访问国外的服务器,或者是访问很慢。所以我们需要在本地搭建一个服务器来帮助我们去访问。那这种就是正向代理。(浏览器中配置代理服务器)
- 反向代理: 那什么是反向代理呢。比如:我们访问淘宝的时候,淘宝内部肯定不是只有一台服务器,它的内部有很多台服务器,那我们进行访问的时候,因为服务器中间session不共享,那我们是不是在服务器之间访问需要频繁登录,那这个时候淘宝搭建一个过渡服务器,对我们是没有任何影响的,我们是登录一次,但是访问所有,这种情况就是 反向代理。对我们来说,客户端对代理是无感知的,客户端不需要任何配置就可以访问,我们只需要把请求发送给反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器的地址。(在服务器中配置代理服务器)
(3).Nginx的负载均衡
什么是负载均衡?
负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性
负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
简单来说就是:现有的请求使服务器压力太大无法承受,所有我们需要搭建一个服务器集群,去分担原先一个服务器所承受的压力,那现在我们有ABCD等等多台服务器,我们需要把请求分给这些服务器,但是服务器可能大小也有自己的不同,所以怎么分?如何分配更好?又是一个问题。
Nginx给出来三种关于负载均衡的方式:
- 轮询法(默认方法): 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 适合服务器配置相当,无状态且短平快的服务使用。也适用于图片服务器集群和纯静态页面服务器集群。
- weight权重模式(加权轮询): 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 这种方式比较灵活,当后端服务器性能存在差异的时候,通过配置权重,可以让服务器的性能得到充分发挥,有效利用资源。weight和访问比率成正比,用于后端服务器性能不均的情况。权重越高,在被访问的概率越大
- ip_hash: 上述方式存在一个问题就是说,在负载均衡系统中,假如用户在某台服务器上登录了,那么该用户第二次请求的时候,因为我们是负载均衡系统,每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,这样显然是不妥的。 我们可以采用ip_hash指令解决这个问题,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题
(4).Nginx的动静分离
Nginx的静态处理能力很强,但是动态处理能力不足,因此,在企业中常用动静分离技术。动静分离技术其实是采用代理的方式,在server{}段中加入带正则匹配的location来指定匹配项针对PHP的动静分离:静态页面交给Nginx处理,动态页面交给PHP-FPM模块或Apache处理。在Nginx的配置中,是通过location配置段配合正则匹配实现静态与动态页面的不同处理方式 目前,通过使用Nginx大大提高了网站的响应速度,优化了用户体验,让网站的健壮性更上一层楼!
(5).部署nfs+nginx可以实现什么功能?
- 搭建 NFS 存储并将其挂载到 Nginx 工作目录可以实现以下功能:
- 共享静态资源: NFS (Network File System) 提供了一种网络文件共享的方式,通过将共享目录挂载到多个节点,可以实现多个节点共享相同的静态资源。在这种情况下,NFS 存储可以用于存储 Nginx 服务器的静态文件,例如网页、图片、CSS 和 JavaScript 文件等。
- 集中管理静态文件: 将静态文件集中存储在 NFS 存储上,可以方便地进行集中管理。当静态文件需要更新时,只需更新 NFS 存储上的文件,所有挂载了该存储的节点都能够获取到最新的文件。
- 共享配置文件: 除了静态资源,你还可以将 Nginx 的配置文件存储在 NFS 上,从而实现配置文件的集中管理。这对于需要在多个 Nginx 节点上保持一致配置的场景很有用
- 简化扩展性和高可用性: 当有新的 Nginx 节点加入时,只需将 NFS 存储挂载到新的节点上,即可使新节点具备与其他节点相同的静态资源和配置文件,从而简化了扩展性和高可用性的管理
需要注意的是,NFS 存储的性能和可靠性是关键因素。在生产环境中,你可能需要考虑使用专业的分布式存储系统,如 GlusterFS、Ceph 等,来更好地支持大规模、高性能的应用场景
二、部署NFS远程共享储存
2.1 环境配置
服务端 | centos7 | master | 192.168.23.150 |
客户端 | centos7 | node | 192.168.23.151 |
2.2 服务端配置
(1)使用阿里云yum源
[root@master ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
(2)更改主机名
[root@master ~]# hostnamectl set-hostname master
[root@master ~]# sudo -i
[root@master ~]#
(3)关闭防火墙
[root@master ~]# systemctl stop firewalld
[root@master ~]# systemctl disable firewalld
(4)关闭SELinux
[root@master ~]# setenforce 0
[root@master ~]# vi /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
(5)安装rpc协议、nfs服务
[root@master ~]# yum -y install rpcbind nfs-utils
(6)启动服务
启动rpcbind nfs并设置开机自启
[root@master ~]# systemctl start nfs && systemctl enable nfs
[root@master ~]# systemctl start rpcbind && systemctl enable rpcbind
(7)查看监听端口
[root@master ~]# yum -y install net-tools ##安装netstat命令
[root@master ~]# netstat -ntpl|grep rpc
tcp 0 0 0.0.0.0:58757 0.0.0.0:* LISTEN 25570/rpc.statd
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 25585/rpcbind
tcp 0 0 0.0.0.0:20048 0.0.0.0:* LISTEN 25589/rpc.mountd
tcp6 0 0 :::50782 :::* LISTEN 25570/rpc.statd
tcp6 0 0 :::111 :::* LISTEN 25585/rpcbind
tcp6 0 0 :::20048 :::* LISTEN 25589/rpc.mountd
(8)创建共享目录
[root@master ~]# mkdir /nfs-yu
[root@master ~]# chmod +755 /nfs-yu
(9)授权客户端
NFS授权参数表
参数 | 说明 |
ro | 将共享的文件系统以只读模式挂载,禁止对文件系统进行写操作。 |
async | 允许异步写入操作,即客户端不需要等待数据写入到服务器才继续执行后续操作。这可以提高性能,但可能会导致数据丢失或文件系统损坏的风险。 |
root_squash | 将 root 用户的权限限制为匿名用户(通常是 |
all_squash | 将所有用户的权限限制为匿名用户的权限,即使是普通用户也会被限制。 |
no_all_squash | 取消 |
secure | 要求客户端使用安全的端口(大于1024)进行连接,以增加安全性。 |
noac | 禁用文件属性缓存,这样可以确保每次访问文件时都会从服务器获取最新的属性信息,但可能会影响性能。 |
授权客户端
[root@master ~]# vim /etc/exports
/nfs-yu 192.168.23.0/24(rw,no_root_squash,no_all_squash,sync) ##这里表示共享给192.168.23.0/24网络地址段的所有IP读写的权限
指定网段或所有网段
/nfs-yu *(rw,no_root_squash,no_all_squash,sync) ##(*代表任何ip 可以写成网段或者网址)
重启服务端
[root@master ~]# systemctl restart nfs-server ##重启nfs服务
[root@master ~]# systemctl status nfs-server ##查看nfs服务状态
2.3 客户端配置
(1)使用阿里云yum源、安装 EPEL 存储库
[root@node ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
[root@node ~]# yum install epel-release -y
(2)更改主机名
[root@node ~]# hostnamectl set-hostname node
[root@node ~]# sudo -i
[root@node ~]#
(3)关闭防火墙
[root@node ~]# systemctl stop firewalld
[root@node ~]# systemctl disable firewalld
(4)关闭SELinux
[root@node ~]# setenforce 0
[root@node ~]# vi /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
(5)安装rpc协议、nfs服务
[root@node ~]# yum -y install rpcbind nfs-utils
(6)启动服务
[root@node ~]# systemctl start nfs && systemctl enable nfs
[root@node ~]# systemctl start rpcbind && systemctl enable rpcbind
(7)查看监听端口
[root@node ~]# yum -y install net-tools ##安装netstat命令
[root@node ~]# netstat -ntpl|grep rpc
tcp 0 0 0.0.0.0:58757 0.0.0.0:* LISTEN 25570/rpc.statd
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 25585/rpcbind
tcp 0 0 0.0.0.0:20048 0.0.0.0:* LISTEN 25589/rpc.mountd
tcp6 0 0 :::50782 :::* LISTEN 25570/rpc.statd
tcp6 0 0 :::111 :::* LISTEN 25585/rpcbind
tcp6 0 0 :::20048 :::* LISTEN 25589/rpc.mountd
(8)安装Nginx服务
安装nginx服务将共享目录挂载到web目录上
[root@node ~]# yum -y install nginx
(9)启动Nginx服务
[root@node ~]# systemctl start nginx && systemctl enable nginx ##启动nginx服务并设置开机自启
(10)建立对应服务端共享目录、并挂载到客户端上
[root@node ~]# mkdir /nfs-yu1
[root@node ~]# chmod +755 /nfs-yu1 ##赋予权限
[root@node ~]# showmount -e 192.168.23.150
Export list for 192.168.23.150:
/nfs-yu *
[root@node ~]# mount -t nfs 192.168.23.150:/nfs-yu /nfs-yu1
(11)设置rc.local开机自启
[root@node ~]# echo '/usr/bin/mount -t nfs 192.168.23.150:/nfs-yu /nfs-yu1' >>/etc/rc.local
[root@node ~]# systemctl enable rc-local
(12)在/nfs-yu1 下写入数据,在服务端中看查存储情况
[root@node ~]# cd /nfs-yu1
[root@node nfs-yu1]# ls
root@node nfs-yu1]# echo "hello xiaoyu" >> index.html
[root@node nfs-yu1]# ls
index.html
[root@node nfs-yu1]# cat index.html
hello xiaoyu
##进入服务端共享目录查看
[root@master ~]# cd /nfs-yu
[root@master nfs-yu]# ls
index.html
(13)修改nginx.conf配置,将挂载目录改为nginx网页工作目录
进入nginx配置文件 找到第42行 将/usr/share/nginx/html目录改为/nfs-yu1对应共享目录
[root@node nfs-yu1]# vim /etc/nginx/nginx.conf
1 # For more information on configuration, see:
2 # * Official English Documentation: http://nginx.org/en/docs/
3 # * Official Russian Documentation: http://nginx.org/ru/docs/
4
5 user nginx;
6 worker_processes auto;
7 error_log /var/log/nginx/error.log;
8 pid /run/nginx.pid;
9
10 # Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
11 include /usr/share/nginx/modules/*.conf;
12
13 events {
14 worker_connections 1024;
15 }
16
17 http {
18 log_format main '$remote_addr - $remote_user [$time_local] "$request" '
19 '$status $body_bytes_sent "$http_referer" '
20 '"$http_user_agent" "$http_x_forwarded_for"';
21
22 access_log /var/log/nginx/access.log main;
23
24 sendfile on;
25 tcp_nopush on;
26 tcp_nodelay on;
27 keepalive_timeout 65;
28 types_hash_max_size 4096;
29
30 include /etc/nginx/mime.types;
31 default_type application/octet-stream;
32
33 # Load modular configuration files from the /etc/nginx/conf.d directory.
34 # See http://nginx.org/en/docs/ngx_core_module.html#include
35 # for more information.
36 include /etc/nginx/conf.d/*.conf;
37
38 server {
39 listen 80;
40 listen [::]:80;
41 server_name _;
42 root /nfs-yu1; ##将nginx默认web页面目录更改为对应共享目录
43
44 # Load configuration files for the default server block.
45 include /etc/nginx/default.d/*.conf;
46
47 error_page 404 /404.html;
48 location = /404.html {
49 }
50
51 error_page 500 502 503 504 /50x.html;
52 location = /50x.html {
53 }
54 }
55
56 # Settings for a TLS enabled server.
57 #
58 # server {
59 # listen 443 ssl http2;
60 # listen [::]:443 ssl http2;
61 # server_name _;
62 # root /usr/share/nginx/html;
63 #
64 # ssl_certificate "/etc/pki/nginx/server.crt";
65 # ssl_certificate_key "/etc/pki/nginx/private/server.key";
66 # ssl_session_cache shared:SSL:1m;
67 # ssl_session_timeout 10m;
68 # ssl_ciphers HIGH:!aNULL:!MD5;
69 # ssl_prefer_server_ciphers on;
70 #
71 # # Load configuration files for the default server block.
72 # include /etc/nginx/default.d/*.conf;
73 #
74 # error_page 404 /404.html;
75 # location = /40x.html {
76 # }
77 #
78 # error_page 500 502 503 504 /50x.html;
79 # location = /50x.html {
80 # }
81 # }
82
83 }
84
[root@node nfs-yu1]# systemctl restart nginx ##重启nginx服务
(14)尝试访问客户端nginx页面
浏览器访问:192.168.23.151:80 或在Linux系统上访问
出现以下页面就代表配置成功了 如果想要实现不同的web页面 可以更改/nfs-yu1对应共享目录中的index.html 文件中的html代码
[root@node nfs-yu1]# curl 192.168.23.151:80
hello xiaoyu
![屏幕截图 2024-01-04 091159](C:\Users\余春乐\Pictures\笔记图片\Linux\搭建NFS存储实现Nginx共享静态资源\屏幕截图 2024-01-04 091159.png)