corosync+pacemaker

环境:
1)共有两个测试节点,分别为test.cmmobi-wh.com和hadoopm.cmmobi-wh.com,ip地址分别为172.16.5.202和172.16.5.158
2)集群服务为apache的httpd服务
3)提供web服务的地址为172.16.5.187
4)系统OEL6.3
1.准备工作
1)所有节点的主机各和对应的ip地址解析服务可以正常工作,且每个每点的主机名称需要跟"uname -n"的结果保持一致,因此,需要保证 两个节点上的/etc/hosts文件均为下面的内容:
172.16.5.202    test.cmmobi-wh.com    test
172.16.5.158    hadoopm.cmmobi-wh.com    hadoopm
为了使得重启系统后仍能保持如上的主机名称,还分别需要在各节点执行类似如下的命令:
test:
# sed -i 's@\(HOSTANAME=\).*@\1test.cmmobi-wh.com@' /etc/sysconfig/network
# hostname node1
hadoopm:
# sed -i 's@\(HOSTANAME=\).*@\1hadoopm.cmmobi-wh.com@' /etc/sysconfig/network
# hostname node2
2)设定两个节点可以基于密钥进行ssh通信:
hadoopm:
# ssh-keygen -t rsa
# ssh-copy-id -i ~/.ssh/id_rsa.pub root@test
test:
# ssh-keygen -t rsa
# ssh-copy-id -i ~/.ssh/id_rsa.pub root@hadoopm
2.安装配置yum源
# wget http://download.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
# rpm -ivh epel-release-5-4.noarch.rpm
# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

# wget -O /etc/yum.repos.d/pacemaker.repo http://clusterlabs.org/rpm/epel-5/clusterlabs.repo


3.安装corosync和pacemaker
# yum install -y corosync* pacemaker*

pacemaker1.1.8版本开始,crm sh发展成一个独立项目,pacemaker中不再提供,说明我们安装好pacemaker后,它不提供crm命令行模式的资源管理器,需要再独立安装crmsh
# wget http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-6/x86_64/pssh-2.3.1-3.2.x86_64.rpm
# wget http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-6/x86_64/ crmsh-1.2.6-5.1.x86_64.rpm
# yum localinstall --nogpgcheck -y pssh-2.3.1-3.2.x86_64.rpm crmsh-1.2.6-5.1.x86_64.rpm

4.配置corosync,(以下命令在hadoopm上执行)
# cd /etc/corosync
# cp corosync.conf.example corosync.conf
编辑corosync.conf
compatibility: whitetank
totem {
       version: 2        #协议版本
       secauth: on     #是否启用节点之间安全认证
       threads: 1      #启动的线程,与cpu核心数相等,0为自动管理
       interface {     #定义传递心跳的接口信息
               ringnumber: 0    #如果有多个接口,ringnumber不能相同
               bindnetaddr: 172.16.5.0 #指定接口所在的网络地址或者接口的ip地址
               mcastaddr: 226.94.1.1   #多播地址
               mcastport: 5405         #多播使用端口
               ttl: 1
       }
}
logging {       #定义日志相关信息
       fileline: off
       to_stderr: no   #是否把错误信息发送到标准输出
       to_logfile: yes #是否存储到logfile指定的日志文件
       to_syslog: no   #是否存储到系统日志
       logfile: /var/log/cluster/corosync.log  #日志文件路径
       debug: off      #是否打开调试信息
       timestamp: on   #日志信息是否记录时间戳
       logger_subsys { #用于提供日志子系统
               subsys: AMF
               debug: off
       }
}
amf {    #定义amf相关信息,如果要启用amf,需要安装openais和openais-libs
       mode: disabled  
}
添加如下内容:
service {    #自定义的服务
   ver:    0    #版本
   name:    pacemaker    #服务启动时自动启动pacemaker
   use_mgmtd: yes          #使用mgmtd进程
}
aisexec {
   user: root
   group:    root
}
并设定此配置文件中bindnetaddr后面的ip地址为网卡所在网络的网络地址,这里的两个节点在172.16.5.0网络,因此这里将其设定为 172.16.5.0 ;如下:
bindnetaddr:    172.16.5.0


