Corosync+openais+pacemakter实现高可用性集群

Corosync简介:

 Coreosync在传递信息的时候可以通过一个简单的配置文件来定义信息传递的方式和协议等。它是一个新兴的软件,2008年推出,但其实它并不是一个真正意义上的新软件,在2002年的时候有一个项目Openais  , 它由于过大,分裂为两个子项目,其中可以实现HA心跳信息传输的功能就是Corosync ,它的代码60%左右来源于Openais. Corosync可以提供一个完整的HA功能,但是要实现更多,更复杂的功能,那就需要使用Openais了。Corosync是未来的发展方向。在以后的新项目里,一般采用Corosync,而hb_gui可以提供很好的HA管理功能,可以实现图形化的管理。另外相关的图形化有RHCS的套件luci+ricci.

操作步骤:

1.基本的配置(两个节点上都要做的)。

[root@localhost ~]# vim /etc/sysconfig/network(改主机名)

[root@localhost ~]# hostname hua1.a.com

[root@localhost ~]# vim /etc/hosts(改hosts文件

 192.168.1.100    hua1.a.com     hua1

 192.168.1.200  hua2.a.com    hua2

[root@localhost ~]# scp /etc/hosts hua1:/etc/

2.实现ssh的无密钥传输(两个节点上都要做)

[root@localhost ~]# ssh-keygen -t rsa (生成密钥)

[root@localhost ~]# ssh-copy-id -i .ssh/id_rsa.pub hua1 (把密钥传输到另一个节点上)

3.安装需要的软件

cluster-glue-1.0.6-1.6.el5.i386.rpm

cluster-glue-libs-1.0.6-1.6.el5.i386.rpm

corosync-1.2.7-1.1.el5.i386.rpm

corosynclib-1.2.7-1.1.el5.i386.rpm

heartbeat-3.0.3-2.3.el5.i386.rpm

heartbeat-libs-3.0.3-2.3.el5.i386.rpm

ldirectord-1.0.1-1.el5.i386.rpm

libesmtp-1.0.4-5.el5.i386.rpm

openais-1.1.3-1.6.el5.i386.rpm

openaislib-1.1.3-1.6.el5.i386.rpm

pacemaker-1.0.11-1.2.el5.i386.rpm

pacemaker-libs-1.0.11-1.2.el5.i386.rpm

perl-TimeDate-1.16-5.el5.noarch.rpm

resource-agents-1.0.4-1.1.el5.i386.rpm

先编辑yum端,cluster名和server不能用

[root@localhost ~]# yum localinstall *.rpm --nogpgcheck (安装所有以.rpm结尾的软件包)

4.两个节点要同步时钟

[root@localhost ~]# hwclock -s (两个节点都要做的)

[root@localhost ~]# date

2012年 12月 31日 星期一 21:11:23 CST

[root@localhost ~]# ssh hua2 "date" (查看另一端的时间)

2012年 12月 31日 星期一 21:11:29 CST

5.安装后主要的配置

[root@localhost ~]# cd /etc/corosync/ (主要的配置文件目录)

[root@localhost corosync]# ls

amf.conf.example  corosync.conf.example  service.d  uidgid.d

[root@localhost corosync]# cp corosync.conf.example corosync.conf (把案例文件拷贝成主的配置文件)

[root@localhost corosync]# vim corosync.conf (编辑主的配置文件)

下面是一些配置的介绍

(图腾的意思  ,多个节点传递心跳时的相关协议的信息)

