为了稳定和安全,Resin使用一个独立的watchdog进程来启动和监视Resin服务器。watchdog连续你检测Resin服务器的状态,如果其没有反应或者迟钝,将会重启Resin服务器进程。大多数情况下,watchdog从resin.xml中读取配置信息,而不需要其它的附加配置。某些ISP服务商可能使用特别的配置,为了安全他们会配置watchdog来隔离JVM(Java虚拟主机)。
概述
因为watchdog作为一个服务运行,大多数情况下你根本不需要注意它。标准的配置下,一个机器上的watchdog可以监视这个机器上所有JVM,因此大部分情况下你不需要修改watchdog的配置。需要你管理watchdog的任务就是,如果机器发生了问题,停止watchdog,并检查watchdog日志中Resin服务器的重启事件。
watchdog自动重启崩溃和退出的Resin服务。因此如果你想停止Resin,你需要告诉watchdog来停止Resin实例,或者完全停止watchdog。使用resin.ar中的主程序(main)来控制watchdog,有用来启动、停止、重启Resin实例的命令,同样还有报告watchdog状态的命令。
大多数用户不需要特别的配置watchdog,但是ISP和大的站点可能创建特殊的watchdog.xml(包含<watchdog-manager>标签)来控制watchdog。<watchdog-manager>允许ISP控制watchdog,为他们用户的Resin实例指定附加的命令行参数,包括为他们的用户创建安全的chroot环境的能力。典型地,watchdog以root帐号运行,然而用户实例使用他们各自的用户id。
命令行
resin.jar中的主类ResinBoot的命令行用来控制watchdog。主要的操作包括:start、stop、restart、shutdown和status。
start
"start"命令使用给定的server id启动一个新的Resin实例。ResinBoot首先会尝试在当前机器上的watchdog,在需要时会启动一个新的watchdog。在resin.xml中定义的server id必须是惟一的。
例如: watchdog启动
resin-3.2.x> java -jar lib/resin.jar -conf conf/test.conf -server a start
Resin/3.2.x started -server 'a' for watchdog at 127.0.0.1:6700
stop
"stop"命令使用给定的server id停止Resin实例。如果停止的实例是watchdog管理的最后一个Resin实例,watchdog也会自动退出。如果没有指定 -server 参数,watchdog使用默认的 -server "" 。
例子: watchdog停止
resin-3.2.x> java -jar lib/resin.jar stop
Resin/3.2.x started -server '' for watchdog at 127.0.0.1:6600
status
"status"命令统计被watchdog服务管理的Resin实例的状态。
例子: watchdog状态
resin-3.2.x> java -jar lib/resin.jar status
Resin/3.2.x status for watchdog at 127.0.0.1:6600
server '' : active
password: missing
user: ferg
root: /home/test/resin/
conf: /etc/resin/resin.xml
单一Resin实例
这个例子显示了一个单一服务器站点,其监听标准的HTTP端口80,并以resin这个用户身份运行。在这个例子中watchdog是以root用户身份运行的,因此其能够绑定到特殊的端口80上,但是Resin实例是以resin身份运行的。
因为使用了默认的配置,watchdog监听6600端口来获取命令。
例子: /etc/resin/resin.xml
<resin xmlns="http://caucho.com/ns/resin">
<cluster id="">
<server id="app-a" address="127.0.0.1">
<user-name>resin</user-name>
<group-name>resin</group-name>
<http port="80" />
</server>
<resin:import path="${resin.home}/conf/app-default.xml" />
<host id="">
<web-app id="" path="/var/www/htdocs" />
</host>
</cluster>
</resin>
在一个机器上使用共享的watchdog实现负载平衡
当在一个机器上运行多个Resin实例的时候,一个watchdog-manager就能管理所有的Resin实例。指定server id用来决定那个Resin实例是start或者stop。
在这个例子中,有一个web-tier服务器做为负载平衡器,两个app-tier服务器处理后台数据,它们都在一个机器上。为了维护和升级方便,一个站点可能需要多个app-rier服务器。当一个停机的时候,第二个服务器可以继续服务。
这个例子使用默认的watchdog配置,其读取的是标准的resin.xml文件。watchdog进程和ResinBoot都读取resin.xml配置文件,因此不需要特别的watchdog配置。watchdog能够自动发现运行在这个机器上的多个Resin实例并管理它们。
例子: /etc/resin/resin.xml
<resin xmlns="http://caucho.com/ns/resin">
<cluster id="app-tier">
<server-default>
<user-name>resin</user-name>
<group-name>resin</group-name>
</server-default>
<server id="app-a" address="192.168.1.10" port="6810" />
<server id="app-b" address="192.168.1.10" port="6811" />
<host id="">
<web-app id="" path="/var/www/htdocs" />
</host>
</cluster>
<cluster id="web-tier">
<server-default>
<user-name>resin</user-name>
<group-name>resin</group-name>
</server-default>
<server id="web-a" address="192.168.1.10" port="6800">
<http port="80" />
</server>
<host id="">
<web-app id="">
<rewrite-redirect>
<load-balance regexp="" cluster="app-tier" />
</rewrite-redirect>
</web-app>
</host>
</cluster>
</resin>
同一机器使用不同的watchdog来实现负载平衡
在某些情况下,最好让每个Resin实例有其自己的watchdog,例如当多个用户在使用相同的机器。每个<server>块配置一个<watchdog-port>。因为watchdog将读取resin.xml使用<server>块匹配命令行参数中的 -server id,每个watchdog将启动期自己的端口。
例子: /etc/resin/resin.xml
<resin xmlns="http://caucho.com/ns/resin">
<cluster id="app-tier">
<server-default>
<user-name>resin</user-name>
<group-name>resin</group-name>
</server-default>
<server id="app-a" address="192.168.1.10" port="6810">
<watchdog-port>6700</watchdog-port>
<http port="8080" />
</server>
<server id="app-b" address="192.168.1.10" port="6811">
<watchdog-port>6701</watchdog-port>
<http port="8081" />
</server>
<host id="">
<web-app id="" path="/var/www/htdocs" />
</host>
</cluster>
</resin>
在上面的例子中,启动Resin, 使用 -server app-a参数将启动一个在端口6700上的watchdog,使用 -server app-b参数将启动一个在端口6701上的watchdog。
例子: starting app-b with watchdog-port=6701
resin-3.2.x> java -jar lib/resin.jar -server app-b start
ISP watchdog管理
在ISP的环境中,你可能需要为watchdog使用一个隔离的配置文件,它为不同的用户启动Resin实例。在这个情况下,你要确保watchdog.xml不能被这些普通用户读取,要创建一个管理用户来读取这个文件。
●启动和重启用户的Resin JVM
●设置JVM参数和Java可执行性
●设置Resin实例的root-directory
●setuid user-name 和 group-name
●设置resin.xml配置
●打开受保护的端口,例如80
●可选的chroot设置
watchdog将使用给定的帐号作为setuid来启动Resin实例。它也能打开任何需要的保护端口,例如80。
例子: /etc/resin/watchdog.xml
<resin xmlns="http://caucho.com/ns/resin">
<management>
<user name="harry" password="MD5HASH==" />
</management>
<watchdog-manager>
<watchdog-default>
<jvm-arg>-Xmx256m</jvm-arg>
</watchdog-default>
<watchdog id="user_1">
<user-name>user_1</user-name>
<group-name>group_1</group-name>
<resin-xml>/home/user_1/conf/resin.xml</resin-conf>
<resin-root>/home/user_1/www</resin-root>
<open-port address="192.168.1.10" port="80" />
</watchdog>
...
<watchdog id="user_n">
<user-name>user_n</user-name>
<group-name>group_n</group-name>
<resin-conf>/home/user_n/conf/resin.xml</resin-conf>
<resin-root>/home/user_n/www</resin-root>
<open-port address="192.168.1.240" port="80" />
</watchdog>
</watchdog-manager>
</resin>