搭建nfs服务器

为什么需要nfs服务器?

保障网站数据的一致性,不管负载均衡器将请求分配到哪台后端的服务器,客户机看到的内容是一样。

nfs是什么?

网络文件系统,英文Network File System(NFS),是由SUN公司研制的UNIX表示层协议(presentation layer protocol),能使使用者访问网络上别处的文件就像在使用自己的计算机一样。

nfs解决了什么问题?

数据同源: 到同一个地方去拿数据,保障数据的一致性

nfs的优点和缺点

  • 优点: 随便一台linux服务器都可以搭建,成本非常低,构建非常容易
  • 缺点: 读取速度有限,跟网络质量,磁盘IO,cpu,内存等因素有关,在传统的tcp/ip网络上传输的

准备一台服务器

  • 配置没有关系,可以简单点: 1核/1G
  • 配置好ip地址:192.168.0.103
[root@nfs-server ~]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:1b:98:76 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.139/24 brd 192.168.0.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe1b:9876/64 scope link 
       valid_lft forever preferred_lft forever

1.安装nfs的相关软件

[root@nfs-server ~] yum install nfs-utils -y

2.启动nfs-server服务

[root@nfs-server ~]# service nfs-server stop 关闭
Redirecting to /bin/systemctl stop nfs-server.service
[root@nfs-server ~]# service nfs-server start  启动
Redirecting to /bin/systemctl start nfs-server.service
[root@nfs-server ~]# service nfs-server restart  重启
Redirecting to /bin/systemctl restart nfs-server.service

[root@nfs-server ~]# ps aux|grep nfs
root         431  0.0  0.0      0     0 ?        I    8月01   0:01 [kworker/u128:4-nfsd4]
root         833  0.0  0.3  50304  2932 ?        Ss   8月01   0:00 /usr/sbin/nfsdcld
root        5311  0.0  0.0      0     0 ?        S    11:02   0:00 [nfsd]
root        5312  0.0  0.0      0     0 ?        S    11:02   0:00 [nfsd]
root        5313  0.0  0.0      0     0 ?        S    11:02   0:00 [nfsd]
root        5314  0.0  0.0      0     0 ?        S    11:02   0:00 [nfsd]
root        5315  0.0  0.0      0     0 ?        S    11:02   0:00 [nfsd]
root        5316  0.0  0.0      0     0 ?        S    11:02   0:00 [nfsd]
root        5317  0.0  0.0      0     0 ?        S    11:02   0:00 [nfsd]
root        5318  0.0  0.0      0     0 ?        S    11:02   0:00 [nfsd]
root        5326  0.0  0.1  12320   992 pts/0    S+   11:03   0:00 grep --color=auto nfs

3.原理部分

nfs服务和rpc到底是如何实现的呢?工作原理

因为 NFS 支持的功能相当的多,而不同的功能都会使用不同的程序来启动, 每启动一个功能就会启用一些端口来传输数据,因此, NFS 的功能所对应的端口才没有固定住, 而是随机取用一些未被使用的小于 1024 的埠口来作为传输之用。但如此一来又造成客户端想要连上服务器时的困扰, 因为客户端得要知道服务器端的相关埠口才能够联机吧!

时我们就得需要远程过程调用 (RPC) 的服务啦!RPC 最主要的功能就是在指定每个 NFS 功能所对应的 port number ,并且回报给客户端,让客户端可以连结到正确的端口上去。 那 RPC 又是如何知道每个 NFS 的端口呢?这是因为当服务器在启动 NFS 时会随机取用数个端口,并主动的向 RPC 注册,因此 RPC 可以知道每个端口对应的 NFS 功能。

nfs自己并没有去对外监听某个端口号,而是外包给了rpc服务,rpc帮助nfs去监听端口,然后告诉客户机和本机的那个进程对应的端口连续

[root@nfs-server ~]# netstat -anplut|grep rpc  查看rpc服务相关的端口
tcp        0      0 0.0.0.0:35503           0.0.0.0:*               LISTEN      960/rpc.statd       
tcp        0      0 0.0.0.0:20048           0.0.0.0:*               LISTEN      5304/rpc.mountd     
tcp6       0      0 :::20048                :::*                    LISTEN      5304/rpc.mountd     
tcp6       0      0 :::42099                :::*                    LISTEN      960/rpc.statd       
udp        0      0 0.0.0.0:20048           0.0.0.0:*                           5304/rpc.mountd     
udp        0      0 127.0.0.1:717           0.0.0.0:*                           960/rpc.statd       
udp        0      0 0.0.0.0:42974           0.0.0.0:*                           960/rpc.statd       
udp6       0      0 :::20048                :::*                                5304/rpc.mountd     
udp6       0      0 :::43399                :::*                                960/rpc.statd 

4.共享文件,编辑/etc/exports文件,写好具体的共享的目录和权限

[root@nfs-server ~]# vim /etc/exports

/web  192.168.0.0/24(rw,all_squash,sync) #编辑此句话


/web  是我们共享的文件夹的路径--》使用绝对路径   --》需要自己新建
192.168.0.0/24 允许过来访问的客户机的ip地址网段
(rw,all_squash,sync) 表示权限的限制 
      rw 表示可读可写 read and  write
      ro 表示只能读  read-only
      all_squash :任何客户机上的用户过来访问的时候,都把它认为是普通的用户
      root_squash## 标题 当NFS客户端以root管理员访问时,映射为NFS服务器匿名用户
      no_root_squash  当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员
      sync  同时将数据写入到内存与硬盘中,保证不丢失数据
      async 优先将数据保存到内存,然后再写入硬盘,效率更高,但可能丢失数据


[root@nfs-server ~] mkdir /web
[root@nfs-server ~] cd /web
[root@nfs-server web]vim index.html  #创建首页文件
[root@nfs-server web]ls
index.html 
[root@nfs-server web] cat index.html 
miluo
jiangcaiguo yikexin #首页内容

5.刷新输出文件的列表

[root@nfs-server web] exportfs -rv
exporting 192.168.0.0/24:/web

6.建议关闭防火墙和selinux

[root@nfs-server download] service firewalld stop
Redirecting to /bin/systemctl stop firewalld.service
[root@nfs-server download] systemctl disable firewalld
[root@nfs-server download] getenforce 
Disabled

7.在客户机上挂载nfs服务器上共享的/web

[root@web-server2 ~] yum install nfs-utils -y  #安装nfs-utils软件,方便客户机上进行挂载,具有了相关命令了,例如:showmount
[root@web-server2 ~] showmount -e 192.168.0.139  #查看nfs服务器上共享输出了哪些文件夹
Export list for 192.168.0.103:
/web      192.168.0.0/24

#挂载nfs服务器上的目录到本机上
[root@web-server2 ~] mkdir /web  #在客户机的本地新建一个目录/web
[root@web-server2 ~] mount 192.168.0.103:/web   /web  #将nfs服务器上的/web目录挂载到本地的/web目录,今后访问本地的/web目录,就是访问到nfs服务器上的/web目录
#  mount 是挂载的命令,可以理解为一种映射


#  语法:  mount   nfs服务器的目录    本地的目录

8.后端的real-server到底要把nfs服务器共享的目录挂载到哪里?用户才能看到一样的数据

答:nginx安装目录下的html
[root@web-server2 sczhengbo99] mount 192.168.0.139:/web /usr/local/sczhengbo99/html/
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值