#
软件及环境:
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:...
阅读全文