《OpenStack高可用集群(上册):原理与架构》—3.7.4 集群资源规则
3.7.4 集群资源规则
资源规则(Rule)使得Pacemaker集群资源具备了更强的动态调节能力,资源规则最常见的使用方式就是在集群资源运行时设置一个合理的粘性值(Resource-stickness),以防止资源回切到资源创建之初指定的高优先级节点上,即动态改变资源粘性值以防止资源意外回切。在大规模的集群资源配置中,资源规则的另一重要作用就是通过设置节点属性,将多个具有某一相同属性值的物理节点聚合到一个逻辑组中,然后通过资源的Location约束,利用节点组的这个共有节点属性值,将资源限制在该节点组上运行,即只允许此节点组中的节点运行该资源,在OpenStack高可用集群配置中,将会使用这种方式来限制不同的资源运行在不同的节点组上(控制节点组和计算节点组),大致的配置方式就是先为选定的节点设置某一自定义属性,以将其归纳到一个节点组,如下配置命令将计算节点和控制节点分别设置为不同的节点属性:
pcs property set --node compute1 osprole=compute
pcs property set --node compute1 osprole=compute
pcs property set --node controller1-vm osprole=controller
pcs property set --node controller2-vm osprole=controller
pcs property set --node controller3-vm osprole=controller
此处通过为节点分别设置不同的osprole属性值,将节点划分为两个集合,即计算节点组和控制节点组,将节点compute1和compte2归纳到compute节点组,节点controller1-vm、controller2-vm以及controller3-vm归纳到controller节点组,然后通过资源的Location约束将资源限制到不同的节点组中运行,配置命令如下:
pcs constraint location nova-compute-clone rule resource-discovery=exclusive score=0 osprole eq compute
pcs constraint location nova-api-clone rule resource-discovery=exclusive score=0 osprole eq controller
在上述命令中,当Rule表达式“osprole=compute”或者“osprole=controller”成立,即Rule为True,则执行对应资源的Location约束。此处,通过资源Location约束的“resource-discovery=exclusive”配置,资源nova-compute-clone只能运行在compute节点组中,而compute组中只有compute1和compute2节点,因此nova-compute-clone只能在compute1和compute2上运行,绝不会在controller1-vm、controller2-vm及controller3-vm上运行。同样,nova-api-clone资源只会在controller组中的三个节点上运行。绝不会在compute1和compute2节点上运行。
在Pacemaker集群中,每个资源的Rule都会包含一个或多个数字、时间及日期表达式,Rule最终的取值则取决于多个表达式布尔运算的结果。布尔运算可以是管理员指定的逻辑与或者逻辑或操作,此外,Rule的效果总是以Constraint的形式体现。因此,Rule通常在Constraint命令中配置,如下语句是配置资源Rule的语法格式:
pcs constraint rule add constraint_id [rule_type] [score=score ] [id=rule_id] expression|date_expression|date_spec options
如果忽略Score值,则使用默认值INFINITY,如果忽略ID,则自动从Constraint_id生成一个规则 ID,而Rule_type可以是字符表达式或者日期表达式。需要注意的是,在删除资源Rule时候,如果此Rule是Constraint中的最后一个Rule,则该Constraint将被删除,删除资源Rule语法如下:
pcs constraint rule remove rule_id
资源Rule的表达式主要分为节点属性表达式和时间/日期表达式,节点属性表达式由以下几个部分组成。
Value:用户提供的用于同节点属性值进行比较的值。
Attribute:节点属性变量名,其值即是Value要匹配的节点属性值。
Type:确定使用哪种类型的值匹配,允许的值包括字符串、整数、版本号(Version)。
Operation:操作符,确定用户提供的Value与节点Attribute的值如何匹配,主要包括以下几种操作符。
lt:如果Value小于Attribute的值,表达式为正True;
gt:如果Value大于Attribute的值,表达式为正True;
lte:如果Value小于等于Attribute的值,表达式为正True;
gte:如果Value大于等于Attribute的值,表达式为正True;
eq:如果Value等于Attribute的值,表达式为正True;
ne:如果Value不等于Attribute的值,表达式为正True;
defined:如果表达式中的Attribute在节点中有定义,则表达式为True;
not_defined:如果节点中没有定义表达式中的Attribute,则表达式为True。
要通过Rule的节点属性表达式来确定资源的Location,则通常的命令语法如下:
pcs resource constraint location resource_id rule [rule_id] [role=master|slave] [score=score expression]
此处的表达式可以是以下几种形式:
defined|not_defined attribute
attribute lt|gt|lte|gte|eq|ne value
date [start=start] [end=end] operation=gt|lt|in-range
date-spec date_spec_options
在OpenStack高可用集群配置中,使用最多的是第二种形式的表达式,例如要限制Nova-compute服务仅运行在计算节点上,则可以通过如下Rule和Location配置实现:
pcs constraint location nova-compute-clone rule\
resource-discovery=exclusive score=0 osprole eq compute
上述命令中,“osprole eq compute”即是Rule的表达式,其中osprole是节点的Attribute,Compute是用户指定的节点属性值,该表达式的操作符是等于符号(eq)。该命令语句中的规则表达式的意思就是,当节点的osprole值等于用户指定值(compute)的时候,则Rule表达式为True(计算节点属性中已经预先设置了osprole属性值为compute)。
- 点赞
- 收藏
- 关注作者
评论(0)