关于CAUCHO RESIN
resin是caucho公司的产品,纯JAVA开发,轻量级JAVA Servlet容器,稳定性和并发性比较好
其中pro版本为版本收费版
免费版本resin 3.x 和 resin 4.x,两个版本的配置变化比较大,在resin 3.x中可以使用同一个watchdog管理多个实例,而4.x版本中,每个watchdog只能管理一个实例
CentOS7下部署resin4.x
1. 升级和初始化系统
[root@app100 /root]# yum -y update [root@app100 /root]# yum -y install gcc gcc-c++ zlib zlib-devel openssl openssl-devel vim-enhanced wget lsof sysstat ntpdate
2. 设置主机名, 时区
[root@app100 /root]# echo app100 > /etc/hostname [root@app100 /root]# timedatectl set-timezone "Asia/Shanghai" [root@app100 /root]# echo '127.0.0.1 app100' >> /etc/hosts
3 安装java环境
3.1 下载jdk
[root@app100 /root]# wget -c --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u121-b13/e9e7ea248e2c4826b92b3f075a80e441/jdk-8u121-linux-x64.tar.gz
3.2 配置java环境变量
[root@app100 /root]# tar xf jdk-8u121-linux-x64.tar.gz -C /usr/local/ [root@app100 /root]# ln -s /usr/local/jdk1.8.0_121/ /usr/local/jdk1.8 [root@app100 /root]# vim /etc/profile.d/jdk.sh #添加以下内容 export JAVA_HOME=/usr/local/jdk1.8 export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export LD_LIBRARY_PATH=$JAVA_HOME/lib
3.3 使环境变量生效并验证
[root@app100 /root]# source /etc/profile [root@app100 /root]# java -version java version "1.8.0_121" Java(TM) SE Runtime Environment (build 1.8.0_121-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
4 安装Resin
4.1 下载Resin
[root@app100 /root]# wget http://caucho.com/download/resin-4.0.50.tar.gz
4.2 编译安装
[root@app100 /root]# tar xf resin-4.0.50.tar.gz [root@app100 /root]# cd resin-4.0.50/ [root@app100 /root/resin-4.0.50]# sed -i '/65521/s/int/long/' modules/c/src/common/stream.c [root@app100 /root/resin-4.0.50]# sed -i 's/$(plugin_ld_shlib)/${plugin_ld_shlib}/g' configure [root@app100 /root/resin-4.0.50]# sed -i '12165s/${APACHE_INC}/"${APACHE_INC}"/' configure [root@app100 /root/resin-4.0.50]# ./configure --prefix=/usr/local/resin --enable-64bit [root@app100 /root/resin-4.0.50]# make [root@app100 /root/resin-4.0.50]# make install [root@app100 /root/resin-4.0.50]# cd /usr/local/resin/ [root@app100 /usr/local/resin]# mkdir resin-data watchdog-data [root@app100 /usr/local/resin]# chown www.www doc/ endorsed/ log/ webapps/ resin-data/ watchdog-data/ -R #创建相应目录 [root@app100 /usr/local/resin]# mkdir /usr/local/resin_logs [root@app100 /usr/local/resin]# mkdir /data/webapps [root@app100 /usr/local/resin]# chown www.www /usr/local/resin_logs /data/webapps -R
5 配置应用
[root@app100 /usr/local/resin]# mkdir conf/vhost [root@app100 /usr/local/resin]# vim conf/vhost/daemon_8041.xml <resin xmlns="http://caucho.com/ns/resin" xmlns:resin="urn:java:com.caucho.resin"> <!--加载系统jar包--> <class-loader> <tree-loader path="${resin.home}/ext-lib"/> <tree-loader path="${resin.root}/ext-lib"/> <tree-loader path="${resin.home}/lib"/> <tree-loader path="${resin.root}/lib"/> </class-loader> <!--resin manager配置--> <resin:AdminAuthenticator xmlns="http://caucho.com/ns/resin" xmlns:resin="urn:java:com.caucho.resin"> <user name="admin" password="{SSHA}p+uqTbaAOwZNMAGHi7ajZfNOhsN/kihk"/> <!--password is Resin@123.567& --> </resin:AdminAuthenticator> <!--jvm日志配置--> <log name="" level="info" path="stdout:" timestamp="[%Y-%m-%d %H:%M:%S.%s] {%{thread}}"/> <logger name="com.caucho" level="info"/> <logger name="com.caucho.java" level="config"/> <logger name="com.caucho.loader" level="config"/> <log name="" level='all' path='/usr/local/resin_logs/daemon/${server.id}_stdout.log' format=" ${log.level} ${log.loggerName} ${log.message}" timestamp="[%Y-%m-%d %H:%M:%S.%s]" rollover-period='1D' rollover-count="7"/> <!--经常更新文件的时间间隔,单位为秒, -1不为检查--> <dependency-check-interval>-1</dependency-check-interval> <cluster id="daemon01"> <server-default> <jvm-arg>-d64</jvm-arg> <jvm-arg>-Xmx512m</jvm-arg> <!--jvm最大内存, 一般配置最大量小值相等, 理论上能够降低GC时间--> <jvm-arg>-Xms512m</jvm-arg> <!--jvm最小内存, 也是启动resin后的默认内存分配值--> <jvm-arg>-Xmn128m</jvm-arg> <!--jvm年轻代配置, 一般配置成最大值的1/4~1/3--> <jvm-arg>-Xss256k</jvm-arg> <!--jvm stack配置, 256k基本够用--> <jvm-arg>-Xdebug</jvm-arg> <jvm-arg>-verbosegc</jvm-arg> <jvm-arg>-Dcom.sun.management.jmxremote</jvm-arg> <jvm-arg>-XX:+PrintGCTimeStamps</jvm-arg> <jvm-arg>-XX:+PrintGCDateStamps</jvm-arg> <jvm-arg>-XX:+PrintGCDetails</jvm-arg> <jvm-arg>-Xloggc:${resin.home}/log/gc-${server.id}.log</jvm-arg> <jvm-arg>-XX:+HeapDumpOnOutOfMemoryError</jvm-arg> <jvm-arg>-XX:HeapDumpPath=${resin.home}/log/oom-${server.id}.log</jvm-arg> <memory-free-min>1M</memory-free-min> <!--强制resin强制重启时的最小空闲内存--> <!--网络超时时间--> <socket-timeout>5s</socket-timeout> <keepalive-max>1024</keepalive-max> <keepalive-timeout>5s</keepalive-timeout> <!--线程池--> <thread-max>2048</thread-max> <thread-idle-min>10</thread-idle-min> <thread-idle-max>20</thread-idle-max> <port-default> <port-thread-max>4096</port-thread-max> <accept-thread-max>4096</accept-thread-max> <accept-thread-min>200</accept-thread-min> </port-default> <!--实例运行使用的系统用户--> <user-name>www</user-name> <group-name>www</group-name> <!--watchdog配置--> <watchdog-jvm-arg>-Dcom.sun.management.jmxremote</watchdog-jvm-arg> <watchdog-port>16041</watchdog-port> <!--jmx监控配置--> <jvm-arg>-Dcom.sun.management.jmxremote.port=19041</jvm-arg> <jvm-arg>-Dcom.sun.management.jmxremote.host=172.16.123.100</jvm-arg> <jvm-arg>-Djava.rmi.server.hostname=172.16.123.100</jvm-arg> <jvm-arg>-Dcom.sun.management.jmxremote.ssl=false</jvm-arg> <jvm-arg>-Dcom.sun.management.jmxremote.authenticate=true</jvm-arg> <jvm-arg>-Dcom.sun.management.jmxremote.access.file=${resin.home}/conf/jmxremote.access</jvm-arg> <jvm-arg>-Dcom.sun.management.jmxremote.password.file=${resin.home}/conf/jmxremote.password</jvm-arg> </server-default> <resin:import path="${resin.home}/conf/app-default.xml"/> <server id="daemon01" address="172.16.123.100" port="17041"> <http id="" address="172.16.123.100" port="18041"/> </server> <server-header>eas</server-header> <host-default> <!--访问日志, rollover-period为轮询时间--> <access-log path="/usr/local/resin_logs/daemon/${server.id}_access.log" format='"%{X-Real-IP}i" %h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i"' rollover-period="1D" rollover-count="7"/> <web-app-deploy path="webapps"/> </host-default> <host id="" root-directory="."> <!--设置默认字符集--> <character-encoding>UTF-8</character-encoding> <!--虚拟主机目录--> <web-app id="/" root-directory="/data/webapps/daemon"/> <web-app id="/resin-admin" root-directory="${resin.root}/doc/admin"> <prologue> <resin:set var="resin_admin_external" value="true"/> <resin:set var="resin_admin_insecure" value="true"/> </prologue> </web-app> </host> </cluster> </resin>
6 配置JMX
[root@app100 /usr/local/resin]# cp $JAVA_HOME/jre/lib/management/jmxremote.access conf/jmxremote.access [root@app100 /usr/local/resin]# cp $JAVA_HOME/jre/lib/management/jmxremote.password.template conf/jmxremote.password [root@app100 /usr/local/resin]# vim conf/jmxremote.password monitorRole QED& controlRole R&D& [root@app100 /usr/local/resin]# chmod 600 conf/jmxremote.password [root@app100 /usr/local/resin]# chown www.www conf/jmxremote.password
7 启动resin
[root@app100 /usr/local/resin]# su - www [www@app100 /home/www]$ /usr/local/resin/bin/resinctl -conf /usr/local/resin/conf/vhost/daemo_8041.xml start
8 解决乱码问题
[root@app100 /usr/local/resin/bin]# cp resinctl resinctl8 [root@app100 /usr/local/resin/bin]# vim resinctl8 export LANG="en_US.UTF-8" export LC_ALL="en_US.UTF-8" export JAVA_HOME=/usr/local/jdk1.8 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export LD_LIBRARY_PATH=.:$JAVA_HOME/jdk/lib
9 端口使用规范建议
Resin使用三个端口, 分别为watchdog端口/server口/http口, 使用表格统一规范不同应用的使用端口
----------------------------------------------- |应用名称 | watchdog | server | http | 备注 | ----------------------------------------------- | app | 6041 | 7041 | 8041 | app应用 | ----------------------------------------------- | web | 6042 | 7042 | 8042 | web接口 | -----------------------------------------------
10 Resin4多实例
Resin4多实例与Resin3多实例配置还是有差别的,Resin3中只需在cluster里面配置两个server即可, 而Resin4一个cluster只能配置一个server,所以Resin4配置多实例里,建议分开不同的配置文件,例如app01.xml和app02.xml,然后把配置文件中的id值改写文件名的前缀,以及端口按加100,这样就可以在一台机器跑两个实例了;