基于corosync/openais+pacemaker构建高可用集群

2580阅读 0评论2011-09-14 hanlenry
分类:LINUX

拓扑图:

 

1. 配置网络环境

             1)在director1上,配置ip和主机名。

配置ip

             #vim /etc/sysconfig/network-scripts/ifcfg-eth0

                     修改:BOOTPROTO=static

                     添加:IPADDR=192.168.0.111

                           NETMASK=255.255.255.0

   

             配置主机名

            #vim /etc/sysconfig/network

                     修改:HOSTNAME=node1.hanlenry.com

            #hostname node1.hanlenry.com

             

              添加地址解析条目

           #vim /etc/hosts

                     添加:192.168.0.111           node1.hanlenry.com  node1

         192.168.0.112           node2.hanlenry.com  node2

       为了方便我们在两个节点之间相互拷贝文件时,不用输密码就可以直接拷贝。我们需要做一些配置,在node1上生成私钥,并把node1(director1)上的公钥拷贝到node2(director2)上。

          #ssh-keygen -t rsa

          #ssh-copy-id -i .ssh/id_rsa.pub root@node2         

          #ssh node2 'ifconfig'

 

              2)在director2上,配置ip和主机名

              配置ip

              #vim /etc/sysconfig/network-scripts/ifcfg-eth0

                     修改:BOOTPROTO=static

                     添加:IPADDR=192.168.0.112

                           NETMASK=255.255.255.0

   

             配置主机名

              #vim /etc/sysconfig/network

                     修改:HOSTNAME=node2.hanlenry.com

              #hostname node2.hanlenry.com

             

              添加地址解析条目

              #vim /etc/hosts

                     添加:192.168.0.111           node1.hanlenry.com  node1

         192.168.0.112           node2.hanlenry.com  node2

 

             为了方便我们在两个节点之间相互拷贝文件时,不用输密码就可以直接拷贝。此时还需要在node2上进行配置,和在node1上的配置一样,如下:

         #ssh-keygen -t rsa

         #ssh-copy-id -i .ssh/id_rsa.pub root@node1         

         #ssh node1 'ifconfig'

 

2. 需要的软件包:

cluster-glue-1.0.6-1.6.el5.i386.rpm              libesmtp-1.0.4-5.el5.i386.rpm

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

corosync-1.2.7-1.1.el5.i386.rpm                 openaislib-1.1.3-1.6.el5.i386.rpm

corosynclib-1.2.7-1.1.el5.i386.rpm              pacemaker-1.0.11-1.2.el5.i386.rpm

pacemaker-libs-1.0.11-1.2.el5.i386.rpm           resource-agents-1.0.4-1.1.el5.i386.rpm

heartbeat-3.0.3-2.3.el5.i386.rpm                perl-TimeDate-1.16-5.el5.noarch.rpm

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

 

我将软件包放在/root/corosync目录下。

 

安装corosync

    注意:首先请同步你的系统时间(node1node2)

         #hwclock -s

 

node1node2

       #cd /roo/corosync

        #yum localinstall *.rpm -y --nogpgcheck

Node1:

        #cd /etc/corosync

        #cp corsync.conf.example corosync.conf

        #vim !$

         (没有指定的则是使用默认设置)

        totem 定义多个节点之间协调心跳信息的相关协议

                secauth:on 是否打开安全的sec认证,建议打开此项。

                threads:0  用多少个线程进行认证,0表示不做限制

                interface 在哪个网卡地址上通信

                bindnetaddr192.168.0.0 网络地址,如果你使用的主机ip,那么系统会自动把它转换成网络地址

                mcastaddr 多播地址

      logging 日志定义

                to_stderr  是否标准错误输出

                to_logfile

                to_syslog

                logfile:  日志目录,需要手动创建

                debugoff

                timestamp:on 记录时间戳

       添加: 启动pacemaker

                    service {

                                ver:  0

                                name: pacemaker

                                }

                当要执行ais组件时,需要以root身份            

                    ai***ec {

                                user:  root

                                group: root

                                }    

------------------------------------------------------------------------                   

生成authkey

              #corosync-keygen

将配置文件传递到node2

              #scp –p authkey corosync.conf node2:/etc/corosync

 

node1node2上:

创建日志目录:

              #mkdir –v /var/log/cluster

 

