咱们可能有这种场景:linux
集群环境下,多个web容器须要请求一个共享目录下的文件,好比保存图片或者录音文件,任意一个节点保存后其余节点须要及时获取,此时就须要目录进行同步了,不然Nginx负载到任意一个节点上请求文件时,找不到文件将返回404,这时候linux下能够用rsync处理,可是rsync双向同步有不少问题,在jekins环境下不少不少问题,不建议使用。nginx
这里建议用nfs处理,或者用其余分布式文件系统如gfs或者ceph等,或者直接将这些文件放到cdn(看项目大小,财气是否够粗够硬),考虑文件不少性能问题建议cdn,其次gfs,ceph,最low的nfs处理吧。web
处理分3个步骤:centos
1)安装nfstomcat
2)配置nfsapp
3)配置tomcat 虚拟目录webapp
1.1)安装nfs分布式
yum install nfs-utils portmap nfs4-acl-tools (每一个节点分别执行)性能
1.2)各自节点(tomcat所在linux)rest
mkdir -p /data/nfs
chown -R tomcat:tomcat /data/nfs
chmod -R 777 /data/nfs
以上3条命令每一个节点分别执行
2.1)nfs server(只有一个server,选用一个节点,其余均为客户端)配置
vi /etc/exports
添加以下内容:
/data/nfs *(rw,sync)
2.2)启动nfs服务
centos redhat 5版本执行:
service portmap restart
service nfs restart
让nfs随机启动:
chkconfig portmap on
chkconfig nfs on
centos redhat 6版本执行:
service rpcbind restart
service nfs restart
让nfs随机启动:
chkconfig rpcbind on
chkconfig nfs on
2.3)客户端挂载nfs文件系统
a、关闭防火墙(各节点分别执行,或者添加iptables策略)
service iptables stop
chkconfig iptables off
b、挂载nfs
mount -t nfs 10.0.0.1:/data/nfs /data/nfs
上面10.0.0.1为nfs server ip地址,上面这条命令各节点分别执行
这时客户端节点执行df -h命令应该能看到nfs挂载点文件系统了
3.1)tomcat配置虚拟目录
server.xml中添加host:
<
Context
path
=
"/mp3"
docBase
=
"/data/nfs"
reloadable
=
"true"
></
Context
>
以上tomcat就能够访问webapp(deploy目录)外的文件了,咱们能够经过http://ip:端口/工程名/mp3/001.mp3访问咱们的音频文件了,nginx无论分发到哪一个节点tomcat都不会返回404了,由于任意一个节点往nfs目录下写文件实际上时写到nfs server文件系统上,其余tomcat节点都可以访问。
以上教程比较简易,如遇问题能够邮件跟我联系dba_xyx@hotmail