mycpen

Mycpen

记录学习历程与受益知识
github
telegram
bilibili

25_Linux基础-NFS服务

日志轮转:

https://blog.csdn.net/weixin_43265596/article/details/85469405

https://www.cnblogs.com/liangyuxing/p/11962863.html

https://blog.csdn.net/dhxaohei/article/details/8014764


一. NFS 简介#

**NFS(Network File System 的简称,即网络文件系统)** 可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。NFS 可以将远程的计算机磁盘挂载到本地,读写文件像访问本地磁盘一样操作

前提:关闭 selinx
关闭 iptables

1、安装
[root@cPen_A lianxi]# yum install nfs-utils
--------------------------------------------------------------------------------------------
2、修改配置文件	/etc/exports
[root@cPen_A lianxi]# vim /etc/exports		#注:配置文件
/opt/www 192.168.255.0/24(rw,no_root_squash)				
#注:192.168.255.0/24共享,rw权限 读写,no_root_squash 将远程根用户当成本地根用户,即不压制root
首先创建/opt/www目录,在这下面创建index.html文件,文件内容”this is test nfs”
再添加exports配置,nfs的配置:vim /etc/exports
添加如下行:
/opt/www 192.168.255.0/24(rw)
表示共享/opt/www目录,给192.168.255./24这个网段的主机都可以通过nfs来访问我本地的/opt/www目录
括号()里面的表示选项,rw表示读写

生效配置:
exportfs -a 或者重启服务

[root@cPen_A opt]# cd /opt
[root@cPen_A opt]# mkdir www
[root@cPen_A opt]# cd www
[root@cPen_A www]# vim index.html
this is test nfs
[root@cPen_A www]# pwd
/opt/www

#注:/opt	放额外的软件包的目录
--------------------------------------------------------------------------------------------
3、启动nfs服务
[root@cPen_A www]# service nfs start		#注:启动服务
[root@cPen_A www]# showmount -e			#注:检测是否可以连接
Export list for cPen_A:
/opt/www 192.168.255.0/24
#注:centos8下 启动 [root@cPen_B ~]# service nfs-server start
---------------------------------------------------------------
NFS的连接查看
可以在server端先自我测试一下是否可以连接。
命令:showmount [-ae] [hostname  | IP]
-a:显示当前主机与客户端的NFS连接共享的状态
-e:显示某台主机的/etc/exports所共享的目录数据
---------------------------------------------------------------
4、在另一台机器上测试
出现返回 表示ok
[root@cPen_C ~]# showmount -e 192.168.255.28	#注:后面指定分析的机器的ip地址
Export list for 192.168.255.28:					#注:出现这种情况,表示可以连接 连通性没有问题
/opt/www 192.168.255.0/24

5、挂载网络文件
在另外一台机器
[root@cPen_C ~]# mkdir /mnt2
[root@cPen_C ~]# mount -t nfs 192.168.255.28:/opt/www /mnt2		#注:挂载网络文件
[root@cPen_C ~]# df			#注:使用df命令看磁盘挂载情况(这是网络磁盘挂载)
192.168.255.28:/opt/www 17811456 2165760 15645696   13% /mnt2

[root@cPen_C ~]# cd /mnt2
[root@cPen_C mnt2]# ls
index.html
[root@cPen_C mnt2]# cat index.html 
this is test nfs
[root@cPen_C mnt2]# ls
index.html
[root@cPen_A ~]# cd /opt/www/					#注:服务端A主机 操作
[root@cPen_A www]# touch index2.html			#注:服务端操作
[root@cPen_C mnt2]# ls
index2.html  index.html
[root@cPen_C mnt2]# mkdir index2.html
mkdir: 无法创建目录"index2.html": 权限不够
#注:客户机C没有权限去操作服务器A文件
#没有权限的话 /etc/exports 设置 no_root_squash ,就可以操作了
no_root_squash 将远程根用户当成本地根用户,即不压制root
#注:让服务器将 远端的root用户 识别成 本地根用户
#注:修改配置文件后,需要使用exportfs -a 生效配置;再重新挂载(先取消挂载,再重新挂载)

#示例:取消挂载
[root@cPen_C mnt2]# cd ..			#注:先退出mnt2目录,否则报繁忙
[root@cPen_C /]# umount /mnt2		#注:然后取消挂载

#修改配置文件后,需要使用exportfs -a 生效
#重新挂载:
    先退出/mnt2目录,然后执行:
    umount /mnt2
    再执行挂载

二. npcbind 和 nfs#

启动 nfs 之前,确保 rpcbind 服务已经启动
nfs 启动的时候,会向 rpcbind 服务注册端口,会返回一个端口给 nfs 使用
可以使用
rpcinfo -p 命令 查看 nfs 端口是否已经注册成功
rpcbind 就像房东,nfs 是租客
#注:nfs 自己不能起端口,rpcbind 为 nfs 注册端口
#注:nfs 起来之前 要确保 rpcbind 起来
[root@cPen_A www]# rpcinfo -p # 注:rpcbind 为 nfs 起 2049 端口
100003 3 tcp 2049 nfs


三。实验:nfs 和 nginx 搭配使用 负载均衡和文件共享#

A: 192.168.0.73 nfs 真实机
B: 192.168.0.79 代理机 + 真实机
C: 192.168.0.53 真实机

前提:
三台主机都安装好 nginx,其中一台开启 nfs 服务
在 A 机器上开启了 nfs 服务,网站目录存放在 /opt/www 下,B、C 可以挂载 A 的 /opt/www 目录到本地
A 机器配置好 nfs 服务,开启 nfs 服务,然后在 A、C 两台上 执行:
[root@cPen_B ~]# mount -t nfs 192.168.0.73:/opt/www /opt/www
[root@cPen_C ~]# mount -t nfs 192.168.0.73:/opt/www /opt/www