totem {

        version: 2  版本号

        secauth: off  是否×××安全认证

        threads: 0   多少个现成认证  无限制

        interface {

                ringnumber: 0   

                bindnetaddr: 192 168.1.1  通过哪个网络地址进行通讯,可以给个主机地址(给成192.168.2.0

                mcastaddr: 226.94.1.1

                mcastport: 5405

        }   

}

logging {

        fileline: off 

        to_stderr: no  是否发送标准出错

        to_logfile: yes  日志

        to_syslog: yes   系统日志  (建议关掉一个),会降低性能

        logfile: /var/log/cluster/corosync.log  (手动创建目录)

        debug: off  排除时可以起来

        timestamp: on 日志中是否记录时间

      一下是openais的东西,可以不用×××

        logger_subsys {

                subsys: AMF 

                debug: off 

        }   

}

amf {

        mode: disabled

}

补充一些东西,前面只是底层的东西,因为要用pacemaker

添加如下的东西

service {

        ver: 0

        name: pacemaker

}

虽然用不到openais ,但是会用到一些子选项

aisexec {

        user: root

        group: root

}

6.[root@hua2 corosync]# mkdir /var/log/cluster (对方创建这个目录)

两边都要创建这个没有的日志目录

7.为了便面其他主机加入该集群,需要认证

[root@hua1 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.

8.把所有的配置拷贝到另一个节点

[root@hua1 corosync]# scp ./authkey corosync.conf hua2:/etc/corosync/

9.配置已经完成,现在需要把服务给启动了,可以再节点一上启动

[root@hua1 corosync]# service corosync start

[root@hua1 corosync]# ssh hua2 "service corosync start"

10.验证corosync引擎是否正常启动了

[root@hua1 corosync]# grep -i  -e "corosync cluster engine" -e "configuration file" /var/log/messages  

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

  [root@hua1 corosync]# grep -i totem /var/log/messages

检查过程中是否有错误产生  (便面stonith的错误

[root@hua1 corosync]# grep -i error:  /var/log/messages

[root@hua1 corosync]# grep -i error:  /var/log/messages  |grep -v unpack_resources (过滤)

检查pacemaker时候已经启动了

[root@hua1 corosync]#  grep -i pcmk_startup /var/log/messages

另一端也一样

11.任何一个节点上  查看集群的成员状态

[root@hua1 corosync]# crm status

12.插入介绍:提供高可用服务

corosync中,定义服务可以用两种借口

1.图形接口  (使用hb—gui

2.crm  pacemaker 提供,是一个shell

[root@hua1 corosync]# crm configure show  (查看cib信息库的状态)

node hua1.a.com

node hua2.a.com

property $id="cib-bootstrap-options" \

dc-version="1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f" \

cluster-infrastructure="openais" \

expected-quorum-votes="2"

[root@hua1 corosync]# crm configure show xml (以xml的格式查看)

[root@hua1 corosync]# crm_verify -L (查看错误)

 可以看到有stonith错误,在高可用的环境里面,会禁止实用任何资源

 可以禁用stonith 

[root@hua1 corosync]# crm

crm(live)# configure 

crm(live)configure#  property stonith-enabled=false

crm(live)configure#  property

usage: property [$id=<set_id>] <option>=<value>

crm(live)configure# help property 

crm(live)configure# commit  (提交生效)

 13.再次进行检查

[root@hua1 corosync]# crm_verify -L

没有错误了

系统上有专门的stonith命令

stonith   -L   显示stonith所指示的类型

crm可以使用交互式模式  

可以执行help

保存在cib里面,以xml的格式

14.集群的资源类型有4

primitive   本地主资源 (只能运行在一个节点上)

group     把多个资源轨道一个组里面,便于管理

clone    需要在多个节点上同时启用的  (如ocfs2  stonith ,没有主次之分)

master    有主次之分,如drbd

 15.配置一个资源,可以在configuration 下面进行配置

 先资源名字

 primitive webIP (资源名)ocf:heartbeat(代理):IPaddr  params ip=192.168.1.150(资源参数)

 crm(live)configure# primitive webip ocf:heartbeat:IPaddr  params ip=192.168.1.150

crm(live)configure# commit 

crm(live)configure# exit

bye

查看

crm(live)configure# show

16.安装http服务

[root@localhost Server]# yum install httpd-2.2.3-22.el5.i386.rpm

[root@localhost Server]# service httpd status (要让http是停止状态,因为要受到控制)

httpd 已停

[root@localhost Server]# echo "hua1.com" >/var/www/html/index.html (输入网页点东西用于测试)

[root@localhost Server]# echo "hua2.com" >/var/www/html/index.html

17查看状态,发现有了一个资源,并且已经运行在hua1.a.com

[root@localhost Server]# ifconfig  (查看地址发现虚拟地址已经有了)

查看http的服务资源

[root@localhost Server]# crm ra list lsb

支持httpd脚本资源

查看httpd的参数

crm(live)ra# meta lsb:httpd  

 18.定义httpd的资源

crm(live)configure# primitive webserver lsb:httpd

crm(live)configure# show

crm(live)configure# commit

19.查看现在http运行的状态

[root@localhost Server]# service httpd status

发现httpd已经启动了,但是在node2节点上

(高级群集服务资源越来越多,会分布在不同的节点上,以尽量负载均衡)

 需要约束在同一个节点上,定义成一个组

 可以实用  crm(live)configure# help group  查看配置组的帮助

[root@hua2 ~]# ping hua1 (这条明命令是如果节点不在线时,可以ping一下就行了)

先在查看资源的状态,发现ip是在hua1上,而server是在hua2上,这样是不行的

20.定义组为了解决资源不在一个节点上的错误

[root@hua1 ~]# crm

crm(live)# configure 

crm(live)configure# group web  webip  webserver

crm(live)configure# commit 

21.外面的http查看,但发现当节点一上的corosync服务停的时候,资源不能转移到节点二上去,为了解决这个问题,需要改变票数。

22.去改变票数的值

[root@hua1 ~]# crm

crm(live)# configure 

crm(live)configure# property no-quorum-policy=ignore

crm(live)configure# commit 

crm(live)configure# exit

现在把服务停掉后,发现资源已经到节点二上去了