为了稳定和安全,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>

Resin 的watchdog(看门狗)介绍和resin负载均衡实现的更多相关文章

  1. android -- WatchDog看门狗分析

    在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生 ...

  2. STM32窗口看门狗和独立看门狗的区别,看门狗介绍及代码演示

    一.介绍: STM32看门狗分为独立看门狗和窗口看门狗两种,其两者使用调条件如下所示, IWDG和WWDG两者特点如下图所示: 独立看门狗的手册资料: 窗口看门狗的手册资料:             ...

  3. 服务器watchdog看门狗的理解

    1.什么是watchdog?watchdog,中文名称叫做“看门狗”,全称watchdog timer,从字面上我们可以知道其实它属于一种定时器.然而它与我们平常所接触的定时器在作用上又有所不同.普通 ...

  4. 【分享】iTOP-iMX6UL开发板驱动看门狗 watchdog 以及 Linux-c 测试例程

    iTOP-iMX6UL开发板看门狗测试例程,iTOP-iMX6UL 开发板的看门狗驱动默认已经配置,可以直接使用测试例程. 版本 V1.1:1.格式修改:2.例程修改完善,其中增加喂狗代码.1 看门狗 ...

  5. linux设备驱动归纳总结(十一):写个简单的看门狗驱动【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-112879.html linux设备驱动归纳总结(十一):写个简单的看门狗驱动 xxxxxxxxxxx ...

  6. 【Linux开发】linux设备驱动归纳总结(十一):写个简单的看门狗驱动

    linux设备驱动归纳总结(十一):写个简单的看门狗驱动 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

  7. Redisson 分布式锁源码 02:看门狗

    前言 说起 Redisson,比较耳熟能详的就是这个看门狗(Watchdog)机制. 本文就一起看看加锁成功之后的看门狗(Watchdog)是如何实现的? 加锁成功 在前一篇文章中介绍了可重入锁加锁的 ...

  8. IIS负载均衡-Application Request Route详解第一篇: ARR介绍(转载)

    IIS负载均衡-Application Request Route详解第一篇: ARR介绍 说到负载均衡,相信大家已经不再陌生了,本系列主要介绍在IIS中可以采用的负载均衡的软件:微软的Applica ...

  9. LVS负载均衡介绍

    LVS介绍 负载均衡器 • 链路负载均衡 (三层负载均衡) • 服务器负载均衡 (四层负载均衡) • 应用层负载均衡 (七层负载均衡) • 全局负载均衡 基本情况 • 实现服务器负载均衡 • 核心功能 ...

随机推荐

  1. iOS开发之谓词Predicate和对象数组的排序

    我们在开发中经常使用的Predicate谓词,主要是正则表达式的使用,今天给大家简单的讲讲怎样去使用谓词. 因为内容比较简单,所以直接上代码展示: NSMutableArray *people_arr ...

  2. 几个Unity3d UI制作的解决方案.

    1.ex2D的渲染机制 (高效的原因) 在以往的2D插件中,渲染方式是每个sprite单独渲染,由Unity负责Dynamic Batching.在新版ex2D中,我们经过严谨的优化实现了独立的dyn ...

  3. Django之模板(Template)

    Django模板系统 官方文档 每一个Web框架都需要一种很便利的方法用于动态生成HTML页面. 最常见的做法是使用模板. 模板包含所需HTML页面的静态部分,以及一些特殊的模版语法,用于将动态内容插 ...

  4. 自己搭建MVC时遇到的一些问题及解决办法

    错误1 The view 'Index' or its master was not found or no view engine supports the searched locations. ...

  5. [转载] ffmpeg函数介绍

    本文对在使用ffmpeg进行音视频编解码时使用到的一些函数做一个简单介绍,我当前使用的ffmpeg版本为:0.8.5,因为本人发现在不同的版本中,有些函数名称会有点小改动,所以在此有必要说明下ffmp ...

  6. HDU - 5289:Assignment(单调队列||二分+RMQ||二分+线段树)

    Tom owns a company and he is the boss. There are n staffs which are numbered from 1 to n in this com ...

  7. DbEntry 默认 主键ID为long

    DbEntry 默认 主键ID为long,如果自己表中的主键ID为int,可以通过以下方式修改: public class Company :DbObjectModel<Company,int& ...

  8. 使用微软的MSBuild.exe编译VS .sln .csproj 文件

    最近在看一些算法和测试一些程序,以及帮团队测试程序,团队使用了vs开发环境创建的sln项目文件,我使用的是公司的机器,没有任何权限安装程序等操作,但是又需要编译一些程序,所以我想到了,使用MSBuil ...

  9. RESTful Get方式传参json格式后端400 解决方案

    前端采用vue+axios 后端采用spring boot restful 问题: 前端get 请求需要传递array 字段值 后端由于tomcat 版本问题,不支持url接受特殊字符包括 [] {} ...

  10. numpy之统计函数和布尔数组方法

    统计函数 可以通过numpy的统计函数对整个数组或者某个轴向的数据进项统计计算. 所谓的轴向,其实就是n维向量的某一维.或者说某一行,某一列. sum对数组(向量)中全部或某个轴向的元素求和,长度为0 ...