可以使用 Logical Domains Manager 建立域之间的依赖关系。如果域具有一个或多个依赖于它的域,则该域称为主域。如果域依赖于其他域,该域称为从属域。
通过设置 master 属性,每个从属域最多可以指定四个主域。例如,pine 从属域在以下用逗号分隔的列表中指定其四个主域:
# ldm add-domain master=alpha,beta,gamma,delta pine
alpha、beta、gamma 和 delta 主域全都指定故障策略 stop。
每个主域都可以指定在主域发生故障时对其从属域产生何种影响。例如,如果主域发生故障,它可能会要求其从属域发生紧急情况。如果某个从属域有多个主域,则每个主域都必须有相同的故障策略。因此,第一个主域发生故障将触发其所有从属域上定义的故障策略。
主域的故障策略是通过将以下任一值设置为 failure-policy 属性来控制的:
ignore 将忽略所有从属域
panic 使所有从属域都发生紧急情况(类似于运行 ldm panic 命令)
reset 立即停止,然后重新启动所有从属域(类似于运行 ldm stop -f,然后运行 ldm start 命令)
stop 停止所有从属域(类似于运行 ldm stop -f 命令)
在此示例中,主域按如下所示指定其故障策略:
primary# ldm set-domain failure-policy=ignore apple primary# ldm set-domain failure-policy=panic lemon primary# ldm set-domain failure-policy=reset orange primary# ldm set-domain failure-policy=stop peach primary# ldm set-domain failure-policy=stop alpha primary# ldm set-domain failure-policy=stop beta primary# ldm set-domain failure-policy=stop gamma primary# ldm set-domain failure-policy=stop delta
可以使用此机制创建域之间的显式依赖关系。例如,来宾域隐式依赖于服务域以提供其虚拟设备。当来宾域所依赖的服务域未启动并运行时,来宾域的 I/O 将被阻止。通过将来宾域定义为其服务域的从属域,可以指定来宾域在其服务域关闭时的行为。如果未建立此类依赖关系,来宾域只会等待其服务域返回到服务状态。
有关域依赖关系 XML 示例,请参见Example 23–6。
以下示例说明如何配置域依赖关系。
示例 17-1 使用域依赖关系配置故障策略第一个命令创建名为 twizzle 的主域。此命令使用 failure-policy=reset 来指定如果 twizzle 域发生故障,从属域将重置。第二个命令修改名为 primary 的主域。此命令使用 failure-policy=reset 来指定如果 primary 域发生故障,从属域将重置。第三个命令创建名为 chocktaw 的从属域,该从属域依赖于 twizzle 和 primary 两个主域。从属域使用 master=twizzle,primary 来指定其主域。如果 twizzle 或 primary 域发生故障,则 chocktaw 域将重置。
primary# ldm add-domain failure-policy=reset twizzle primary# ldm set-domain failure-policy=reset primary primary# ldm add-domain master=twizzle,primary chocktaw示例 17-2 修改域以分配主域
本示例说明如何使用 ldm set-domain 命令修改 orange 域,以将 primary 分配为主域。第二个命令使用 ldm set-domain 命令将 orange 和 primary 分配为 tangerine 域的主域。第三个命令列出有关所有这些域的信息。
primary# ldm set-domain master=primary orange primary# ldm set-domain master=orange,primary tangerine primary# ldm list -o domain NAME STATE FLAGS UTIL primary active -n-cv- 0.2% SOFTSTATE Solaris running HOSTID 0x83d8b31c CONTROL failure-policy=ignore DEPENDENCY master= ------------------------------------------------------------------------------ NAME STATE FLAGS UTIL orange bound ------ HOSTID 0x84fb28ef CONTROL failure-policy=ignore DEPENDENCY master=primary ------------------------------------------------------------------------------ NAME STATE FLAGS UTIL tangerine bound ------ HOSTID 0x84f948e9 CONTROL failure-policy=ignore DEPENDENCY master=orange,primary示例 17-3 显示可解析的域列表
以下显示了一个列有可解析输出的示例:
primary# ldm list -o domain -p
Logical Domains Manager 不允许创建会产生依赖关系循环的域关系。依赖关系循环是指两个或多个域之间的一种关系,其中,从属域可能会依赖于其本身或主域可能会依赖于其从属域之一。
Logical Domains Manager 在添加依赖关系之前确定是否存在依赖关系循环。Logical Domains Manager 自从属域开始沿着主阵列指定的所有路径进行搜索,直到到达路径的终点。沿途所发现的任何依赖关系循环都将被报告为错误。
以下示例说明了如何会产生依赖关系循环。第一个命令创建名为 mohawk 的从属域,该从属域将其主域指定为 primary。因此,在下图所示的依赖关系链中,mohawk 依赖于 primary。
图 17-1 单个域依赖关系
第二个命令创建名为 primary 的从属域,该从属域将其主域指定为 counter。因此,在下图所示的依赖关系链中,mohawk 依赖于 primary,而 primary 又依赖于 counter。
图 17-2 多个域依赖关系
第三个命令将尝试创建 counter 和 mohawk 域之间的依赖关系,这种依赖关系将产生下图所示的依赖关系循环。
图 17-3 域依赖关系循环
ldm set-domain 命令将失败,并显示以下错误消息:
# ldm add-domain master=primary mohawk # ldm set-domain master=counter primary # ldm set-domain master=mohawk counter Dependency cycle detected: LDom "counter" indicates "primary" as its master