九、crm配置资源
说明:上面我们说了那么多,最终目的是为了配置资源,下面们就来详细说明一下怎么配置资源,案例就是我们上一篇博文中的高可用的Web集群,在上一篇博文中(http://freeloda.blog.51cto.com/2033581/1266552)我们用haresource来配置资源的,现在我们来说说怎么用crm的图形界面来配置高可用的Web集群。
1.高可用Web集群中资源
VIP
httpd
filesystem
说明:高可用Web集群中有三个资源,分别是VIP、httpd服务、filesystem(NFS,用来存放Web文件的),下面我们就来配置一下这三个资源。
2.crm 增加资源
(1).新增资源
(2).新增group资源(注,VIP、httpd、filesystem都是Web高可用集群,所以都在一个组中,这里我们选择group)
(3).给组资源增加一个ID号
(4).新增VIP,给VIP取个ID号为webip,设置ip为192.168.1.200,大家还可以看到VIP属于Web Service组
(5).增加VIP参数,如子网掩码等
(6).设置VIP在哪个端口别名上
(7).设置VIP的子网掩码,可以直接输入多少位,也可以写全
(8).这是增加好的VIP属性,点击右下脚的“+Add”即可
(9).增加好的webip,现在还没有运行,我们可以右击使其运行
(10).启动webip
(11).这是已启动的webip运行在DC节点上
(12).继续增加httpd服务
(13).这里选择就是组资源了,这里选择native资源,意思是group资源中的native资源
(14).增加httpd服务
(15).已运行的httpd服务与webip,下面我们来测试一下
(16).直接访问http://192.168.1.200可以查看到httpd服务,基本的高可用Web集群已增加完成
(17).现在我们模拟故障,让node2节点成为从节点,看一下服务与IP能不能到node1节点上
(18).大家可以看到,当node2成为备节点时,node1成功的运行了这些资源
(19).我们再进行测试一下,大家可以看到,现在我们访问的是node1节点的资源,下面我们来再增加一下共享存储(NFS)
(20).增加NFS资源
(21).已增加好的NFS资源
(22).测试访问一下http://192.168.1.200,这次我们成功的访问到了,NFS共享存储的主目录文件
(23).现在我们再将node2设置为主节点,大家可以看到此时资源全部回到node2上
说明:此时资源能回到node2是因为我们地ha.cf主配置文件中设置了auto_failback on,高可用的Web集群的三个资源已全部增加完成,下面我们来说一说资源的约束(Constraints)在crm图形界面中是怎么增加的。
十、crm资源约束
1.资源说明
在高可用Web集群中有三个资源分别为:
VIP
httpd
nfs
2.增加资源
(1).新增资源
(2).增加native资源
(3).增加webip
(4).增加nfs与httpd资源
(5).启动所有资源
3.问题说明
大家从上面的资源可以看出,我们这次增加的是三个native资源,没有增加group资源,意思没有将vip、httpd、nfs这三个资源放在同一个组中,而增加了三个native资源。大家可以发现这三个资源不在同一个节点上,当我们增加好这三个资源时,启动webip资源时,运行在node2节点上,启动nfs资源时,运行在node1节点,再启动httpd节点时,又运行在node2节点上,可以看出在增加组资源时,我们增加的每个资源会平均分配到各个节点上,这不是我们想要的,我们希望这三个资源全部运行在同一节点上,但我们又没有增加group资源,我们该怎么办呢?这时就要用到,我们的资源约束了,下面我们就来配置一下资源约束。如下图,
从图中我们可以看出有三个资源约束,和我们上面讲解的一致,分别为位置约束、顺序约束、排列约束。
4.具体分析
现在我们有三个资源分别为webip(VIP)、httpd、nfs,它们怎么来定义约束呢?我们来简单分析一下:
(1).排列约束
http与nfs必须运行在同一节点上,nfs与webip也必须运行在同节点上
(2).顺序约束
nfs资源必须在httpd资源先启动
webip资源必须在httpd资源先启动
(3).位置约束
定义三个资源中的某个资源更倾向于某个节点
注:下面我们就来实现这些约束
5.crm资源约束设置
排列约束
(1).新建排列约束
(2).新建http与nfs约束,http必须与nfs在一起(详细说明请看,图中的Description)
(3).新建nfs与webip约束,nfs必须与webip在一起
(4).建立好的排列约束
顺序约束
(1).新建顺序约束
(2).nfs与httpd的顺序约束(详细说明请看,图中的Description)
(3).webip与httpd顺序约束(详细说明请看,图中的Description)
(4).webip与nfs顺序约束(详细说明请看,图中的Description)
(5).已建立好的顺序约束
位置约束
(1).新建位置约束
(2).点击右下脚的Add Expression增加参数(webip更加倾向于node2节点)
(3).增加好的位置参数
(4).已建立好的位置约束
6.全部约束汇总
说明:大家可以看到,建立好约束后,所有资源全部在node2节点上。
7.测试http://192.168.1.200(测试成功)
8.故障演示(设置DC为备份节点,再进行测试)
测试能否访问http://192.168.1.200(大家可以看到照样可以正常访问)
十一、crm资源配置总结
1.资源配置
经过上面的两种显示方法中我们可以看,使资源在同一节点,有两种方式,一种是先建立group组资源,后再建立native资源,使资源在同一节点中,但是有一点得注意,那就是资源的增加顺序,如Web高可用集群,增加的顺序应该是webip �C> nfs �C> httpd。另一种方法是直接增加native资源,后通过资源约束使其资源在同一节点上。
2.查看cib.xml文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
[root@node1 ~]
# cat /var/lib/heartbeat/crm/cib.xml
<cib generated=
"true"
admin_epoch=
"0"
have_quorum=
"true"
ignore_dtd=
"false"
num_peers=
"2"
cib_feature_revision=
"2.0"
crm_feature_set=
"2.0"
ccm_transition=
"4"
dc_uuid=
"4a0c6580-3e21-4523-a3bb-a921b3f487c0"
epoch=
"148"
num_updates=
"4"
cib-last-written=
"Sun Aug 11 12:57:38 2013"
>
<configuration>
<crm_config>
<cluster_property_set
id
=
"cib-bootstrap-options"
>
<attributes>
<nvpair
id
=
"cib-bootstrap-options-dc-version"
name=
"dc-version"
value=
"2.1.4-node: aa909246edb386137b986c5773344b98c6969999"
/>
<nvpair
id
=
"cib-bootstrap-options-last-lrm-refresh"
name=
"last-lrm-refresh"
value=
"1376133390"
/>
<nvpair
id
=
"cib-bootstrap-options-default-resource-stickiness"
name=
"default-resource-stickiness"
value=
"100"
/>
<
/attributes
>
<
/cluster_property_set
>
<
/crm_config
>
<nodes>
<node
uname
=
"node2.test.com"
type
=
"normal"
id
=
"4a0c6580-3e21-4523-a3bb-a921b3f487c0"
>
<instance_attributes
id
=
"nodes-4a0c6580-3e21-4523-a3bb-a921b3f487c0"
>
<attributes>
<nvpair name=
"standby"
id
=
"standby-4a0c6580-3e21-4523-a3bb-a921b3f487c0"
value=
"on"
/>
<
/attributes
>
<
/instance_attributes
>
<
/node
>
<node
id
=
"d1437638-90d9-4bbb-84fc-c897d8f8d6a2"
uname
=
"node1.test.com"
type
=
"normal"
>
<instance_attributes
id
=
"nodes-d1437638-90d9-4bbb-84fc-c897d8f8d6a2"
>
<attributes>
<nvpair
id
=
"standby-d1437638-90d9-4bbb-84fc-c897d8f8d6a2"
name=
"standby"
value=
"off"
/>
<
/attributes
>
<
/instance_attributes
>
<
/node
>
<
/nodes
>
<resources>
<primitive class=
"ocf"
type
=
"IPaddr"
provider=
"heartbeat"
id
=
"webip"
>
<meta_attributes
id
=
"webip_meta_attrs"
>
<attributes>
<nvpair name=
"target_role"
id
=
"webip_metaattr_target_role"
value=
"started"
/>
<
/attributes
>
<
/meta_attributes
>
<instance_attributes
id
=
"webip_instance_attrs"
>
<attributes>
<nvpair
id
=
"29478c51-f5fc-4ee2-a10e-e2c57eaad3bf"
name=
"ip"
value=
"192.168.1.200"
/>
<nvpair
id
=
"0dc9df0b-e48f-4f7a-aea1-af8a255a0327"
name=
"nic"
value=
"eth0"
/>
<nvpair
id
=
"11377455-9373-45c6-a1cf-8108bf5ae55f"
name=
"cidr_netmask"
value=
"24"
/>
<
/attributes
>
<
/instance_attributes
>
<
/primitive
>
<primitive class=
"ocf"
type
=
"Filesystem"
provider=
"heartbeat"
id
=
"nfs"
>
<meta_attributes
id
=
"nfs_meta_attrs"
>
<attributes>
<nvpair name=
"target_role"
id
=
"nfs_metaattr_target_role"
value=
"started"
/>
<
/attributes
>
<
/meta_attributes
>
<instance_attributes
id
=
"nfs_instance_attrs"
>
<attributes>
<nvpair
id
=
"671a8f51-0322-4fa5-98c3-b3bd1e39e4e9"
name=
"device"
value=
"192.168.1.208:/web"
/>
<nvpair
id
=
"0b066688-b39b-4b94-8542-7d26230f8319"
name=
"directory"
value=
"/var/www/html"
/>
<nvpair
id
=
"61c08608-9a53-4952-957b-1dad5f7c1cbd"
name=
"fstype"
value=
"nfs"
/>
<
/attributes
>
<
/instance_attributes
>
<
/primitive
>
<primitive class=
"lsb"
type
=
"httpd"
provider=
"heartbeat"
id
=
"httpd"
>
<meta_attributes
id
=
"httpd_meta_attrs"
>
<attributes>
<nvpair name=
"target_role"
id
=
"httpd_metaattr_target_role"
value=
"started"
/>
<
/attributes
>
<
/meta_attributes
>
<
/primitive
>
<
/resources
>
<constraints>
<rsc_colocation
id
=
"http_with_nfs"
from=
"httpd"
to=
"nfs"
score=
"INFINITY"
/>
<rsc_colocation
id
=
"nfs_with_webip"
from=
"nfs"
to=
"webip"
score=
"INFINITY"
/>
<rsc_order
id
=
"nfs_before_httpd"
to=
"nfs"
from=
"httpd"
/>
<rsc_order
id
=
"webip_before_httpd"
to=
"webip"
score=
"INFINITY"
from=
"httpd"
/>
<rsc_order
id
=
"webip_before_nfs"
to=
"webip"
score=
"INFINITY"
from=
"nfs"
/>
<rsc_location
id
=
"webip_on_node2"
rsc=
"webip"
>
<rule
id
=
"prefered_webip_on_node2"
score=
"INFINITY"
>
<expression attribute=
"#uname"
id
=
"ff054ec0-aeb3-4e4d-861b-00546d24f0a9"
operation=
"eq"
value=
"node2.test.com"
/>
<
/rule
>
<
/rsc_location
>
<
/constraints
>
<
/configuration
>
<
/cib
>
|
3.查看一下节点信息(可以看出所有资源都运行在node1上)