3.启动corosync

 1) node1:

        #service corosync start

        #ssh node2 ‘service corosync start’

 2) node1node2上:

测试:以下几步测试,必须要做。

1.产看引擎是否正常启动

         grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/messages

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

         grep  TOTEM  /var/log/messages

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

         grep ERROR: /var/log/messages | grep -v unpack_resources

       4.查看pacemaker是否正常启动

         grep pcmk_startup /var/log/messages

 

查看当前集群状态的online情况

        #crm status

如图所示:

4.配置高可用服务

使用pacemaker专门提供定义高可用服务的命令行接口。使用crm命令

        #crm configure show 查看当前CIB的配置信息

#crm_verify -L 检查当前的集群是否有故障

此处可能会有一些错误,会提示有关STONITH的错误。因为我的实验环境并没有STONITH设备,因此此处要禁掉STONISH的检测。

        #crm configure property stonith-enable=false

此处解析一下crm命令。

 

补充:crm的使用,crm 是pacemaker专门提供定义高可用集群服务的命令行接口

你输入一个crm命令,会进入一个子shell,这个子shell有点像路由器,交换机的配置,可以进入到不同的模式。那我下面就来说明一下:

        #crm  进入到crm模式,支持tab键补全功能。

        crm(live)# help 显示一级子命令

        crm(live)# configure 进入configure模式

        crm(live)configure# help 查看configure模式下的子命令

        crm(live)configure# help primitive 查看primitive的帮助信息

        crm(live)configure# property stonith-enabled=false 和我们上面设置stonith的命令其实是一样的。

  crm(live)configure# ra

crm(live)configure ra# help

classes          list classes and providers

    list             list RA for a class (and provider)

    meta,info        show meta data for a RA

crm(live)configure ra# classes 查看当前系统所支持的资源代理的种类

heartbeat

lsb

ocf / heartbeat pacemaker

stonith

 

        crm(live)configure ra# list lsb 查看lsb

        crm(live)configure ra# list ocf pacemaker 查看ocf

        crm(live)configure ra# list ocf heartbeat

        crm(live)configure ra# meta ocf:heartbeat:IPaddr 查看资源的详细信息。(也可以使用info。)

 

配置资源

好,接下来我们就开始定义资源

使用crm命令定义资源的格式,在configure模式下:指定资源类型,资源名字,资源代理,指定参数

 

1.先配置第一个资源,ip

        crm(live)configure# primitive WebIP ocf:heartbeat:IPaddr params ip=192.168.0.12

crm(live)configure#show

如果确认无误,就可以提交了

 

如图所示:

 

crm(live)configure #commit

2.配置第二个资源,服务

        crm(live)configure #primitive WebServer lsb:httpd

        crm(live)configure #show

如图所示:

 

        configure#commit

 

3.我们也可以将上面的两个资源加入到一个组中

        configure#group Web WebIP WebServer

        configure#show

如图所示:

 

configure#commit

        #crm status

如图所示:

5.测试

1.node2上:

        #ssh node1 ‘service corosync stop’

    当我们在做测试时,我们把node1关闭掉后,你可能会发现node2虽然是online,但是资源不会流转到node2节点上。这是怎么回事呢?是为了避免脑裂,所采用的法定代表票数所引起的。只有当一个节点的票数超过法定票数的一半时,才能够使用。由于我们使用的是双机系统,因此当一个节点当掉之后,另一个节点也应该能够正常工作,因此需要关掉quorum

关闭quorum

        #crm configure propertiry no-quorum-policy=ignore

2.定义资源的粘性

    当我们的节点从新启动后,资源是否会流转回来所做的定义。也就是说用户定义的资源有多大倾向留在当前节点。

    大于0:表示资源更愿意留在当前节点

    小于0:表示资源迫不及待的想离开此节点

   无穷大(INFNITY):只要节点在线,定义的资源就一直在此节点上

    负无穷大(-INFNITY):只要有其他节点,就流转到其他节点上。

 

定义资源粘性:

    crm configure rsc_defaults resource-stickiness=100 #表示只有当启动的节点中有大于100的,资源才会流转回去。

 

如图所示:

 

 

上一篇:使用ldirector实现集群的高可用和负载均衡
下一篇:3个节点基于corosync+pacemaker架构实现集群的高可用