生成节点间通信时乃至的认证密钥文件:
# corosync-keygen
注:corosync生成key文件会默认调用/dev/random随机数设备,一旦系统中断的IRQS的随机数不够用,将会产生大量的等待时间,因此,为了节约时间,我们在生成key之前讲random替换成urandom,以便节约时间。
将corosync.conf和authkey复制至test:
# scp -p corosync.conf authkey test:/etc/corosync/
分别为两个节点创建corosync生成的日志所在目录:
# mkdir /var/log/cluster
# ssh test 'mkdir /var/log/cluster'
5.尝试启动,(以下命令在node1上执行):
# ssh test 'service corosync start'
# service corosync start
1)查看corosync引擎是否正常启动:
# grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/cluster/corosync.log
Oct 23 17:48:10 corosync [MAIN  ] Corosync Cluster Engine ('1.4.1'): started and ready to provide service.
Oct 23 17:48:10 corosync [MAIN  ] Successfully read main configuration file '/etc/corosync/corosync.conf'.
2)查看初始化成员节点的通知是否正常发出
# grep  TOTEM /var/log/cluster/corosync.log
Oct 23 17:48:11 corosync [TOTEM ] Initializing transport (UDP/IP Multicast).
Oct 23 17:48:11 corosync [TOTEM ] Initializing transmit/receive security: libtomcrypt SOBER128/SHA1HMAC (mode 0).
Oct 23 17:48:11 corosync [TOTEM ] The network interface [172.16.5.158] is now up.
Oct 23 17:48:11 corosync [TOTEM ] Process pause detected for 713 ms, flushing membership messages.
Oct 23 17:48:11 corosync [TOTEM ] A processor joined or left the membership and a new membership was formed.

3)查看pacemaker是否正常启动
# grep pcmk_startup /var/log/cluster/corosync.log
Oct 23 17:48:11 corosync [pcmk  ] info: pcmk_startup: CRM: Initialized
Oct 23 17:48:11 corosync [pcmk  ] Logging: Initialized pcmk_startup
Oct 23 17:48:11 corosync [pcmk  ] info: pcmk_startup: Maximum core file size is: 18446744073709551615
Oct 23 17:48:11 corosync [pcmk  ] info: pcmk_startup: Service: 9
Oct 23 17:48:11 corosync [pcmk  ] info: pcmk_startup: Local hostname: hadoopm.cmmobi-wh.com

4)检查启动过程中是否有错误产生
# grep ERROR: /var/log/cluster/corosync.log | grep -v unpack_resources
Oct 23 17:48:11 corosync [pcmk  ] ERROR: process_ais_conf: You have configured a cluster using the Pacemaker plugin for Corosync. The plugin is not supported in this environment and will be removed very soon.
Oct 23 17:48:11 corosync [pcmk  ] ERROR: process_ais_conf:  Please see Chapter 8 of 'Clusters from Scratch' (http://www.clusterlabs.org/doc) for details on using Pacemaker with CMAN
5)查看集群的运行状态
# crm_mon
Last updated: Wed Oct 23 18:18:22 2013
Last change: Wed Oct 23 17:48:26 2013 via crmd on test.cmmobi-wh.com
Stack: classic openais (with plugin)
Current DC: test.cmmobi-wh.com - partition with quorum
Version: 1.1.8-7.el6-394e906
2 Nodes configured, 2 expected votes
0 Resources configured.
Online: [ hadoopm.cmmobi-wh.com test.cmmobi-wh.com ]
6.配置集群的工作属性,禁用stonith
corosync默认启用了stonith,当当前集群没有相应的设备时,默认配置将不可用,可用一下命令验证:
# crm_verify -VL
No configuration source specified.  Use --help for usage information.
[root@test ~]# crm_verify -VL
  error: unpack_resources: Resource start-up disabled since no STONITH resources have been defined
  error: unpack_resources: Either configure some or disable STONITH with the stonith-enabled option
  error: unpack_resources: NOTE: Clusters with shared data need STONITH to ensure data integrity
Errors found during check: config not valid
 -V may provide more details
禁用stonith:
# crm configure proprety stonith-enable=false
查看配置信息:
# crm configure show
node hadoopm.cmmobi-wh.com
node test.cmmobi-wh.com
property $id="cib-bootstrap-options" \
dc-version="1.1.8-7.el6-394e906" \
cluster-infrastructure="classic openais (with plugin)" \
expected-quorum-votes="2" \
stonith-enabled="false"
可以看出stonith已经被禁用
7.为集群添加集群资源
corosync支持lsb , ocf/heartbeat , ocf/pacemaker , stonith等类型的资源代理,较常用的为lsb和ocf两类,stonith类专为配置stonith设备而用。可以通过以下命令查看当前集群支持的资源代理类型:
# crm ra classes
lsb
ocf / heartbeat pacemaker redhat
service
stonith
如果想查看某种类别下的所有资源代理的列表,可以使用如下命令实现:
# crm ra list lsb
# crm ra list ocf heartbeat
# crm ria list ocf pacemaker
#crm ria info ocf:heartbeat:IPaddr
8.为web集群创建一个ip地址资源,以在通知集群提供web服务时使用:
语法:
primitive <rsc> [<class>:[<provider>:]]<type>
               [params attr_list]
               [operations id_spec]
                   [op op_type [<attribute>=<value> ...] ...]
