Linux 高可用(HA)集群之heartbeat基于crm进行资源管理详解(二)

九、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).新增资源

c2

(2).新增group资源(注,VIP、httpd、filesystem都是Web高可用集群,所以都在一个组中,这里我们选择group)

c1

(3).给组资源增加一个ID号

c3

(4).新增VIP,给VIP取个ID号为webip,设置ip为192.168.1.200,大家还可以看到VIP属于Web Service组

c4

(5).增加VIP参数,如子网掩码等

c5

(6).设置VIP在哪个端口别名上

c6

(7).设置VIP的子网掩码,可以直接输入多少位,也可以写全

c7

(8).这是增加好的VIP属性,点击右下脚的“+Add”即可

c8

(9).增加好的webip,现在还没有运行,我们可以右击使其运行

c9

(10).启动webip

c10

(11).这是已启动的webip运行在DC节点上

c11

(12).继续增加httpd服务

c12

(13).这里选择就是组资源了,这里选择native资源,意思是group资源中的native资源

c13

(14).增加httpd服务

c14

(15).已运行的httpd服务与webip,下面我们来测试一下

c15

(16).直接访问http://192.168.1.200可以查看到httpd服务,基本的高可用Web集群已增加完成

c16

(17).现在我们模拟故障,让node2节点成为从节点,看一下服务与IP能不能到node1节点上

c17

(18).大家可以看到,当node2成为备节点时,node1成功的运行了这些资源

c18

(19).我们再进行测试一下,大家可以看到,现在我们访问的是node1节点的资源,下面我们来再增加一下共享存储(NFS)

c19

(20).增加NFS资源

c20

(21).已增加好的NFS资源

c21

(22).测试访问一下http://192.168.1.200,这次我们成功的访问到了,NFS共享存储的主目录文件

c22

(23).现在我们再将node2设置为主节点,大家可以看到此时资源全部回到node2上

c23

说明:此时资源能回到node2是因为我们地ha.cf主配置文件中设置了auto_failback on,高可用的Web集群的三个资源已全部增加完成,下面我们来说一说资源的约束(Constraints)在crm图形界面中是怎么增加的。

十、crm资源约束

1.资源说明

在高可用Web集群中有三个资源分别为:

  • VIP

  • httpd

  • nfs

2.增加资源

(1).新增资源

u1

(2).增加native资源

u2

(3).增加webip

u3

(4).增加nfs与httpd资源

u4

(5).启动所有资源

u5

3.问题说明

大家从上面的资源可以看出,我们这次增加的是三个native资源,没有增加group资源,意思没有将vip、httpd、nfs这三个资源放在同一个组中,而增加了三个native资源。大家可以发现这三个资源不在同一个节点上,当我们增加好这三个资源时,启动webip资源时,运行在node2节点上,启动nfs资源时,运行在node1节点,再启动httpd节点时,又运行在node2节点上,可以看出在增加组资源时,我们增加的每个资源会平均分配到各个节点上,这不是我们想要的,我们希望这三个资源全部运行在同一节点上,但我们又没有增加group资源,我们该怎么办呢?这时就要用到,我们的资源约束了,下面我们就来配置一下资源约束。如下图,

u6

从图中我们可以看出有三个资源约束,和我们上面讲解的一致,分别为位置约束、顺序约束、排列约束。

4.具体分析

现在我们有三个资源分别为webip(VIP)、httpd、nfs,它们怎么来定义约束呢?我们来简单分析一下:

(1).排列约束

  • http与nfs必须运行在同一节点上,nfs与webip也必须运行在同节点上

(2).顺序约束

  • nfs资源必须在httpd资源先启动

  • webip资源必须在httpd资源先启动

(3).位置约束

  • 定义三个资源中的某个资源更倾向于某个节点

注:下面我们就来实现这些约束

5.crm资源约束设置

排列约束

(1).新建排列约束

u8

(2).新建http与nfs约束,http必须与nfs在一起(详细说明请看,图中的Description)

u9

(3).新建nfs与webip约束,nfs必须与webip在一起

u10

(4).建立好的排列约束

u18

顺序约束

(1).新建顺序约束

u11

(2).nfs与httpd的顺序约束(详细说明请看,图中的Description)

u12

(3).webip与httpd顺序约束(详细说明请看,图中的Description)

u13

(4).webip与nfs顺序约束(详细说明请看,图中的Description)

u14

(5).已建立好的顺序约束

u19

位置约束

(1).新建位置约束

u15

(2).点击右下脚的Add Expression增加参数(webip更加倾向于node2节点)

u16

(3).增加好的位置参数

u17

(4).已建立好的位置约束

u20

6.全部约束汇总

u7

说明:大家可以看到,建立好约束后,所有资源全部在node2节点上。

7.测试http://192.168.1.200(测试成功)

u21

8.故障演示(设置DC为备份节点,再进行测试)

u22

测试能否访问http://192.168.1.200(大家可以看到照样可以正常访问)

u21

十一、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上)

image



你可能感兴趣的:(linux)