我們可能有這種場景:
集群環境下,多個web容器需要請求一個共享目錄下的文件,比如保存圖片或者錄音文件,任意一個節點保存后其他節點需要及時獲取,此時就需要目錄進行同步了,否則Nginx負載到任意一個節點上請求文件時,找不到文件將返回404,這時候linux下可以用rsync處理,但是rsync雙向同步有很多問題,在jekins環境下很多很多問題,不建議使用。
這里建議用nfs處理,或者用其他分布式文件系統如gfs或者ceph等,或者直接將這些文件放到cdn(看項目大小,財氣是否夠粗夠硬),考慮文件很多性能問題建議cdn,其次gfs,ceph,最low的nfs處理吧。
處理分3個步驟:
1)安裝nfs
2)配置nfs
3)配置tomcat 虛擬目錄
1.1)安裝nfs
yum install nfs-utils portmap nfs4-acl-tools (每個節點分別執行)
1.2)各自節點(tomcat所在linux)
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