- 單臺Linux服務器中如何部署多個獨立應用,即多個應用不能run在一個jboss實例中?
換言之,這個問題也可以這樣描述:在單臺Linux服務器中服務啓動多個Jboss實例?
默認情況下,jboss啓動時加載server/default/目錄下的配置,要實現多個實例的啓動,主要是解決端口衝突的問題,因爲一套端口只能被一個應用佔有;
一般來說,我們可以在Jboss啓動時通過-Djboss.server.home設置當前實例啓動時加載不同的目錄來實現;
比如Jboss主程序安裝在/usr/xx/jboss/,應用放在/home/admin/app/;那此時就可以cp一份default目錄到當前應用app目錄下,通過-Djboss.server.home=/home/admin/app/default來啓動該實例;
若直接在/usr/xx/jboss/server/下複製default目錄並改名爲yy,則可以用更簡單的參數-c yy來啓動;
對於多應用的情況,我們仍然要解決端口衝突的問題,有兩種方式:
其一,直接修改各應用對應的default目錄下的所有配置端口,主要涉及配置文件conf/jboss-service.xml、tomcat下的server.xml;該方法比較土,很容易出錯,因爲端口衆多,只要有一項端口沒有改,jboss就將無法正常啓動;若應用較少,比如就只有2個,那這種方式勉強可以用用;
其二,在jboss-service.xml中啓用jboss.system:service=ServiceBindingManager這個mbean服務,設置ServerName、StoreURL屬性;將各套應用對應的端口全部配置在同一個文件中;推薦採用該方案,具體可參考: - Jboss無法正常啓動,報異常javax.management.MBeanRegistrationException: preRegister() failed?
一般來說,上面的異常出現在4.2及其以後的版本中,比較詳細的異常如下:
這主要是因爲Jboss啓動了一個jboss.remoting:service=NetworkRegistry的mbean服務,啓動時卻又無法根據當前hostname找到IP!
解決方案爲在/etc/hosts中綁定當前服務器的主機名和IP,比如10.2.224.214 mall_dev4;
對於4.2系列之前的版本,如果沒有綁定主機名和IP,雖然會出現以下的異常,但並不一定會影響應用的正常啓動; - Jboss已經正常啓動,但是無法用IP或者綁定IP訪問應用?
熟悉Linux相關知識的筒靴都知道一個端口是綁定在某個地址上的,可以是一個,也可以是多個,一個端口在同一個地址上不能被兩個應用佔有;
出現這個問題一般是因爲你使用的是4.2系列及其之後的版本,因爲從這個系列開始,Jboss默認綁定的端口由之前的0.0.0.0變成了127.0.0.1;前者表示綁定當前服務器下所有地址,包括自身的IP、127.0.0.1;而後者只綁定了127.0.0.1,而沒有綁定本機IP,通過IP去訪問應用自然也就無法成功了,因爲訪問的IP地址沒有開放對應的端口;
對於默認的這種情況,一般來說jboss是要和apache搭配使用的,apache暴露應用外部訪問的端口,然後apache再監聽本地(也就是127.0.0.1)的端口;
當然這個默認配置也是可以修改的,方式也比較多,比如:
方式1,啓動腳本中通過參數-b, --host=<host or ip>指定地址,比如-b 0.0.0.0就表示綁定所有地址;
方式2,啓動腳本中通過參數-Djboss.bind.address指定地址,比如-Djboss.bind.address=0.0.0.0;
方式3,直接修改需要對外暴露的端口綁定地址,比如tomcat/server.xml中的http端口綁定address信息; - Jboss正常啓動,但是用shutdown腳本無法關閉應用?
對於jboss的關閉,shutdown命令允許好幾種方式的關閉,可以參考該命令的幫助: 一般來說,我們使用-s參數來關閉,也即通過JNDI URL;
若是基於JNDI URL的方式出現這種情況一般有三種可能:
其一,當前應用所使用的default目錄內的內容與當前運行jboss自身的default內容不一致,比如當前jboss版本爲4.0.5,而啓動時指定的default卻是從jboss 4.2.1中cp過來的;這種情況在搭建環境時經常出現,因爲一般直接從另外一臺linux服務器中scp過來,但其實兩臺服務器自身安裝的jboss版本不一致;
其二,shutdown命令中指定的JNDI端口與實際應用啓動的JNDI端口不一致;
其三,/etc/hosts中對當前主機名綁定的IP地址不正確,比如當前服務器實際的IP地址爲10.2.224.214,而hosts中綁定的卻是10.0.0.1;
總之,出現此類情況都是因爲jboss自身無法正確接收到正確的關閉命令所致,一般來說在jboss的server.log中會拋如下的異常信息: - 如何對Linux下的Jboss應用進行debug?
其實這個問題和Jboss是否部署在Linux下沒有直接關係,可以在jboss啓動時指定遠程debug端口即可,比如:
然後在eclipse中新建remote debug時指定對應的端口即可;
網店版重生系列:Linux下Jboss啓動、關閉、端口配置等常見問題FAQ
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.