B机器变成代理机
第1步:把8080端口起来
修改A、B、C三台主机nginx的配置,启动8080端口,绑定域名www.sc.com
#注:配置文件目录:/etc/nginx
#注:进入 /etc/nginx/conf.d目录下  创建 sc.conf
输入以下内容
[root@cPen_A ~]# cd /etc/nginx/
[root@cPen_A nginx]# cd conf.d/
[root@cPen_A conf.d]# vim sc.conf		#注:后缀必须是 .conf,自动加载读取 该配置文件
server {
    listen  8080;						#注:监听8080端口
    server_name  www.sc.com;			#注:指定域名

    root /opt/www;						#注:指定网站家目录,默认去家目录下找index.html

}
[root@cPen_A conf.d]# nginx -t			#注:进行语法检测
[root@cPen_A conf.d]# nginx -s reload		#注:生效配置
[root@cPen_A conf.d]# lsof -i:8080		#注:8080端口起来了
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   3193  root    6u  IPv4  50354      0t0  TCP *:webcache (LISTEN)
nginx   3194 nginx    6u  IPv4  50354      0t0  TCP *:webcache (LISTEN)
nginx   3195 nginx    6u  IPv4  50354      0t0  TCP *:webcache (LISTEN)

使用lsof -i:8080	端口是否启动
使用curl -H "Host: www.sc.com" http://192.168.0.73:8080	 查看返回的内容是否一致
访问192.168.0.68的8080端口,以www.sc.com域名去访问
[root@cPen_A ~]# curl -H "Host: www.sc.com" http://192.168.0.73:8080
this is test nfs
#注:三台机器访问返回的内容相同  都是 this is test nfs

--------------------------------------------------------------------------------------------
#注:在B机器上添加反向代理
对B机器进行负载均衡:把请求转发到其他机器(代理转发)(高可用)
[root@cPen_B conf.d]# vim sc.conf 
server {
    listen  8080;
    server_name  www.sc.com;	

    root /opt/www;

}

upstream sc {						#注:代理转发,为upstream取名为sc
    server 192.168.0.73:8080;
    server 192.168.0.53:8080;
    server 192.168.0.79:8080;
}
#注:虚拟主机,让不同的域名做不同的事情
server {							
    listen  80;
    server_name  www.sc.com;		

    root /opt/www;

    location / {						#注:访问网站的/目录,都会转发到sc
        proxy_set_header Host $host;	#注:头部信息,不加的话  可能变成B的主机地址
		#注:让客户端发过来的头部host字段信息 和转发包的头部host字段保持一致
        proxy_pass http://sc;			#注:设置后端代理服务器
    }
}

server {
    listen  80;
    server_name  www.sc1.com;

    root /usr/share/www;

    location / {
        proxy_set_header Host $host;
        proxy_pass http://sc;
    }
}

#注:输出www.sc.com时,请求时,会有数据包存放host头部信息:www.sc.com ,80端口收到这个包之后,知道是要转发到8080端口。B机器帮你请求A、B、C的8080端口发起请求
#注:客户机发起请求 www.sc.com,host头部信息www.sc.com(请求包里的,客户机携带的头部信息),B主机交给相应的server去处理,请求B主机的80端口去处理,转发到8080端口,B主机帮你去请求,B收到包的时候,交给server去处理。这时候A发起的这个包的头部信息 可能就是B的ip地址了(不是www.sc.com了),8080端口收到请求后,没有B的ip地址的server_name,会转发失败。所以 proxy_set_header Host $host 让它们的头部信息保持一致

--------------------------------------------------------------------------------------------
#生效配置
[root@cPen_B conf.d]# nginx -t
[root@cPen_B conf.d]# nginx -s reload

--------------------------------------------------------------------------------------------
#然后多次访问80端口,查看返回内容是否一致,以及查看每台机器的/var/log/nginx/access.log日志是否有新的请求过来 tail -f  /var/log/nginx/access.log

[root@cPen_B conf.d]# curl -H "Host: www.sc.com" http://192.168.0.79
this is test nfs
#注:代理转发,访问80端口,转发到8080端口,分发到3台机器去执行了(负载均衡)

[root@cPen_C conf.d]# tail -f  /var/log/nginx/access.log 	#注:C主机下 ,B主机帮请求
192.168.0.79 - - [01/Dec/2020:17:21:54 +0800] "GET / HTTP/1.0" 200 17 "-" "curl/7.61.1" "-"
#注:平均打到3台,默认做轮转

image-20221011191610524

#注:可以使用 killall nginx 全部杀死

#注:404 没找到,403 forbid 禁止

#注:A、B 换成 B、A
nginx 代理机 + 真实机

A

nginx 真实机

B nfs

nginx 真实机

C

客户端访问 www.sc.com 访问 A nginx 代理机的 80 端口(代理的意思是转发)
A 机器 返回本机的 8080 去处理,或者 B 机器的 8080 去处理,或者 C 机器的 8080 去处理
负载均衡:2 万人访问 A 机器 80 端口,80 端口不会去处理请求,只是做代理转发,交给本机 8080 处理,或者 B 机器的 8080 处理,C 机器的 8080 处理。A、B、C 三台返回的页面网站 都要保持一致
把 B 机器 /opt/www 目录 挂载到 A 上和 C 上 (保存文件的一致性,改的都是 B 机器的 nfs)

image-20221011191803355

#注:网络问题

桥接模式 VMnet0 同网段

NAT 模式 VMnet8 同网段

Loading...
Ownership of this post data is guaranteed by blockchain and smart contracts to the creator alone.