上接Corosync+Pacemaker+MySQL+DRBD(一)http://9124573.blog.51cto.com/9114573/1768076

   ⑶布署corosync+pacemaker

    ◆安装软件包

     pacemaker依赖corosync,安装pacemaker包会连带安装corosync包

       yum -y install pacemaker

[root@node2 ~]# yum -y install pacemaker;ssh root@node1 'yum -y install pacemaker'
...
Dependency Installed:
  clusterlib.x86_64 0:3.0.12.1-73.el6_7.2  corosync.x86_64 0:1.4.7-2.el6
  corosynclib.x86_64 0:1.4.7-2.el6      libibverbs.x86_64 0:1.1.8-4.el6
...
[root@node2 ~]# rpm -ql corosync
/etc/corosync
/etc/corosync/corosync.conf.example   #配置文件模板
/etc/corosync/corosync.conf.example.udpu
/etc/corosync/service.d
/etc/corosync/uidgid.d
/etc/dbus-1/system.d/corosync-signals.conf
/etc/rc.d/init.d/corosync   #服务脚本
/etc/rc.d/init.d/corosync-notifyd
/etc/sysconfig/corosync-notifyd
/usr/bin/corosync-blackbox
/usr/libexec/lcrso
/usr/libexec/lcrso/coroparse.lcrso
...
/usr/sbin/corosync
/usr/sbin/corosync-cfgtool
/usr/sbin/corosync-cpgtool
/usr/sbin/corosync-fplay
/usr/sbin/corosync-keygen   #生成节点间通信时用到的认证密钥文件,默认从/dev/random读随机数
/usr/sbin/corosync-notifyd
/usr/sbin/corosync-objctl
/usr/sbin/corosync-pload
/usr/sbin/corosync-quorumtool
/usr/share/doc/corosync-1.4.7
...
/var/lib/corosync
/var/log/cluster   #日志文件目录

    ◆安装crmsh

       RHEL自6.4起不再提供集群的命令行配置工具crmsh,默认提供的是pcs;本例中使用crmsh,crmsh依赖于pssh,因此需要一并下载安装

[root@node2 ~]# yum -y install pssh-2.3.1-2.el6.x86_64.rpm crmsh-1.2.6-4.el6.x86_64.rpm
...
Installed:
  crmsh.x86_64 0:1.2.6-4.el6                            pssh.x86_64 0:2.3.1-2.el6
  
Dependency Installed:
  python-dateutil.noarch 0:1.4.1-6.el6                  redhat-rpm-config.noarch 0:9.0.3-44.el6.centos

Complete!

    ◆配置corosync

       cd /etc/corosync/
       cp corosync.conf.example corosync.conf
       vim corosync.conf,在其中加入:

         service {     #以插件化方式调用pacemaker

            ver: 0

            name: pacemaker

            # use_mgmtd: yes

          }         

[root@node2 ~]# cd /etc/corosync/
[root@node2 corosync]# cp corosync.conf.example corosync.conf
[root@node2 corosync]# vim corosync.conf

# Please read the corosync.conf.5 manual page
compatibility: whitetank

totem {
        version: 2
        secauth: on   #是否进行消息认证;若启用,使用corosync-keygen生成密钥文件
        threads: 0

        interface {
 
                ringnumber: 0                
                bindnetaddr: 192.168.30.0   #接口绑定的网络地址                
                mcastaddr: 239.255.10.1   #传递心跳信息所使用的组播地址               
                mcastport: 5405               
                ttl: 1
        }
}

logging {
        fileline: off
        to_stderr: no
        to_logfile: yes
        logfile: /var/log/cluster/corosync.log   #日志路径
        to_syslog: no
        debug: off
        timestamp: on   #是否记录时间戳;当日志量很大时关闭该项可提高性能
        logger_subsys {
                subsys: AMF
                debug: off
        }
}
#下面这段表示以插件的方式调用pacemaker
service {
  ver:  0
  name: pacemaker
  # use_mgmtd: yes
}

    ◆生成节点间通信时用到的认证密钥文件

       corosync-keygen

[root@node2 corosync]# corosync-keygen
Corosync Cluster Engine Authentication key generator.
Gathering 1024 bits for key from /dev/random.
Press keys on your keyboard to generate entropy.
Writing corosync key to /etc/corosync/authkey.
[root@node2 corosync]# ll authkey 
-r-------- 1 root root 128 Apr 27 23:31 authkey

    ◆将配置文件和密钥文件同步到对方节点

       scp -p authkey corosync.conf root@node1:/etc/corosync/

[root@node2 corosync]# scp -p authkey corosync.conf root@node1:/etc/corosync/
authkey                                                                          100%  128     0.1KB/s   00:00    
corosync.conf                                                                    100% 2723     2.7KB/s   00:00

    ◆启动corosync

       service corosync start

     查看corosync引擎是否正常启动,是否正常读取配置文件:

       grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/cluster/corosync.log

     查看初始化成员节点通知是否正常发出:

       grep TOTEM /var/log/cluster/corosync.log

     检查启动过程中是否有错误产生:

       grep ERROR: /var/log/cluster/corosync.log | grep -v unpack_resources

     查看pacemaker是否正常启动:

       grep pcmk_startup /var/log/cluster/corosync.log

[root@node2 ~]# service corosync start;ssh root@node1 'service corosync start'
Starting Corosync Cluster Engine (corosync):               [  OK  ]
Starting Corosync Cluster Engine (corosync): [  OK  ]

[root@node2 ~]# grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/cluster/corosync.log
Apr 28 02:03:08 corosync [MAIN  ] Corosync Cluster Engine ('1.4.7'): started and ready to provide service.
Apr 28 02:03:08 corosync [MAIN  ] Successfully read main configuration file '/etc/corosync/corosync.conf'.