op_type :: start | stop | monitor
例:
primitive apcfence stonith:apcsmart \
               params ttydev=/dev/ttyS0 hostlist="test hadoopm" \
               op start timeout=60s \
               op monitor interval=30m timeout=60s
应用:
# crm configure primitive WebIP ocf:heartbeat:IPaddr params ip=172.16.5.187
注:当使用无类的ip地址时,需要指定cidr_netmask,否则通过crm configure status查看资源状态时,会报如下错误:
Failed actions:
   WebIP_start_0 (node=test.cmmobi-wh.com, call=14, rc=1, status=complete): unknown error
   WebIP_start_0 (node=hadoopm.cmmobi-wh.com, call=14, rc=1, status=complete): unknown error
另,如果有多块网卡,请指定nic。如下:
# crm configure primitive WebIP ocf:heartbeat:IPaddr params ip=172.16.5.187 nic=eth0 cidr_netmask=24
通过如下命令查看资源启动状况:
# crm status
Last updated: Fri Oct 25 11:58:55 2013
Last change: Fri Oct 25 11:49:12 2013 via cibadmin on hadoopm.cmmobi-wh.com
Stack: classic openais (with plugin)
Current DC: test.cmmobi-wh.com - partition with quorum
Version: 1.1.8-7.el6-394e906
2 Nodes configured, 2 expected votes
1 Resources configured.
Online: [ hadoopm.cmmobi-wh.com test.cmmobi-wh.com ]
WebIP(ocf::heartbeat:IPaddr):Started hadoopm.cmmobi-wh.com
查看ip资源是否已启动:
# ip a
eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
   link/ether 00:50:56:9c:00:02 brd ff:ff:ff:ff:ff:ff
   inet 172.16.5.158/24 brd 172.16.5.255 scope global eth0
   inet 172.16.5.187/24 brd 172.16.5.255 scope global secondary eth0:0
   inet6 fe80::250:56ff:fe9c:2/64 scope link
      valid_lft forever preferred_lft forever

