zoukankan      html  css  js  c++  java
  • Heartbeat 3.0.3 介绍及rpm

    此为转载文章。因为从源码编译虽然通过,但始终缺少shellfunc文件,所以查了一下从rpm包安装,找到了这篇文章。结合这个链接:

    http://www.howtoforge.com/high-availability-load-balancer-haproxy-heartbeat-fedora8

    配置基本搞定了。其中一个问题是他的主从机是反的!明天再试!

    我已经不是第一次介绍Heatbeat,通过yum可轻松安装Heartbeat 2.x,网上的资料(包括我以前的多篇日志)都已很详细的介绍了Heartbeat 2.x 的部署方式。而自2月Heartbeat 3.0.2,作为首个3.x Final Release版本发布后,官方网站已改版,并建议从2.x更新到3.0.2,导致很多老的配置文档、说明等都很难找到链接。此外,触发我考虑使用Heartbeat3,也正是前几天用Heartbeat 2.1.3+DRBD+Oracle配置时遇到大量的Bug,可见这里。虽然最终解决问题,但缺少官方的支持,今后的维护可能会遇到困难。为长远考虑,使用Heartbeat 3是势在必行的。
        幸亏,Heartbeat 3对比Heartbeat 2.x实际区别并不大,甚至可把Heartbeat 3理解为Heartbeat 2.x按模块拆分后的版本,配置方式类同。所以,实际部署时,遇到的最大困难是安装问题。官方资料提供的都是源码,我不喜欢以源码方式来在生成系统上部署软件,这会给后续的维护带来很大的问题。通过努力,我终于成功编译一套heartbeat 3.0.3,带GUI管理方式的rpm。

    一、关于Heartbeat 3
    1、版本问题
    Heartbeat 官方最后一个STABLE release 2.x 版本是2.1.4。
    虽然Fedora、OpenSUSE 等项目曾提供2.99、3.0等rpm版本,但实际上版本都是基于Heartbeat 3.0和3.0.1源码编译的。目前网上大部分资料中介绍的Heartbeat 3使用的也是该版本。
    Heartbeat 3 官方正式发布的首个版本是3.0.2,这也是为了区别上面提到的2.99。此外,由于3.0.2 的正式发布,原由OpenSUSE提供的下载地址,也已被删除。
    更详细信息,请见:Announce: Final Release of Heartbeat 3.0.2, Cluster-Glue 1.0.2, and Resource-Agents 1.0.2
    这些原理Heartbeat 3 与 2.x 基本是相同的,有疑问,可参考:[原]heartbeat 2.x基础架构

    2、组成
    Heartbeat 3与2.x的最大差别在于,3 按模块把的原来2.x 拆分为多个子项目,并且提供了一个cluster-glue的组件,专用于Local ResourceManager 的管理。即heartbeat + cluster-glue + resouce-agent 三部分:

    引用
    (1)hearbeat本身是整个集群的基础(cluster messaging layer),负责维护集群各节点的信息以及它们之前通信;
    (2)cluster-glue相当于一个中间层,可以将heartbeat和crm(pacemaker)联系起来,主要包含2个部分,LRM和STONITH;
    (3)resource-agent,就是各种的资源的ocf脚本,这些脚本将被LRM调用从而实现各种资源启动、停止、监控等等。


    通过这三部分已可构成一套完整的HA集群系统。但是,这还不够,因为没有管理工具。
    而原GUI 工具Cluster Resource Manager (简称CRM)也被拆分由另一独立项目Pacemaker 负责。Pacemaker 提供了多种用户接口:

    引用
    (1)crm shell 基于字符的管理方式;
    (2)一个使用Ajax Web配置方式的web konsole 窗口;
    (3)hb_gui ,即heartbeat gui 图形配置工具,这也是原来2.x的默认GUI 配置工具;
    (4)DRBD-MC,一个基于Java的配置管理工具。


    更详细介绍,请见:这里
    以上几种用户管理接口,择其一即可。需要说明的是,Pacemaker 支持的Cluster Stacks中,除了Heartbeat,还支持OpenAIS。不过,OpenAIS 的内容已超出本文的范围,有待以后再做介绍。

    二、关于rpm包
    1、Heartbeat 3 的rpm
    Heartbeat 3 官网上有提供Heartbeat 3.0.3、Cluster Glue 1.0.5、Resource Agents 1.0.3 的源码。下载回来编译安装即可。
    若你像我一样,不喜欢用源码来部署生产系统,那你可以用源码包中的spec来编译。编译时,注意创建对应的源码包中的目录,spec中的变量设定等,但总体问题不大。
    更好的是,在Pacemaker 的Install一文中,提供了EPEL 的安装包。若您的系统是Asianux 、RHEL、CentOS等,即可通过下面的方式来安装:

    rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-3.noarch.rpm
    wget -O /etc/yum.repos.d/pacemaker.repo http://clusterlabs.org/rpm/epel-5/clusterlabs.repo
    yum install -y pacemaker corosync heartbeat


    或者,直接点击下面的链接获取对应的rpm,或源码src.rpm:
    http://www.clusterlabs.org/rpm/epel-5/
    http://www.clusterlabs.org/rpm/epel-5/src/
    通过以上安装过程,系统已提供搭建Heartbeat 3的环境,包括crm 命令行配置和管理工具(由pacemaker 提供)。但是,不包括hb_gui 图形配置工具。
    ※ 注意,我这里没有安装ldirectord,因为我没有用到LVS,若您需要监控LVS,可自行安装。

    2、Pacemaker Python GUI
    正如前文提到的,这是Pacemaker 提供的一个GUI 方式的配置管理工具,也就是heartbeat 2.x中的hb_gui 。
    官方网站是:http://hg.clusterlabs.org/pacemaker/pygui
    在某些Heartbeat 版本,例如Fedora 自行提供的2.99 中,称为:pacemaker-pygui-1.4,而目前最新版本是2.0,已改名为:pacemaker-mgmt-2.0.0 。
    编译时,可能会遇到一些问题:
    a、AC_PROG_INTLTOOL 报错
    例如:

    引用
    # tar xvjf Pacemaker-Python-GUI-.tar.bz2
    # ./bootstrap
    Autoconf package autoconf found.
    ......
    ./configure: line 2064: syntax error near unexpected token `0.35.2'
    ./configure: line 2064: `AC_PROG_INTLTOOL(0.35.2)'


    原因是,缺少一个依赖包intltool-0.35.0-2。安装后,运行:

    # autoreconf -ifs
    # ./bootstrap


    请见:
    Error on compiling Pacemaker-GUI
    [RPM] pacemaker-mgmt for corosync 1.1.2 and pacemaker 1.0.6

    b、delete_attr 错误
    例如:

    引用
    ....
    mgmt_crm.c: In function 'on_cleanup_rsc':
    mgmt_crm.c:1307: warning: passing argument 9 of 'delete_attr' makes integer from pointer without a cast
    mgmt_crm.c:1307: error: too many arguments to function 'delete_attr'
    mgmt_crm.c:1316: warning: passing argument 9 of 'update_attr' makes integer from pointer without a cast
    mgmt_crm.c:1316: error: too many arguments to function 'update_attr'

    gmake[2]: *** [libhbmgmt_la-mgmt_crm.lo] Error 1
    gmake[2]: Leaving directory `/home/rc6/Pacemaker-Python-GUI-0f1490eaa8d8/mgmt/daemon'
    gmake[1]: *** [all-recursive] Error 1
    gmake[1]: Leaving directory `/home/rc6/Pacemaker-Python-GUI-0f1490eaa8d8/mgmt'
    make: *** [all-recursive] Error 1


    该错误的原因是pacemaker 1.1中做了一些改变,而最新的pacemaker-mgmt 2.0也据此做了调整。但是,如果当前使用的pacemaker 还是1.0,那就会产生错误。

    引用
    # rpm -qa|grep pacemaker
    pacemaker-libs-devel-1.0.9.1-1.AXS3
    pacemaker-1.0.9.1-1.AXS3
    pacemaker-libs-1.0.9.1-1.AXS3


    解决方法是,参考这里,反向修改源码中的/mgmt/daemon/mgmt_crm.c 文件,以符合pacemaker 1.0 :

    引用
         1.7 -    delete_attr(cib_conn, cib_sync_call, XML_CIB_TAG_STATUS, dest_node, NULL,
         1.8 +    delete_attr(cib_conn, cib_sync_call, XML_CIB_TAG_STATUS, dest_node, NULL, NULL,
    ......
        1.16 -        XML_CIB_TAG_CRMCONFIG, NULL, NULL, NULL, "last-lrm-refresh", now_s, FALSE);
        1.17 +        XML_CIB_TAG_CRMCONFIG, NULL, NULL, NULL, NULL, "last-lrm-refresh", now_s, FALSE);
        1.18    crm_free(now_s);


    另一个方法是,使用老版本的pacemaker-mgmt 2.0.0包:点击下载
    详细请见:
    Erro compiling Pacemaker GUI client

    c、rpm 包
    当然,最后我还是生成了几个rpm包:

    引用
    pacemaker-mgmt-2.0.0-1.1.x86_64.rpm
    pacemaker-mgmt-client-2.0.0-1.1.x86_64.rpm
    pacemaker-mgmt-devel-2.0.0-1.1.x86_64.rpm


    可从附录中获得。

    三、附录
    说了这么多,我只是您希望明白Heartbeat 3 的构成,至于安装用的rpm,我已经为了准备好了:

    下载文件
    http://www.linuxfly.org/attachment.php?fid=824
    文件包括:
    cluster-glue-1.0.5-1.AXS3.x86_64.rpm             ldirectord-1.0.3-1.AXS3.x86_64.rpm          pacemaker-1.0.9.1-1.AXS3.x86_64.rpm
    cluster-glue-libs-1.0.5-1.AXS3.x86_64.rpm        libesmtp-1.0.4-5.AXS3.x86_64.rpm            pacemaker-libs-1.0.9.1-1.AXS3.x86_64.rpm
    cluster-glue-libs-devel-1.0.5-1.AXS3.x86_64.rpm  libesmtp-devel-1.0.4-5.AXS3.x86_64.rpm      pacemaker-libs-devel-1.0.9.1-1.AXS3.x86_64.rpm
    corosync-1.2.5-1.3.AXS3.x86_64.rpm               libhbaapi-2.2-4AXS3.x86_64.rpm              pacemaker-mgmt-2.0.0-1.1.x86_64.rpm
    corosynclib-1.2.5-1.3.AXS3.x86_64.rpm            libhbaapi-devel-2.2-4AXS3.x86_64.rpm        pacemaker-mgmt-client-2.0.0-1.1.x86_64.rpm
    corosynclib-devel-1.2.5-1.3.AXS3.x86_64.rpm      libnet-1.1.2.1-5AXS3.x86_64.rpm             pacemaker-mgmt-devel-2.0.0-1.1.x86_64.rpm
    heartbeat-3.0.3-1.AXS3.x86_64.rpm                libnet-devel-1.1.2.1-5AXS3.x86_64.rpm       perl-MailTools-1.77-1.AXS3.noarch.rpm
    heartbeat-devel-3.0.3-1.AXS3.x86_64.rpm          openais-1.1.3-1.1.AXS3.x86_64.rpm           perl-TimeDate-1.16-5.AXS3.noarch.rpm
    heartbeat-libs-3.0.3-1.AXS3.x86_64.rpm           openaislib-1.1.3-1.1.AXS3.x86_64.rpm        repodata
    intltool-0.35.0-2.x86_64.rpm                     openaislib-devel-1.1.3-1.1.AXS3.x86_64.rpm  resource-agents-1.0.3-1.AXS3.x86_64.rpm
    其中repodata包括:
    filelists.xml.gz  other.xml.gz  primary.xml.gz  repomd.xml

    该版本适用于红旗 Asianux 3.x、RHEL 5.x 、CentOS 5.x 的x86_64平台环境。
    下载后,解压到某一目录,例如:/root/rpms,然后,在/etc/yum.repos.d中创建一个文件:

    引用
    cat heartbeat.repo
    [heartbeat]
    name=Heartbeat 3
    baseurl=file:///root/rpms
    enabled=1


    接着,先卸载旧的包:

    # rpm -e `rpm -qa|grep heartbeat`
    # rpm -e `rpm -qa|grep openais`


    最后,用下面的命令安装即可:

    # yum install pacemaker corosync heartbeat ldirectord pacemaker-mgmt pacemaker-mgmt-client
    Tags: ha , heartbeat

    kl
    2010/08/19 15:26
    libcpg.so.2
    libSaCkpt.so.2
    有问题。。。
    linuxing 回复于 2010/08/20 16:20
    什么意思?详细点吧。
    如果你的意思是缺少这几个库,那你要看看系统的版本。上文已经写得很清楚了,我是在红旗Asianux 3.0 x86_64上编译的,兼容RHEL 5、CentOS 5,其他版本我不保证兼容哦。
    JackShan
    2010/07/27 13:41
    warning: macro `AM_PO_SUBDIRS' not found in library

    解决:

    It requires gettext-tools

    linuxing 回复于 2010/07/28 01:30
    你指下面的问题吗?
    http://www.gossamer-threads.com/lists/linuxha/pacemaker/60953
    在Asianux 3.0/CentOS 5.x等系统中,应指gettext,而非gettext-tools:
    # rpm -qa|grep gettext
    gettext-0.14.6-4.1AX
    gettext-devel-0.14.6-4.1AX
    gettext-0.14.6-4.1AX
    gettext-devel-0.14.6-4.1AX
  • 相关阅读:
    什么是 bean 的自动装配?
    什么是 Spring 的内部 bean?
    什么是 Spring 的 MVC 框架?
    Spring AOP and AspectJ AOP 有什么区别?
    解释 JDBC 抽象和 DAO 模块?
    volatile 类型变量提供什么保证?
    一个 Spring Bean 定义 包含什么?
    什么是 Spring MVC 框架的控制器?
    使用 Spring 访问 Hibernate 的方法有哪些?
    什么是 Callable 和 Future?
  • 原文地址:https://www.cnblogs.com/chinacloud/p/1881056.html
Copyright © 2011-2022 走看看