resin是CAUCHO公司的产品,是一个非常流行的支持servlets和jsp的引擎,速度非常快。resin本身包含了一个支持HTTP/1.1的WEB服务器。虽然它可以显示动态内容,但是它显示静态内容的能力也非常强,速度直逼nginx server。许多站点都是使用该web服务器构建的。

    resin支持负载均衡,可以增加web站点的可靠性。方法是增加服务器的数量。比如一台server的错误率是1%的话,那么支持负载均衡的两个resin服务器就可以是错误率降到0.01%

resin官方网站:http://www.caucho.com

首先安装jdk,这里选择的是jdk7

curl -LO -H "Cookie: oraclelicense=accept-securebackup-cookie" \

"http://download.oracle.com/otn-pub/java/jdk/7u75-b13/jdk-7u75-linux-x64.rpm" -k

rpm -ivh jdk-7u75-linux-x64.rpm

然后配置环境变量

vim /etc/profile.d/java.sh

export JAVA_HOME=/usr/java/jdk1.7.0_75

export PATH=$JAVA_HOME/bin:$PATH

export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar

. /etc/profile.d/java.sh


jdk环境有了,于是安装resin,这里选择的版本为resin-4.0.44.tar.gz

wget http://caucho.com/download/resin-4.0.44.tar.gz

tar xf resin-4.0.44.tar.gz

cd resin-4.0.44

./configure --prefix=/usr/local/resin4.0.44 --with-java-home=/usr/java/jdk1.7.0_75/ --enable-64bit

make && make install

[root@RS2 local]# ln -sv resin4.0.44/ /usr/local/resin

"/usr/local/resin" -> "resin4.0.44/"


配置resin环境变量

vim /etc/profile.d/resin.sh

export RESIN_HOME=/usr/local/resin

export PATH=${RESIN_HOME}/bin:$PATH

source /etc/profile.d/resin.sh

resin安装成功后各目录

wKioL1fMFoaDA-bhAAB_ekbHdYQ994.jpg

备份好配置文件

[root@RS2 conf]# cp resin.xml resin.xml.bak

[root@RS2 conf]# cp resin.properties resin.properties.bak

启动resin服务:

[root@RS2 conf]# ../bin/resinctl start

Resin/4.0.44 launching watchdog at 127.0.0.1:6600

Resin/4.0.44 started -server 'app-0' with watchdog at 127.0.0.1:6600

查看java主要进程

[root@RS2 conf]# jps

28963 Resin

28997 Jps

28917 WatchdogManager

[root@RS2 conf]# netstat -tunlp

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   

tcp        0      0 127.0.0.1:6800              0.0.0.0:*                   LISTEN      28963/java                  

tcp        0      0 127.0.0.1:6600              0.0.0.0:*                   LISTEN      28917/java          

tcp        0      0 :::8080                     :::*                        LISTEN      28963/java          

浏览器尝试访问如下图

wKiom1fMF7aww_uXAABjM6-0uwI781.jpg


配置resin-admin这个uri:

wKioL1fMGHujNxbjAACXhbT1T6A567.jpg

编辑配置文件vim resin.properties

# Access to /resin-admin and remote CLI is password restricted.

# Use "resinctl generate-password" and copy/paste here to set the admin

# admin_user : admin

# admin_password : {SSHA}xxxxxxxx

注释信息很详细,于是使用如下命令配置

[root@RS2 conf]# resinctl generate-password my-admin mypassword

admin_user : my-admin

admin_password : {SSHA}eZYiiZTQCO9XQbcrUfQq1Br57Q2zrCJQ

用户名:my-admin

密码:mypassword将生成的两行信息复制到配置文件中

修改完配置文件,然后重启

[root@RS2 conf]# /etc/init.d/resin restart

Stopping resin: .

Starting resin: .

观察日志信息,看是否报错

[root@RS2 log]# ll

总用量 28

-rw-r--r--. 1 root root 8867 9月   4 20:47 access.log

-rw-r--r--. 1 root root  154 9月   4 20:53 console.log

-rw-r--r--. 1 root root 6284 9月   4 20:53 jvm-app-0.log

-rw-r--r--. 1 root root 3470 9月   4 20:53 watchdog-manager.log

[root@RS2 log]# pwd

/usr/local/resin/log

wKioL1fMGc-T1nseAAGeTJamH2M870.jpg

从日志中可以看出很多信息,方便进行查错

再次访问resin-admin,并输入账号密码

wKiom1fMGjHwMoFCAAFCqxoycAw591.jpg