而后,我们在test上通过如下命令停止hadoopm上的corosync服务
# ssh hadoopm 'service corosync stop'
查看集群状态:
# crm status
Last updated: Fri Oct 25 19:08:37 2013
Last change: Fri Oct 25 19:05:56 2013 via crm_attribute on hadoopm.cmmobi-wh.com
Stack: classic openais (with plugin)
Current DC: test.cmmobi-wh.com - partition WITHOUT quorum
Version: 1.1.8-7.el6-394e906
2 Nodes configured, 2 expected votes
1 Resources configured.
Online: [ test.cmmobi-wh.com ]
OFFLINE: [ hadoopm.cmmobi-wh.com ]
上面的信息显示hadoopm已经离线,但资源WebIP却没能在test上启动,这是因为此时的集群状态为"without quorum",即已经失去了quorum,此时集群服务本身已经不满足正常运行的条件,这对于只有两个节点的集群来讲,是不合理的。因此,我们可以通过如下的命令来修改忽略quorum不能满足的集群状态检查:
# crm configure property no-quorum-policy=ignore
片刻之后,集群就会在目前仍在运行中的test节点上启动此资源了,如下所示:
# crm status
Last updated: Fri Oct 25 19:16:31 2013
Last change: Fri Oct 25 19:16:10 2013 via cibadmin on test.cmmobi-wh.com
Stack: classic openais (with plugin)
Current DC: test.cmmobi-wh.com - partition WITHOUT quorum
Version: 1.1.8-7.el6-394e906
2 Nodes configured, 2 expected votes
1 Resources configured.
Online: [ test.cmmobi-wh.com ]
OFFLINE: [ hadoopm.cmmobi-wh.com ]
WebIP(ocf::heartbeat:IPaddr):Started test.cmmobi-wh.com
验证完成后,我们正常启动hadoopm:
# ssh hadoopm 'service corosync start'
正常启动hadoopm后,集群资源WebIP很可能从test转移到hadoopm上。资源间的这种在每个节点间的来回流动会造成那段时间内其无法正常访问,所以,我们有时候需要在资源因为故障转移到其他节点后,即使原来的节点恢复正常,也禁止资源再次流转回来。这可以定义资源的粘性(stickiness)来实现,在创建资源时或在创建资源后,都可以指定资源粘性。
资源粘性值范围及其作用:
0:这是默认选项。资源放置在系统中的最适合位置。这意味着当负载能力较好或较差的节点变得可用时才转移资源。此选项的作用基本等同于自动故障恢复,只是资源可能会转移到非之前活动的节点上。
大于0:资源更愿意留在当前位置,但是如果有更合适的节点可用时会移动。值越高表示资源越愿意留在当前位置。
小于0:资源更愿意移离当前位置。绝对值越高表示资源越愿意离开当前位置。
INFINITY:如果不是因为节点不适合运行资源(节点关机、节点待机、达到migration-threshold或配置更改)而强制资源转移,资源总是留在当前位置
-INFINITY:资源总是移离当前位置。
可以通过以下方式为资源指定默认黏性值:
# crm configure rsc_defaults resource-stickiness=100
9.结合上面已经配置好的ip地址资源,将北集群配置成为一个active/passive模型的web(httpd)服务模型。
为了将此集群启用为web(httpd)服务集群,我们得先在各节点上安装httpd,并配置其能在本地各自提供一个测试页面。
test:
# yum install -y httpd
# echo "test.cmmobi-wh.com" > /var/www/html/index.html
hadoopm:
# yum install -y httpd
# echo "hadoopm.cmmobi-wh.com" > /var/www/html/index.html
接下来将此httpd服务添加为集群资源。将httpd添加为集群资源有两处代理可用:lsb和ocf:heartbeat,在这里使用lsb类型:
首先使用如下命令查看lsb类型的httpd资源的语法格式:
# crm ra info lsb:httpd
spacer.gif 160729945.png
新建资源WebSite:
# crm configure primitive WebSite lsb:httpd
查看配置文件中生成的定义:
spacer.gif 160850602.png
查看资源的启用状态:
# crm status
spacer.gif 160922457.png
WebIP和WebSite有可能会分别运行于两个节点上,这对于通过此Ip来提供web服务的应用来说是不成立的,即此两者资源必须同时运行在某节点上。
pacemaker提供两种方法解决以上问题:
第一种方法是定义组资源,将WebIP和WebSite两个资源放入同一个资源组:
# crm configure group web WebIP WebSite
停止一个资源:
# crm resouce stop web
删除资源组:
# crm configure delete web
第二种方法,使用资源约束:
资源约束用以指定在哪些集群节点上运行资源,以何种顺序装载资源,以及特定资源依赖哪些其它资源。pacemaker提供了三种资源约束的方法:
1)Resource Location(资源位置):定义资源可以、不可以或尽可能在哪些节点上运行。
2)Resource Colocation(资源排列):排列约束用以定义集群资源可以或不可以在某个节点上同时运行。
3)Resource Order(资源顺序):顺序约束定义集群资源在节点上启动的顺序。
定义约束时,还需要指定分数。各种分数是集群工作方式的重要组成部分。其实从迁移资源到决定在已降级集群中停止哪些资源的整举止过程是通过以某种方式修改分数来实现的。分数按每个资源来计算,资源分数为负的任何节点都无法运行该资源。在计算出资源分数后,集群选择分数最高的节点。INFINITY(无穷大)目前定义为1,000,000。加减无穷大遵循以下3个基本规则:
1)任何值+无穷大= 无穷大
2)任何值-无穷大= -无穷大
3)无穷大-无穷大= -无穷大
定义资源约束时,也可以指定每个约束的分数。分数表示指派给此资源约束的值。分数较高的约束先应用,分数较低的给后应用。通过使用不同的分数为既定资源创建更多位置约束,可以指定资源要故障转移至的目标节点的顺序。
因此,对于前述的WebIP和WebSite可能会运行于不同节点的问题,可以通过以下命令来解决:
# crm configure colocation website-with-ip inf: WebSite WebIP
接着,还得确保WebSite在某节点启动之前得先启动WebIP,这可以使用如下命令实现:
# crm configure order httpd-after-ip mandatory: WebIP WebSite
此外,由于HA集群本身并不强制每个节点的性能相同或相近,所以,某些时候我们可能希望在正常服务时总能在某个性能较强的节点上运行,这可以通过位置约束来实现:
# crm configure location prefer-test WebSite rule 200: test
这条命令实现 了将WebSite约束在test上,且指定其200


你可能感兴趣的:(crm,pacemaker,corosync)