corosync最初只是用来演示OpenAIS集群框架接口规范的一个应用,可以说corosync是OpenAIS的一部分,但后面的发展明显超越了官方最初的设想,越来越多的厂商尝试使用corosync作为集群解决方案。如Redhat的RHCS集群套件就是基于corosync实现。corosync只提供了message layer,而没有直接提供CRM,一般使用Pacemaker进行资源管理。

CRM中的几个基本概念

资源粘性

   资源粘性表示资源是否倾向于留在当前节点,如果为正整数,表示倾向,负数则会离开,-inf表示正无穷,inf表示正无穷。

资源类型

primitive(native):基本资源,原始资源

group:资源组

clone:克隆资源(可同时运行在多个节点上),要先定义为primitive后才能进行clone。主要包含STONITH和集群文件系统(cluster filesystem)

master/slave:主从资源,

RA类型:

Lsb:linux表中库,一般位于/etc/rc.d/init.d/目录下的支持start|stop|status等参数的服务脚本都是lsb

ocf:Open cluster Framework,开放集群架构

heartbeat:heartbaet V1版本

stonith:专为配置stonith设备而用



一、准备工作

  关于前期的准备工作,因为corosync前期不具备投票能力,因此在使用时,最好配置3个以上节点,最好为节点个数为积数个。如果想使用两个也可以,不过要先关闭不具有法定票数决策的策略。我们这里演示是两个节点的,这样可以看到有偶数个主机改怎样配置。

准备两台主机分别为:

  172.16.24.6 node1.edu.com node1

  172.16.24.7 node2.edu.com node2

要保持hosts文件的主机名和uname -n 显示的要一致。

[root@node1 ~]# cat /etc/hosts

172.16.24.6 node1.edu.com node1

172.16.24.7 node2.edu.com node2

[root@node1 ~]# uname -n

node1.edu.com


如果不一致可以通过以下命令修改:

[root@node1 ~]# vim /etc/sysconfig/network

NETWORKING=yes

HOSTNAME=node1.edu.com

[root@node1 ~]# vim /etc/hosts

[root@node1 ~]# cat /etc/hosts

172.16.24.6 node1.edu.com node1

172.16.24.7 node2.edu.com node2