从管理界面可以看出很多内容,这里不详细介绍,自行查看


根据resin官方阐述,resin也能做web服务器,于是配置虚拟主机,看看效果

编辑配置文件vim resin.xml

<cluster id="app">

    <server-multi id-prefix="app-" address-list="${app_servers}" port="6800"/>

    <host-default>

      <web-app-deploy path="webapps"

                      expand-preserve-fileset="WEB-INF/work/**"

                      multiversion-routing="${webapp_multiversion_routing}"

                      path-suffix="${elastic_webapp?resin.id:''}"/>

    </host-default>

    <host-deploy path="hosts">

      <host-default>

        <resin:import path="host.xml" optional="true"/>

      </host-default>

    </host-deploy>

    <host id="" root-directory=".">

      <web-app id="/" root-directory="webapps/ROOT"/>

    </host>

    <resin:if test="${resin_doc}">

      <host id="${resin_doc_host}" root-directory="${resin_doc_host}">

        <web-app id="/resin-doc" root-directory="${resin.root}/doc/resin-doc"/>

      </host>

    </resin:if>

  </cluster>

这里是摘出来的一段默认的cluster配置,这里大致介绍下配置参数的含义,更多详细内容参考官方文档

<cluster id="app">   cluster是标签,id是The cluster identifier.,cluster的标识符,下面的server标签中的id也是类似

<server-multi id-prefix="app-" address-list="${app_servers}" port="6800"/>

server-multi:相当于多个server组合,id-prefix:以某某为前缀的组合,这里是以app-

address-list="${app_servers}":指一个address列表,这里参考配置文件resin.properties中

app_servers      : 127.0.0.1:6800这个参数,当然也可以不使用宏定义,而以下面的方式

<server-multi id-prefix="app-" address-list="192.168.1.2 192.168.1.3" port="6800"/>

port="6800":指监听的tcp端口

<host id="" root-directory=".">

      <web-app id="/" root-directory="webapps/ROOT"/>

</host>

host id="" root-directory=".":这里的id指的是主机名域名,相当于是www.baidu.com,官方解释是primary host name

root-directory=".":Root directory for host files parent directory

这里的.指的是resin的家目录

当然host标签还有其他参数:

regexp Regular expression based host matching none

host-name Canonical host name none

host-alias Aliases matching the same host none

secure-host-name Host to use for a redirect to SSL none


<web-app id="/" root-directory="webapps/ROOT"/>:这里的id指的是The url prefix selecting this application.,也就是uri这里就是www.baidu.com/最后的/

root-directory="webapps/ROOT":The root directory for the application, corresponding to a url of /id/. A relative path is relative to the <root-directory> of the containing <host>. Can use regexp replacement variables.我理解为网站的根目录

因为ROOT下面就是index,jsp也就是www.baidu.com/index.jsp


好了,接下来新增一个host主机名

<host id="www.hcstart.com" root-directory="/www">

      <!--

         - webapps can be overridden/extended in the resin.xml

        -->

      <web-app id="/" root-directory="html"/>

</host>

创建好网站目录,mkdir -p /www/html

编辑jsp文件,vim /www/html/index.jsp

<%@ page language="java" %>

<%@ page import="java.util.*" %>

<html>

  <head>

    <title>JSP Test Page</title>

  </head>

  <body>

    <%

out.println("Hello world!");

    %>

  </body>

</html>

然后重启resin服务,查看日志信息,观察浏览器信息

wKiom1fMH8HysqG5AAAvRUpcR84264.jpg

于是添加host信息成功


接下来为resin创建多实例,也就是绑定多个http port,这里介绍两种方式

1、注释掉配置文件resin.properties中的某些行,具体操作如下

app_servers      : 127.0.0.1:6800

app.http          : 8080

注释掉这两行

然后修改配置文件resin.xml

<cluster id="app">

      <server id="app-0" address="192.168.1.113" port="6800">

        <http port="80"/>

      </server>

      <host id="www.hcstart.com" root-directory="/www">

      <web-app id="/" root-directory="html"/>

      </host>

  </cluster>

精简了配置文件,于是再为cluster中添加一个server,一个host,于是

 <cluster id="app">

      <server id="app-0" address="192.168.1.113" port="6800">

        <http port="80"/>

      </server>

      <host id="www.hcstart.com" root-directory="/www">

      <web-app id="/" root-directory="html"/>

      </host>

      <server id="app-1" address="192.168.1.113" port="6801">

        <http port="8080"/>

      </server>    

      <host id="www.hcstart.com" root-directory="/www">

      <web-app id="/" root-directory="blog"/>

      </host>

  </cluster>

