C.4. 故障恢复和独立子树
在很多企业级环境中,如果服务的组件失败,修复的正常动作是重启整个服务。例如:在 例 C.6 “服务 foo 常见故障恢复” 中,如果这个服务中定义的任意脚本失败,则正常动作是重启(重新定位或者禁用,视服务恢复策略而定)该服务。但在有些情况下,服务的某些部分可能是不重要的,可能有必要在尝试一般恢复前重启该服务的某一部分。要完成这个操作,您可以使用
__independent_subtree
属性。例如:在 例 C.7 “使用 __independent_subtree
属性对服务 foo 执行故障恢复” 中,可使用 __independent_subtree
属性完成以下动作:
- 如果 script:script_one 失败,重启 script:script_one、script:script_two 和 script:script_three。
- 如果 script:script_two 失败,则只重启 script:script_two。
- 如果 script:script_three 失败,则重启 script:script_one、script:script_two 和 script:script_three。
- 如果 script:script_four 失败,则重启整个服务。
例 C.6. 服务 foo 常见故障恢复
<service name="foo"> <script name="script_one" ...> <script name="script_two" .../> </script> <script name="script_three" .../> </service>
例 C.7. 使用 __independent_subtree
属性对服务 foo 执行故障恢复
<service name="foo"> <script name="script_one" __independent_subtree="1" ...> <script name="script_two" __independent_subtree="1" .../> <script name="script_three" .../> </script> <script name="script_four" .../> </service>
在有些情况下,如果服务的某个组件失败,您想要只禁用那个组件而不禁用整个服务,以避免影响使用那个服务其他组件的服务。从红帽企业版 Linux 6.1 发行本开始,您可以使用
__independent_subtree="2"
属性达到此目的,该属性将独立子树标为非关键(non-critical)。
注意
您可以在单一参考的资源中只使用 non-critical 标签。这个 non-critical 标签可在所有资源中使用,并可用于资源树的所有层,但在定义服务或者虚拟机时不应在顶层使用。
从红帽企业版 Linux 6.1 开始,您可以在该资源数的每个节点中为独立的子树设定最多重启和重启过期。您可以使用 以下属性设定这些阈值:
__max_restarts
设定在放弃努力前最多可承受的重启次数。__restart_expire_time
以秒为单位设定在多长时间后不再尝试重启。