Resin 的 watchdog(看門狗)介紹 (轉)

Resin 的 watchdog(看門狗)介紹

轉自原文:http://blog.csdn.net/sanshiqiduer/article/details/5018437

爲了穩定和安全,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>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章