然后重启resin服务,发现端口并没有如实出现,于是查看日志信息

wKioL1fMIt6ARlSFAACoaduFf0g255.jpg

从报错信息可以看出,一个cluster中不能支持多个server实例,要想支持必须使用商业版

于是做如下修改,增加cluster,并配置server以及host

<cluster id="app">

      <server id="app-0" address="192.168.1.113" port="6800">

        <http port="80"/>

      </server>

      <host id="www.hcstart.com" root-directory="/www">

      <web-app id="/" root-directory="html"/>

      </host>

  </cluster>


 <cluster id="mycluster">

      <server id="app-1" address="192.168.1.113" port="6801">

        <http port="8080"/>

      </server>

      <host id="www.hcstart.com" root-directory="/www">

      <web-app id="/" root-directory="blog"/>

      </host>

  </cluster>

然后再次重启,查看端口

[root@RS2 conf]# netstat -tunlp|grep java

tcp        0      0 192.168.1.113:6800          0.0.0.0:*                   LISTEN      31066/java          

tcp        0      0 192.168.1.113:6801          0.0.0.0:*                   LISTEN      31074/java          

tcp        0      0 127.0.0.1:6600              0.0.0.0:*                   LISTEN      31015/java          

tcp        0      0 :::8080                     :::*                        LISTEN      31074/java          

tcp        0      0 :::80                       :::*                        LISTEN      31066/java  

访问浏览器,比较端口80和8080的变化

wKioL1fMJI2hvKrLAAAkq1n6Yvk151.jpgwKiom1fMJJjx36S6AAAspw6U0Do940.jpg

至此一个主机多实例搞定,采用第二种方法

2、修改配置文件resin.properties

app_servers      : 127.0.0.1:6800

app1_servers      : 127.0.0.1:6801

app2_servers      : 127.0.0.1:6802


app.http          : 8080

app1.http          : 8081

app2.http          : 8082

然后修改配置文件resin.xml,如下

<cluster id="app1">   这里的cluster要和resin.properties配置文件那里定义好的ip和端口要一致

      <server-multi id-prefix="${app1.http}" address-list="${app1_servers}" port="6801"/>

      <host id="www.hcstart.com" root-directory="/www">

      <web-app id="/" root-directory="html"/>

      </host>

  </cluster>

  <cluster id="app2">   这里的cluster要和resin.properties配置文件那里定义好的ip和端口要一致

      <server-multi id-prefix="${app2.http}" address-list="${app2_servers}" port="6802"/>

      <host id="www.hcstart.com" root-directory="/www">

      <web-app id="/" root-directory="blog"/>

      </host>

  </cluster>

查看端口状态

[root@RS2 conf]# netstat -tunlp|grep java

tcp        0      0 127.0.0.1:6801              0.0.0.0:*                   LISTEN      33991/java          

tcp        0      0 127.0.0.1:6802              0.0.0.0:*                   LISTEN      33999/java          

tcp        0      0 127.0.0.1:6600              0.0.0.0:*                   LISTEN      33943/java          

tcp        0      0 :::8081                     :::*                        LISTEN      33991/java          

tcp        0      0 :::8082                     :::*                        LISTEN      33999/java   

查看浏览器效果

wKioL1fMK83gvbEKAAAoEhRdmuY135.jpg

wKioL1fMK9vTWh5zAAAoa565beg172.jpg


结合nginx做负载均衡,还是在一个服务器上做实验

安装nginx:yum -y install nginx

配置nginx:vim /etc/nginx/conf.d/default.conf 

server {

    listen       80;

    server_name  www.hcstart.com;

配置修改:vim /etc/nginx/nginx.conf

upstream www.hcstart.com {

        server 192.168.1.113:8081 weight=1;

        server 192.168.1.113:8082 weight=1;

    }

[root@RS2 conf]# nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

[root@RS2 conf]# service nginx start

正在启动 nginx:                                           [确定]

观察浏览器效果:

wKioL1fMLWiRNEwEAAAowlEFuOE799.jpg-wh_50

wKiom1fMLXPCtLXmAAAlrRI2VvM446.jpg

当然也可以结合nginx做动态分离,但resin服务也支持静态页面,所以这个改如何设计架构还是得看业务模式,这里只是简单的介绍了resin的使用,更多信息查看官网

http://caucho.com/resin-4.0/admin/config-resin-xml.xtp

新建菜鸟学习交流群:584498750