linux学习记录
分类:
2010-08-25 15:12:44
配置好所有资源只是完成了该作业的一部分。即便群集熟悉所有必需资源,它可能还无法进行正确处理。资源约束允许您指定在哪些群集节点上运行资源、以何种顺序装载资源,以及特定资源依赖于哪些其他资源。
HA提供了如下三种不同的约束:
Resource Location(资源位置):位置约束定义资源可以、不可以或首选在哪些节点上运行。
Resource Collocation(资源排列):排列约束告诉群集资源可以或不可以在某个节点上一起运行。
Resource Order(资源顺序):排序约束定义操作的顺序。
定义约束时,还需要指定分数。各种分数是群集工作方式的重要组成部分。其实,从迁移资源到决定在已降级群集中停止哪些资源的整个过程是通过以某种方式操纵分数来实现的。分数按每个资源来计算,资源分数为负的任何节点都无法运行该资源。在计算出资源分数后,群集选择分数最高的节点。INFINITY(无穷大)目前定义为 1,000,000。加减无穷大遵循以下 3 个基本规则:
• 任何值 + INFINITY = INFINITY
• 任何值 - INFINITY = -INFINITY
• INFINITY - INFINITY = -INFINITY
定义资源约束时,也可以指定每个约束的分数。分数表示您指派给此资源约束的值。分数较高的约束先应用,分数较低的约束后应用。通过使用不同的分数为既定资源创建更多位置约束,可以指定资源要故障转移至的目标节点的顺序。
有两种方法可以指定资源的运行节点。一种方法是默认可以运行在任何位置,在不允许运行的节点上设置location限制条件。另一种方法是设置集群非对称,使所有资源默认不允许运行在任何节点上,然后为其有选择地授权允许运行的节点。
选项 |
描述 |
id |
约束的唯一名字 |
rsc |
资源名 |
node |
节点名 |
score |
正数说明资源可运行在该节点上,负数说明资源不可以运行在该节点上。值+/-INFINITY 则由“可以”变为must。 |
首先建立一个opt-in集群,使用如下命令默认阻止资源运行在所有节点上:
crm_attribute --attr-name symmetric-cluster --attr-value false
然后授权节点。以下代码表示web服务器选择sles-1,数据库选择sles-2,并且如果他们优先选择的节点失败两者都选择sles-3继续运行。
首先建立一个opt-out集群,使用如下命令默认允许资源运行在所有节点上:
crm_attribute --attr-name symmetric-cluster --attr-value true
然后禁用节点。如下代码与上面opt-in的配置含义相同。
选择opt-in或opt-out集群基于你个人的爱好以及集群的要求。如果大多数资源可以运行在多数节点上,那么选择opt-out配置则会更简单。反之,如果多数资源只允许运行在一小部分节点上,那么使用opt-in进行配置会更简单。
如果某资源在两个节点上的得分相同,那么集群将从中随机选择一个来运行该资源。
在上面的例子中,假设没有其它限制条件并且集群正常工作,Webserver将运行在sles-1上,Database将运行在sles-2上。Webserver是基于节点名来选择的,而Database是为了均衡集群资源而选择的。当然也可能会有其它的因素导致更复杂的配置。
指定资源启动顺序的方法是创建rsc_order限制条件。
域 |
描述 |
id |
限制条件的唯一名字 |
first |
必须在then资源之前启动的资源名字 |
then |
可以在first资源启动之后启动的资源名字。 |
score |
如果大于0则为强制约束,否则仅为建议,默认值为INFINITY |
symmetrical |
如果为true,则采用倒序来停止资源,默认值为true |
如果要求first资源不启动时then资源无法运行,则应使用强制约束。要指定一个约束为强制约束,使用大于0的scores即可。这将保证first资源改变状态时then资源会起作用。
•如果正在运行的first资源停止了,则then资源也应停止(如果正在运行)。
•如果停止的first资源无法启动,则then资源也将停止(如果正在运行)。
•当then资源正在运行的时候,如果first资源重新启动,则then资源将停止并重新启动。
反之,如果限制条件的score="0",则该限制条件是可选的,仅当两资源都启动或停止时才有效。First资源的任何状态改变对then资源都没有任何影响。
如果一个资源的位置取决于另一个资源的位置,我们称之为colocation。如果不知道B的运行情况,则不能确定A的运行位置。因此如果要创建colocation限制条件,决定A跟随B还是B跟随A运行是很重要的。
另一个需要考虑的情况是,假设A是跟随B运行的,那么集群为B选择运行节点的时候也应考虑A的性能。
选项 |
描述 |
id |
限制条件的唯一名字 |
rsc |
colocation 的源资源。如果无法满足限制条件,则集群可以决定根本不允许资源运行。 |
with-rsc |
colocation 的目标。集群将先决定该资源的位置然后再决定rsc域中的资源位置。 |
score |
正值表示资源可以运行在同一节点上。负值表示资源不可以运行在同一节点上。值+/- INFINITY 则由 should 变为 must。该分数与其他系数结合使用可以决定放置节点的位置。 |
Table 6.3. Properties of a Collocation Constraint
当约束score 为+INFINITY 或 –INFINITY时为强制定位。此时,如果约束无法满足则不允许rsc资源运行。score=INFINITY包含了with-rsc资源不启动的情况。如果要求resource1总是与resource2运行在同一台主机上,则可以添加如下约束:
注意,由于使用了INFINITY,如果由于某种原因resource2无法在集群节点上运行,则resource1也不允许运行。
相反,如果resource1不能与resource2运行在同一主机上,则应使用score="-INFINITY":
通过指定 –INFINTY进行了约束绑定。因此,如果仅可以运行的主机正在运行resource2,则resource1将无法运行。
如果说强制定位是“一定要”或“一定不要”,那么建议定位就是“我更喜欢”的选择。对于大于-INFINITY小于INFINITY的得分约束,集群将试图考虑你的建议,但是如果必须要停止某些集群资源时也有可能忽略此约束。
就像在生活中,如果有足够多的人喜欢某件事,它就可能成为强制性的,建议性的colocation限制条件与其它强制性的配置结合在一起使用的话也会成为强制性的。