[root@node2 ~]# grep TOTEM /var/log/cluster/corosync.log
Apr 28 02:03:08 corosync [TOTEM ] Initializing transport (UDP/IP Multicast).
Apr 28 02:03:08 corosync [TOTEM ] Initializing transmit/receive security: libtomcrypt SOBER128/SHA1HMAC (mode 0).
Apr 28 02:03:08 corosync [TOTEM ] The network interface [192.168.30.20] is now up.
Apr 28 02:03:08 corosync [TOTEM ] A processor joined or left the membership and a new membership was formed.
Apr 28 02:03:11 corosync [TOTEM ] A processor joined or left the membership and a new membership was formed.
Apr 28 02:04:10 corosync [TOTEM ] A processor joined or left the membership and a new membership was formed.

[root@node2 ~]# grep ERROR: /var/log/cluster/corosync.log | grep -v unpack_resources   #以下错误提示可忽略
Apr 28 02:03:08 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.
Apr 28 02:03:08 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
Apr 28 02:03:13 corosync [pcmk  ] ERROR: pcmk_wait_dispatch: Child process cib terminated with signal 11 (pid=7953, core=true)
...

[root@node2 ~]# grep pcmk_startup /var/log/cluster/corosync.log
Apr 28 02:03:08 corosync [pcmk  ] info: pcmk_startup: CRM: Initialized
Apr 28 02:03:08 corosync [pcmk  ] Logging: Initialized pcmk_startup
Apr 28 02:03:08 corosync [pcmk  ] info: pcmk_startup: Maximum core file size is: 18446744073709551615
Apr 28 02:03:08 corosync [pcmk  ] info: pcmk_startup: Service: 9
Apr 28 02:03:08 corosync [pcmk  ] info: pcmk_startup: Local hostname: node2

    ◆配置接口crmsh的启动命令是crm,其使用方式有两种:

       命令行模式,例如 # crm ra list ocf

       交互式模式,例如:          

         # crm

         crm(live)# ra

         crm(live)ra# list ocf

         或者:

         # crm

         crm(live)# ra list ocf     

     help:查看帮助信息

     end/cd:切回上一级

     exit/quit:退出程序

     常用子命令

       ①status: 查看集群状态

       ②resource

          start, stop, restart

          promote/demote:提升/降级一个主从资源

          cleanup:清理资源状态

          migrate:将资源迁移到另外一个节点上          

       ③configure

          primitive, group, clone, ms/master(主从资源)

           具体用法可使用help命令查看,如crm(live)configure# help primitive     

           示例:

             primitive webstore ocf:Filesystem params device=172.16.100.6:/web/htdocs directory=/var/www/html fstype=nfs op monitor interval=20s timeout=30s

             group webservice webip webserver 

          location, collocation, order

            示例:

              colocation webserver_with_webip inf: webserver webip

              order webip_before_webserver mandatory: webip webserver  #mandatory也可换成inf

              location webip_on_node2 webip rule inf: #uname eq node2

              或location webip_on_node2 webip inf: node2

          monitor   #pacemaker具有监控资源的功能

            monitor [:] [:]

            例如:monitor webip 30s:20s

          very:CIB语法验证

          commit:将更改后的信息提交写入CIB(集群信息库)

            注意:配置完后要记得very和commit         

          show:显示CIB对象

          edit:直接以vim模式编辑CIB对象

          refresh:重新读取CIB信息

          delete:删除CIB对象

          erase:擦除所有配置

       ④node

          standby:让节点离线,强制其成为备节点

          online:让节点重新上线

          fence:隔离节点

          clearstate:清理节点状态信息

          delete:删除一个节点           

       ⑤ra

          classes:查看资源代理有哪些种类

            有四种:lsb, ocf, service, stonith 

          list []:列出资源代理

            例如:

              list ocf  #列出ocf类型的资源代理

              list ocf linbit  #列出ocf类型中,由linbit提供的资源代理

          meta/info [:[:]]  #看一个资源代理的元数据,主要是查看其可用参数

            例如:info ocf:linbit:drbd

              或 info ocf:drbd

              或 info drbd

          providers []:显示指定资源代理的提供者

            例如:providers apache

crm(live)# help   #查看有哪些子命令或获取帮助信息

This is crm shell, a Pacemaker command line interface.

Available commands:

	cib              manage shadow CIBs
	resource         resources management    #资源管理
	configure        CRM cluster configuration   #集群配置
	node             nodes management   #节点管理
	options          user preferences
	history          CRM cluster history
	site             Geo-cluster support
	ra               resource agents information center   #资源代理信息
	status           show cluster status   #显示集群状态
	help,?           show help (help topics for list of topics)
	end,cd,up        go back one level
	quit,bye,exit    exit the program   #退出
crm(live)# status   #查看集群状态
Last updated: Fri Apr 29 00:19:36 2016
Last change: Thu Apr 28 22:41:38 2016
Stack: classic openais (with plugin)
Current DC: node2 - partition with quorum
Version: 1.1.11-97629de
2 Nodes configured, 2 expected votes
0 Resources configured


Online: [ node1 node2 ]

crm(live)# configure
crm(live)configure# help
...
Commands for resources are:   #可配置的资源类型

- `primitive`
- `monitor`
- `group`
- `clone`
- `ms`/`master` (master-slave)

In order to streamline large configurations, it is possible to
define a template which can later be referenced in primitives:

- `rsc_template`

In that case the primitive inherits all attributes defined in the
template.

There are three types of constraints:   #可定义的约束

- `location`
- `colocation`
- `order`
...

crm(live)configure# help primitive   #查看使用帮助
...
Usage:
...............
        primitive  {[:[:]]|@