#
軟件及環境:
jboss-5.1.0.GA
nginx-0.8.15
centos5.5
nginx:192.168.1.251
tomat1:192.168.1.251
tomat2:192.168.1.252
jboss安裝目錄為:/usr/local/jboss
nginx安裝目錄為:/usr/local/nginx
JDK、JBOSS、nginx安裝略過!
Jboss1配置:
/opt/jboss4.3/jboss-as/server/node2/deploy/jboss-web.deployer/server.xml
<!--由于在LINUX環境下,會有多個IP,address不能改成${0.0.0.0},這樣會對127.0.0.1也會進行監聽,導致啟動出錯-->
<Connector protocol="HTTP/1.1" port="8080" address="${ jboss.bind.address}">
<!--將<Engine name="jboss.web" defaultHost="localhost">修改為-->
<Engine name="jboss.web" defaultHost="localhost" jvmRoute="jboss1">
/opt/jboss4.3/jboss-as/server/node2/deploy/jboss-messaging.sar/messaging-service.xml
<!--將20行的<attribute name="ServerPeerID">${jboss.messaging.ServerPeerID:0}</attribute>修改-->
<attribute name="ServerPeerID">${jboss.messaging.ServerPeerID:1}</attribute>
Jboss2配置:
/opt/jboss4.3/jboss-as/server/node2/deploy/jboss-web.deployer/server.xml
<!--由于在LINUX環境下,會有多個IP,address不能改成${0.0.0.0},這樣會對127.0.0.1也會進行監聽,導致啟動出錯-->
<Connector protocol="HTTP/1.1" port="8080" address="${ jboss.bind.address}">
<!--將<Engine name="jboss.web" defaultHost="localhost">修改為-->
<Engine name="jboss.web" defaultHost="localhost" jvmRoute="jboss2">
/opt/jboss4.3/jboss-as/server/node2/deploy/jboss-messaging.sar/messaging-service.xml
<!--將20行的<attribute name="ServerPeerID">${jboss.messaging.ServerPeerID:0}</attribute>修改-->
<attribute name="ServerPeerID">${jboss.messaging.ServerPeerID:2}</attribute>
如果想要session同步的話,要在站點的web.xml里面加入<distributable/>
測試文件index.jsp內容如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@page import="java.util.*"%>
<%@page import="java.net.InetAddress;"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Cluster App Test</title>
</head>
<body>
<%
InetAddress ip = InetAddress.getLocalHost();
//out.println(ip.getHostAddress());
%>
This is responsed by <font color="red"> <%=ip.getHostAddress() %></font><br>
Host Name : <font color="red"><%=ip.getHostName() %></font><br>
Time : <font color="red"><%=new Date() %></font><br>
<%
ip = null;
%>
<br/> <br/> <br/> <br/>
Server Info:
<%
out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>
<%
out.println("<br>Session ID " + session.getId()+"<br>");
// 如果有新的 Session 屬性設置
String dataName = request.getParameter("dataName");
if (dataName != null && dataName.length() > 0) {
String dataValue = request.getParameter("dataValue");
session.setAttribute(dataName, dataValue);
}
out.print("<br/> <b>Session 列表</b>");
Enumeration e = session.getAttributeNames();
while (e.hasMoreElements()) {
String name = (String)e.nextElement();
String value = session.getAttribute(name).toString();
out.println( name + " = " + value+"<br>");
System.out.println( name + " = " + value);
}
%>
<form action="index.jsp" method="POST">
名稱:<input type=text size=20 name="dataName">
<br>
值:<input type=text size=20 name="dataValue">
<br>
<input type=submit>
</form>
</body>
</html>
Jboss動好像沒什么要求,,可以兩個同時啟動,等啟動完之后再啟動NGINX就OK了!
Jboss的啟動命令為(必須加參數-b ,很多配置文件都依賴于
${ jboss.bind.address}這個值,也就是命令行輸入的IP地址):
/usr/local/jboss/bin/run.sh -c all -b 192.168.1.251
等都啟動完成,就可以防問http://192.168.1.251/cluster-test/
寫一個session,刷新,如果session在不同的機器上保持不變,那就集成功了!如下圖:
默認情況訪問 http://localhost:8080/jmx-console 就可以瀏覽jboss的部署管理的一些信息,不需要輸入用戶名和密碼,使用起來有點安全隱患。下面我們針對此問題對jboss進行配置,使得訪問jmx- console也必須要知道用戶名和密碼才可進去訪問。步驟如下:
i) 找到JBoss安裝目錄/server/default/deploy/jmx-console.war/WEB-INF/jboss-web.xml文 件,去掉<security-domain>java:/jaas/jmx-console</security- domain>的注釋。修改后的該文件內容為:
<jboss-web>
<!-- Uncomment the security-domain to enable security. You will
need to edit the htmladaptor login configuration to setup the
login modules used to authentication users.-->
<security-domain>java:/jaas/jmx-console</security-domain>
</jboss-web>
ii)修改與i)中的jboss-web.xml同級目錄下的web.xml文件,查找到<security-constraint/>節點,去掉它的注釋,修改后該部分內容為:
<!-- A security constraint that restricts access to the HTML JMX console
to users with the role JBossAdmin. Edit the roles to what you want and
uncomment the WEB-INF/jboss-web.xml/security-domain element to enable
secured access to the HTML JMX console.-->
<security-constraint>
<web-resource-collection>
<web-resource-name>HtmlAdaptor</web-resource-name>
<description>An example security config that only allows users with the
role JBossAdmin to access the HTML JMX console web application
</description>
<url-pattern>/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>JBossAdmin</role-name>
</auth-constraint>
</security-constraint>
在此處可以看出,為登錄配置了角色JBossAdmin。
iii) 在第一步中的jmx-console安全域和第二步中的運行角色JBossAdmin都是在login-config.xml中配置,我們在JBoss安 裝目錄/server/default/conf下找到它。查找名字為:jmx-console的application-policy:
<application-policy name = "jmx-console">
<authentication>
<login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule"
flag = "required">
<module-option name="usersProperties">props/jmx-console-users.properties</module-option>
<module-option name="rolesProperties">props/jmx-console-roles.properties</module-option>
</login-module>
</authentication>
</application-policy>
在此處可以看出,登錄的角色、用戶等的信息分別在props目錄下的jmx-console-roles.properties和jmx-console-users.properties文件中設置,分別打開這兩個文件。
其中jmx-console-users.properties文件的內容如下:
# A sample users.properties file for use with the UsersRolesLoginModule
admin=admin
該文件定義的格式為:用戶名=密碼,在該文件中,默認定義了一個用戶名為admin,密碼也為admin的用戶,讀者可將其改成所需的用戶名和密碼。
jmx-console-roles.properties的內容如下:
# A sample roles.properties file for use with the UsersRolesLoginModule
admin=JBossAdmin, HttpInvoker
該文件定義的格式為:用戶名=角色,多個角色以“,”隔開,該文件默認為admin用戶定義了JBossAdmin和HttpInvoker這兩個角色。
配置完成后讀者可以通過訪問: http://localhost:8088/jmx-console/ ,輸入jmx-console-roles.properties文件中定義的用戶名和密碼,訪問jmx-console的頁面。
摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><?xml version="1.0" encoding="UTF-8"?><project name="genwar" default="all...
閱讀全文
以ubuntu server 11.10 為例,
1) 當服務器啟動時,SHELL環境的初始化過程如下:
/etc/environment –> /etc/default/ 中的配置腳本
2)當一個用戶登錄SHELL的時候
/etc/profile --> $HOME/.profile
如果是BASH SHELL , 則是
/etc/profile –> /etc/bash.bashrc --> $HOME/.profile --> $HOME/.bashrc
3) 如果一個用戶打開一個BASH SHELL 或 使用su 切換用戶身份時, 則
/etc/bash.bashrc –> $HOME/.bashrc
其中:
/etc/environment 設置全局環境變量, 重啟服務器生效
/etc/default/目錄中的配置腳本 設置特定的全局環境變量
/etc/profile 當用戶重新登錄時,該文件被執行. 并依次調用/etc/profile.d目錄中的所有腳本。如果是初始化BASH SHELL , 還會調用/etc/bash.bashrc
/etc/bash.bashrc 每次啟動一個BASH SHELL時都會執行該腳本
$HOME/.profile 作用等同/etc/profile
$HOME/.bashrc 作用等同/etc/bash.bashrc
$HOME/.bash_logout 當每次退出SHELL環境時被執行
從代碼倉庫獲取代碼用SVN,做單元測試用JUNIT,做代碼檢查用PMD、FINDBUGS,代碼編譯、打包用ANT,拷貝文件到部署服務器上用SHELL,出現BUG了通知開發人員要發EMAIL,工具一多了,整合起來用時,不斷切換界面,輸入命令的復雜性可想而知,有沒有一站式的工具可以代勞呢?
有,這就是JENKINS,有了她,你就可以:通過統一的WEB界面做各種配置工作、查看工具的LOG輸出、即使是歷史的日志查看也沒問題;通知配置排程,可以自動的獲取代碼、編譯、打包和部署,發郵件,無須人工干預。
- 安裝JENKINS,其實就是把一個WAR包放到容器中
- 安裝插件:發郵件插件Jenkins Email Extension Plugin和部署插件Deploy to container Plugin
- 配置JDK和郵件服務器地址
- 新建任務:配置SVN地址/配置構建排程@hourly/配置構建步驟,如先用ANT編譯打包再傳到服務器/配置成功或失敗后發郵件通知的地址
- 手動執行任務或等待時間到了后執行任務
各種插件的安裝
- ANT:如果在JENKINS中使用了ANT-JUNIT,由于JENKINS是直接調用操作系統的ANT命令的,所以要在LINUX下安裝ANT,配置ANT_HOME,并將BIN加入到PATH中:
ANT_HOME=/opt/ant/apache-ant-1.8.2
JAVA_HOME=/usr/java/jdk1.6.0_29
JRE_HOME=/usr/java/jdk1.6.0_29/jre
PATH=$ANT_HOME/bin:$JAVA_HOME/bin:JRE_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/jt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export ANT_HOME JAVA_HOME JRE_HOME PATH CLASSPATH
http://hanqunfeng.iteye.com/category/138233
在JAAS的體系中,有些安全的術語,不深入了解,會弄得一頭霧水,現作一小結:
- Subject:相當于普通系統中的“當前用戶” ,可以從這里取得角色之類的信息,里面還含有一個MANAGER類,可以查數據庫,如subject.login(...)就是查數據庫是否匹配密碼
- Principal:相當于用戶名信息
- Credential:相當于密碼或密鑰等信息
- Realm:加在DAO層外面的一個ADAPTER,統一調用數據庫的方法名
- SecurityManager:權限服務的統一入口,里面會調用Realm
摘要: 最近因為項目需要,研究了一下Apache Shiro安全認證框架,把心得記錄下來。(原創by:西風吹雨) Apache Shrio是一個安全認證框架,和Spring Security相比,在于他使用了和比較簡潔易懂的認證和授權方式。其提供的native-session(即把用戶認證后的授權信息保存在其自身提供Session中)機制,這樣就可以和HttpSession、EJB Session Bea...
閱讀全文
Coherence是什么
Coherence是Oracle為了建立一種高可靠和高擴展集群計算的一個關鍵部件,集群指的是多于一個應用服務器參與到運算里。Coherence的主要用途是共享一個應用的對象(主要是java對象,比如Web應用的一個會話java對象)和數據(比如數據庫數據,通過OR-MAPPING后成為Java對象)。
簡單來說,就是當一個應用把它的對象或數據托管給Coherence管理的時候,該對象或數據就能夠在整個集群環境(多個應用服務器節點)共享,應用程序可以非常簡單地調用get方法取得該對象,并且由于Coherence本身的冗余機制使得任何一個應用服務器節點的失敗都不會影響到該對象的丟失。其實如果不使用coherence,對于一個會話在多個應用服務器節點的共享一般是通過應用服務器本身的集群技術,而Coherence的創造者則認為基于某種應用服務器技術的集群技術來共享會話變量的技術并不完整,而專門開發出Coherence這個產品(原來稱為tangosol)并且最后被Oracle收購,這個產品既有原來各種應用服務器集群所具有的各種技術特點,而且又增加了原來各種應用服務器集群技術所沒有的各種特性。
要學習這個產品,需要記住并注意的一點是:Coherence所有的設計都是基于多個(可以是非常多)的JVM,很多Coherence的測試都是使用幾十甚至上百個節點來進行的。
Coherence的一些技術特點
Coherence產品首先是被設計用于高擴展性:
所謂高擴展性就是當一個應用服務器能夠處理2000筆交易,則10個應用服務器應該能夠處理20000筆交易。
一般而言,整個應用架構的擴展性由架構里的最不能擴展的部位(稱之為瓶頸)決定,這個瓶頸一般而言都是數據源的處理,Coherence針對這種理解提供了應用層的數據共享緩沖,任何一個時候如果應用能夠從這個數據緩沖里滿足要求,則不會將請求發給數據源,從而極大地增強一般的瓶頸(數據)的擴展性。
為了加強數據的寫處理性能,Coherence還設計了延遲寫的功能,就是應用的寫會先緩存在Coherence的緩沖區,然后延遲寫到數據庫里,為了減輕數據源的寫壓力,Coherence只把最近的更改寫到數據源,比如一條數據被更改了多遍,則只有最后的更改會被提交到數據源。而且,如果可能,多個SQL語句會被變成一個SQL語句批,一次提交給數據源,這樣又極大地降低了對數據源的壓力。
熟悉于數據庫應用程序,參加過性能測試的有經驗的朋友應該知道這非常多的場合,上述Coherence的特點剛好是對應了非常多的經常遇到的應用出現問題的場景。
即Coherence被放在應用服務器和數據庫服務器之間,從而解決通常應用架構里的瓶頸(數據瓶頸)來提高整個應用架構的可擴展性。
Coherence的第二個非常重要的特地是支持數據的分區處理,就是如果有N個處理節點,則每個節點只管理1/N的數據,當一個節點失效時,該節點的數據會在剩下的節點均分,每個節點將管理1/(N-1)的數據。同樣的,當一個節點增加進來時,則每一個節點都會分配一部分數據給新的節點,則最終每個節點只管理1/(N+1)的數據。大家知道,一般應用服務器的集群都有只能緩沖共享2G java對象的缺點,而Coherence這種設計讓Coherence能夠處理非常多的數據,只需要通過增加節點的數量,就可以處理更多的數據。
如果安裝了Coherence,則應用服務器不需要配置專有的服務器集群技術,因為Coherence*web模塊提供了可用于處理http會話信息在Coherence集群內共享的功能,當一個節點需要讀取HTTP會話信息而發現自己沒有該會話信息的時候,它會把請求同時發給所有的節點(multicast),而當一個節點需要寫HTTP會話信息的同時,它也會把寫請求發給所有的節點,所以2個節點的處理和100個節點的處理都是一樣的。
1. Caching:正如Coherence的別名是Data Grid,Coherence在這種場景主要是被用于緩存數據源的數據,當應用需要數據時,直接從Coherence里面取得而不是從后臺數據源取得。比如用于緩存用戶的個人設置信息。這種使用方式可以極大降低對后臺數據源的壓力,并且甚至當后臺數據源不可用的時候也不影響系統的可用性。
2. Analytics:用于查詢,從簡單查詢到復雜查詢,比如用于查詢金融交易系統的投資者持倉信息(非常密集的查詢)。這種使用方式還可以使用多個節點的并發查詢。
3. Transactions:在Coherence直接處理交易,可以在Coherence直接提交交易,從而得到極快的響應速度和高可擴展性。
4. Events:Coherence里可以使用事件驅動的架構,能夠對事件做出實時的處理。比如在線游戲使用EDA架構處理“武器”,“裝備”的買賣交易。
摘要: 什么是Apache Shiro?Apache Shiro(發音為“shee-roh”,日語“堡壘(Castle)”的意思)是一個強大易用的Java安全框架,提供了認證、授權、加密和會話管理功能,可為任何應用提供安全保障 - 從命令行應用、移動應用到大型網絡及企業應用。 Shiro為解決下列問題(我喜歡稱它們為應用安全的四要素)提供了保護應用的API:...
閱讀全文