双机要互信(让两台主机基于ssh不通过密钥相互信)


       [root@node1 ~]# ssh-keygen -t rsa -P ''

       [root@node1 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node2.edu.com

       第二个主机上执行相同的命令记提把主机名改成第一个主机的主机名

时间要同步

       [root@node1 ~]# ssh node2.edu.com 'date';date

       Sun Apr 20 10:21:25 CST 2014

       Sun Apr 20 10:21:25 CST 2014

       如果你的时间没有同步,请参照前面的NTP服务器配置。

二、安装corosync(两台主机都要安装)

      [root@node1 corosync]# yum install corosync -y

安装所生成的文件简单介绍:

/etc/corosync                          生成的配置文件目录

/etc/corosync/corosync.conf.example    样例配置文件,一会使用这个文件做为corosync的配置文件。

/etc/corosync/service.d

/etc/corosync/uidgid.d                 这两个.d结尾的文件可以做为配置文件的片段进行使用

/etc/rc.d/init.d/corosync              corosync的启动脚本

/etc/rc.d/init.d/corosync-notifyd      corosync的通知脚本(这个不用启动)

/usr/sbin/corosync-keygen              认证文件生成命令

三、配置corosync

[root@node1 ~]# cd /etc/corosync/

[root@node1 corosync]# cp corosync.conf.example corosync.conf

[root@node1 corosync]# vim corosync.conf


# Please read the corosync.conf.5 manual page

compatibility: whitetank                    是不是兼容0.8之前的版本的


totem {定义corosycn                         各个节点之间是怎么工作的

       version: 2                          corosync版本

       secauth: on                         定义安全功能是否打开

       threads: 0                          实现认证时的并行线程数

       interface {                         在哪个接口上发送心跳信息

               ringnumber: 0               环号码,避免心跳信息在网络中形成环状发送

               bindnetaddr: 172.16.0.0     绑定的网络的地址

               mcastaddr: 226.94.24.1      多播地址

               mcastport: 5405              多播端口

               ttl: 1

       }

}


logging {日志相关

       fileline: off

       to_stderr: no                        定义日志文件是否发往标准错误输出

       to_logfile: yes                      是不是送给日志文件

       to_syslog: no                        是不是送给syslog

       logfile: /var/log/cluster/corosync.log

       debug: off        

       timestamp: on                        是不是要记录日志时间戳

       logger_subsys {

               subsys: AMF

               debug: off

       }

}


amf {

       mode: disabled

}


四、安装pacemaker

[root@node1]# yum install pacemaker -y

安装生成的文件简介

[root@node1 ~]# rpm -ql pacemaker

/etc/rc.d/init.d/pacemaker                           启动服务程序(可以独立服务启动)

/usr/lib/ocf/resource.d/pacemaker/ClusterMon

/usr/lib/ocf/resource.d/pacemaker/Dummy

/usr/lib/ocf/resource.d/pacemaker/HealthCPU

/usr/lib/ocf/resource.d/pacemaker/HealthSMART

/usr/lib/ocf/resource.d/pacemaker/Stateful

/usr/lib/ocf/resource.d/pacemaker/SysInfo

/usr/lib/ocf/resource.d/pacemaker/SystemHealth

/usr/lib/ocf/resource.d/pacemaker/controld

/usr/lib/ocf/resource.d/pacemaker/ping

/usr/lib/ocf/resource.d/pacemaker/pingd

/usr/lib/ocf/resource.d/pacemaker/remote           所生成的资源代理

如果期望corosync启动时自动启动pacemaker则还得在corosync配置文件中加一些内容,具体如下

[root@node1 ~]# vim /etc/corosync/corosync.conf

service {

   ver:      0

   name:     pacemaker

}


aisexec{                          #定义以哪个用户的身份运行

   user:       root

   group:      root


}

五 、生成密钥文件

[root@node1 ~]#corosync-keygen

(注:这里可能要生成随机数,如果你的随机数不够用,那么你就可以拼命敲键盘了,完成之后会自动生成一个authkey文件)

六、安装crmsh(pacemaker的接口叫做crmsh,在pacemaker的新版本中已经被独立出来了。因此我们要想使用得自                                           己手动安装)

   所需安装包:crmsh-1.2.6-4.el6.x86_64.rpm

               pssh-2.3.1-2.el6.x86_64.rpm

[root@node1~]# yum install crmsh-1.2.6-4.el6.x86_64.rpm pssh-2.3.1-2.el6.x86_64.rpm -y

七、把生成的密钥文件和配置文件发送到对方节点一份,配置就宣告成功了。

  [root@node1~]# scp -p authkey corosync.conf node2.edu.com:/etc/corosync/

八、启动服务(两个节点都要启动)

[root@node1 ~]# service corosync start

Starting Corosync Cluster Engine (corosync):               [  OK  ]

使用crm命令查看当前集群运行状态

[root@node1 ~]# crm status

Last updated: Wed Apr 23 17:37:02 2014

Last change: Wed Apr 23 17:29:36 2014 via crmd on node1.edu.com

Stack: classic openais (with plugin)

Current DC: node1.edu.com - partition with quorum

Version: 1.1.10-14.el6-368c726

2 Nodes configured, 2 expected votes

0 Resources configured

Online: [ node1.edu.com node2.edu.com ]<===这就证明你的两个节点已经运行正常了。

使用corosycn+pacemaker定义一个web服务。


一、crm命令定义服务的基本选项简介:

   cib              manage shadow CIBs

   resource         resources management              定义一个资源(只是实现资源管理)

   configure        CRM cluster configuration        配置CRM集群(真正添加资源则是靠它来完成)

       - `primitive`        (主资源)

       - `monitor`           (定义监控)

       - `group`             (定义成组资源)

       - `clone`             (定义成克隆资源)

       - `ms`/`master` (master-slave)   (定义成为主从资源)

       - `location`           (定义位置约束)

       - `colocation`         (定义排列约束)

       - `order`              (定义顺序约束)

   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

定义资源所使用的命令

 在configure目录下,有一个primitive的选项来定义资源,任何一个资源都必须由资源代理来管理,所以要定义一个primitive的资源的时候要先指定其资源代理名称等相关信息:那么primitive的使用格式是什么样的呢,可以使用如下命令查看:

[root@node2 ~]# crm

crm(live)# configure

crm(live)configure# help primitive

   primitive <rsc> {[<class>:[<provider>:]]<type>|@<template>}

         <rsc>  :                                指定资源名称

         {[<class>:[<provider>:]]<type>:           哪个资源代理所提供的资源类型是什么

          [op op_type [<attribute>=<value>...] ...] 定义监控(默认情况下pacemaker是不对资源做监控的

          op_type :: start | stop | monitor

[root@node2 ~]# crm

crm(live)# ra

crm(live)ra# help

Available commands:


   classes          list classes and providers        可以查看有哪些类别

   list             list RA for a class (and provider) 想查看某个特定资源代理有哪些类别

   meta             show meta data for a RA            可以查看某个资源代理支持哪些参数

   providers        show providers for a RA and a class

   help             show help (help topics for list of topics)

   end              go back one level

   quit             exit the program


二、配置集群全局属性来禁用stonith(因为我们是两个节点配置集群服务,所以这一项必须得设置)

   corosync默认启用了stonith,而当前集群并没有相应的stonith设备,因此此默认配置目前尚不可用,这可以通过如下命令验正:

  [root@node2 ~]# crm_verify -L -V

  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

我们里可以通过如下命令先禁用stonith:

[root@node2 ~]# crm configure property stonith-enabled=false

使用如下命令查看当前的配置信息:

wKiom1NXltXBN4xyAADwbNyG79U967.jpg

由于我们只有两个节点,当一个节点down机了,因为不具有法定票数,所以一个节点down机了,资源也不会自动转移到时另一个节点上,为了避免这种情况发生,我们还得定义一个选项:

[root@node2 ~]# crm configure property no-quorum-policy=ignore

三、定义资源

1、定义一个ip资源

wKiom1NXpn7RcNk6AAHDfU8RmsQ461.jpg

2、定义一个web资源

wKioL1NXpxfRyh6ZAAGol-05FKs783.jpg

3、把webserver和webip定义成为一个组资源

wKioL1NXp7HjS71jAAHOsV8Sxtg483.jpg

4、删除一个组资源

wKiom1NXqVOyiOnWAAHVtSfFx_Y998.jpg

5、定义排列约束

wKiom1NXqoChtYHMAAG1mx7LAJ4606.jpg

6、定认顺序约束

wKioL1NXq0CgggauAAHdL71uzqk940.jpg

7、定义位置约束

crm(live)configure# location webip_on_node2 webip 200: node2.edu.com

crm(live)configure# commit

8、定义资源默认属性

crm(live)configure# rsc_defaults resource-stickiness=100

crm(live)configure# verify

crm(live)configure# commit

9、定义监控功能

crm(live)configure# monitor webserver 20s:15s

crm(live)configure# commit

10、清除资源

wKiom1NXrW_zvQiyAAF9cad9Gz8719.jpg

好了一个完整的资源从定义到删除及定义其它的属性就完成了,剩下功能还有很多,查看自带的文档写的相当的详细。