博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NFS+ln代替图片服务器的实现
阅读量:6497 次
发布时间:2019-06-24

本文共 2785 字,大约阅读时间需要 9 分钟。

hot3.png

        本着个人的想法,搞个图片服务器多省事儿,但一想到要申请经费买云服务器、要开发的去改他的代码.......心里面一万头小白马掠过。

        不过还好,经过NFS+ln实践,总算实现了自己想要的结果,也不管它低不低级了,反正能用了,贴上来看看,说不定以后还用得上呢?

        说正事儿。

-------------------------------------------- 环境介绍 -----------------------------------------------------

    (测试)服务器,系统均为CentOS 7:

web01 : 192.168.1.11  (NFS_master)

web02 : 192.168.1.12

web03 : 192.168.1.13

 

-------------------------------------------- 搭建NFS -----------------------------------------------------

    负载均衡下三台web服务器,取 web01 ( 192.168.1.11 ) 作为 NFS_master 。

    关闭防火墙:iptables  -F

    关闭selinux:setenforce  0

    安装NFS相关服务:yum  install  nfs-utils  rpcbind  -y    (这里可能安装不成功,报错说lvm2版本过低,只需要升级lvm2即可:yum  upgrade  lvm2  -y)

    分别到web01、web02、web03三台机器上新建图片共享目录:mkdir  -p  /mydata/userfiles

    编辑web01上的exports文件:

# vim   /etc/exports

/mydata/userfiles   192.168.1.12/32(rw,sync,no_root_squash)

/mydata/userfiles   192.168.1.13/32(rw,sync,no_root_squash)

    以上参数中 :

rw: 代表 "读写",因为每一台web服务器都有客户上传图片,所以必须要都可读写共享磁盘,你可以选择ro只读;

sync:表示文件同时写入磁盘和内存,当然你可以选择async,文件暂存于内存,而不是直接写入磁盘;

no_root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,也拥有root权限,显然开启这项是不安全的,你可以选择root_squash或all_squash。

    上述文件修改完保存后,先启动rpcbind服务(最好也加入开机自启动中:systemctl enable rpcbind):systemctl  start  rpcbind

再启动nfs服务(最好加入开机自启动中:systemctl enable nfs-server):systemctl  start  nfs

 

---------------------------------- 客户端挂载共享磁盘 --------------------------------------

    查看服务端提供的共享磁盘:showmount   -e   192.168.1.11

    什么?没有showmount命令?

    那就在客户端也这样吧:yum  install  nfs-utils  rpcbind  -y    (这里可能安装不成功,报错说lvm2版本过低,只需要升级lvm2即可:yum  upgrade  lvm2  -y)

    挂载磁盘到本地(最好写道开机自动挂载文件 /etc/fstab 里面去):mount  -t  nfs  -o  nfsvers=3  192.168.1.11:/mydata/userfiles   /mydata/userfiles/

    查看挂载后的情况:df  -h (或 mount showmount  -a)

    至此,NFS基本上搭建完成了,你可以自己测试下文件是否被共享了?!

 

---------------------------------- ln建立软连接实现个人需求 ---------------------------------

       项目的根目录为web,部署在tomcat下,图片目录为userfiles,那么假设整个项目的图片目录路径为:/usr/local/tomcat-8080/webapps/web/userfiles

        下面只需要这样:

        首先,把你的项目图片目录下所有文件(前提是有文件,或者有用)拷贝走,例如:

mv    /usr/local/tomcat-8080/webapps/web/userfiles    /tmp/    (这一步只需要在三台web服务器中的一台上操作即可,本例中自然在192.168.1.11上操作的)

        其次,建立一个软连接,把共享目录链接到项目根目录下,而且就叫userfiles:

ln  -s  /mydata/userfiles/    /usr/local/tomcat-8080/webapps/web/userfiles    (这一步要在三台web服务器上分别操作)

        最后,将之前移走的图片文件都“拿”回来:

mv    /tmp/userfiles/*    /usr/local/tomcat-8080/webapps/web/userfiles/     (这里一定要注意,不能把/tmp/userfiles移过来,只能把/tmp/userfiles/下的所有图片文件移到软连接userfiles里面)   

        等下次部署web项目时,即使删除了整个web目录(间接删除了userfiles软连接),但/mydata/userfiles中保存着最新的所有图片,等web部署完成,删除掉web中自带的userfiles目录,再重新创建一个软连接,瞬间所有图片就全回来了!这样的工作完全可以写到shell脚本中,一劳永逸咯! 

        到此为止,基本完成了整个需求了。

 

-------------------------- 需要注意的细节说明 ---------------------------

        (1)任一服务器上被做成软连接的目录下的任一文件被删除或修改的话,共享目录中该文件也将被删除或修改;只有当软连接本身被删除时,不会影响共享目录;

        (2)Linux系统默认拒绝创建目录硬链接(本身已有的除外),是为了避免硬链接导致在find或其他遍历查找文件时,陷入死循环,所以当你简单的使用ln创建目录硬链接时,都会报错“不支持目录硬链接”。如果你非要创建目录硬链接,那我也不会啊!

        (3)如果谁有更牛X的方法,请在下方评论区分享!!!

转载于:https://my.oschina.net/jamieliu/blog/718475

你可能感兴趣的文章
华为首提“业务驱动基础架构”(SDI)
查看>>
Word2010使用技巧之一:熟悉功能区
查看>>
Citrix XenDektop 7 实施十 创建License Server
查看>>
RookeyFrame 通用页面 加载数据 原理
查看>>
hbuilder APP服务器端(C#)推送
查看>>
统计c盘的PE文件的个数 (遍历所有文件)
查看>>
大白话Vue源码系列目录
查看>>
EffectKeyMap系列1(Ubuntu)
查看>>
iOS手势
查看>>
Webpack源码基础-Tapable从使用Hook到源码解析
查看>>
【转载】NBU异机恢复oracle
查看>>
魅族mx5详细打开usb调试模式的步骤
查看>>
php里关于文件下载的方法(两种)
查看>>
数据绑定(数据源控件 -- ObjectDataSource)
查看>>
微信点单
查看>>
selenium操作页面元素总结
查看>>
vim 命令
查看>>
Ubuntu 16.04 LTS安装sogou输入法详解
查看>>
计算几何专题
查看>>
GNU/Linux 正则表达式与三剑侠(grep,sed,awk)(精)
查看>>