咱們可能有這種場景: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