centos7源代码编译安装heartbeat

一。安装heartbeat

   1》安装包下载

        下载地址参考 http://linux-ha.org/wiki/Download

            分别下载 Cluster Glue 1.0.12   和 Heartbeat 3.0.6  上传到linux

        参考安装文档   http://www.linux-ha.org 首页左侧菜单点击 User's Guide进入以下地址

           http://www.linux-ha.org/doc/users-guide/_building_and_installing_from_source.html#_building_and_installing_cluster_glue_from_source

    2》安装Cluster Glue和resource-agents 过程

       》》安装 Heartbeat 之前需要先安装Cluster Glue 1.0.12 (下载包名一般为 958e11be8686.tar.bz2)

       》》安装解压缩工具 bzip2  yum intall -y bzip2

       》》解压 tar -jxvf  958e11be8686.tar.bz2

       》》编译运行

              Reusable-Cluster-Components-glue--0a7add1d9996 目录  执行

                  ./autogen  生成 configure检测文件  

           一般会报错 因为缺少一些依赖包 

                yum install -y autoconf automake libtool 

           看到 Now run ./configure 表示自动生成完成

           执行 ./configure  --prefix=/usr/local/heartbeat  必须将Cluster Glue和resource-agents和heartbeat都安装在同一目录 因为heartbeat需要依赖这些库

                提示配置错误 缺少库

                yum install -y glib2-devel libxml2 libxml2-devel bzip2-devel e2fsprogs-devel libxslt-devel libtool-ltdl-devel make wget docbook-dtds docbook-style-xsl bzip2-devel asciidoc libuuid-devel

          配置完成列表显示默认的安装位置      

cluster-glue configuration:
  Version                  = 1.0.12 (Build: 0a7add1d9996b6d869d441da6c82fb7b8abcef4f)
  Features                 =

  Prefix                   = /usr/local/heartbeat
  Executables              = /usr/local/heartbeat/sbin
  Man pages                = /usr/local/heartbeat/share/man
  Libraries                = /usr/local/heartbeat/lib
  Header files             = /usr/local/heartbeat/include
  Arch-independent files   = /usr/local/heartbeat/share
  Documentation            = /usr/local/heartbeat/share/doc/cluster-glue
  State information        = /usr/local/heartbeat/var
  System configuration     = /usr/local/heartbeat/etc

  Use system LTDL          = yes

  HA group name            = haclient
  HA user name             = hacluster


 编译和安装 make & make install

   》》安装resource-agents

    ./autogen.sh

     export CFLAGS="$CFLAGS -I/usr/local/heartbeat/include -L/usr/local/heartbeat/lib" CFLAGS 表示用于 C 编译器(gcc)的选项 -L表示搜索库目录 -l或者-I表示包含头文件目录

     ./configure --prefix=/usr/local/heartbeat

     ln -s  /usr/local/heartbeat/lib/* /lib/  将生成的动态库 添加快捷方式到/lib下 

     ln -s  /usr/local/heartbeat/lib/* /lib64/  在make过程中需要在lib下找到Cluster Glue的so文件

    配置完成列表显示默认的配置信息

resource-agents configuration:
  Version                  = UNKNOWN
  Build Version            = 02beac55c1da0ad99a5a19bd3b2333bcff7e916c
  Features                 =

  Prefix                   = /usr/local/heartbeat
  Executables              = /usr/local/heartbeat/sbin
  Man pages                = /usr/local/heartbeat/share/man
  Libraries                = /usr/local/heartbeat/lib
  Header files             = /usr/local/heartbeat/include
  Arch-independent files   = /usr/local/heartbeat/share
  Documentation            = /usr/local/heartbeat/share/doc/resource-agents
  State information        = /usr/local/heartbeat/var
  System configuration     = /usr/local/heartbeat/etc
  HA_BIN directory prefix  = /usr/local/heartbeat/libexec
  RA state files           = /usr/local/heartbeat/var/run/resource-agents
  AIS Plugins              = 

  CFLAGS                   =  -I/usr/local/heartbeat/include -L/usr/local/heartbeat/lib -I/usr/local/heartbeat/include -L/usr/local/heartbeat/lib -I/usr/local/heartbeat/include -L/usr/local/heartbeat/lib -ggdb3  -fgnu89-inline -fstack-protector-all -Wall -
如果碰到  metadata-IPv6addr.xml:1: parser error : Document is empty错误 可以重新解压包重新生成配置


  编译和安装 make&make install

   3》安装Heartbeat 

    》》编译运行

         进入对应目录  ./bootstrap&./configure --prefix=/usr/local/heartbeat

   配置信息如下

heartbeat configuration:
  Version                  = "3.0.6"
  Executables              = "/usr/local/heartbeat/sbin"
  Man pages                = "/usr/local/heartbeat/share/man"
  Libraries                = "/usr/local/heartbeat/lib64"
  Header files             = "/usr/local/heartbeat/include"
  Arch-independent files   = "/usr/local/heartbeat/share"
  Documentation files      = "/usr/local/heartbeat/share/doc/heartbeat"
  State information        = "/usr/local/heartbeat/var"
  System configuration     = "/usr/local/heartbeat/etc"
  Init (rc) scripts        = "/etc/rc.d/init.d"
  Init (rc) defaults       = "/etc/sysconfig"
  Use system LTDL          = "yes"
  HA group name            = "haclient"
  HA group id              = "65"
  HA user name             = "hacluster"
  HA user user id          = "17"
  Build dopd plugin        = "yes"
  Enable times kludge      = "yes"
  CC_WARNINGS              = " -Wall -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes -Wdeclaration-after-statement -Wpointer-arith -Wwrite-strings -Wcast-qual -Wcast-align -Wbad-function-cast -Winline -Wmissing-format-attribute -Wformat=2 -Wformat-security -Wformat-nonliteral -Wno-long-long -Wno-strict-aliasing -Werror "
  Mangled CFLAGS           = " -I/usr/local/heartbeat/include -L/usr/local/heartbeat/lib -I/usr/local/heartbeat/include -L/usr/local/heartbeat/lib -I/usr/local/heartbeat/include -L/usr/local/heartbeat/lib -I/usr/local/heartbeat/include -L/usr/local/heartbeat/lib -I/usr/local/heartbeat/include -L/usr/local/heartbeat/lib  -Wall -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes -Wdeclaration-after-statement -Wpointer-arith -Wwrite-strings -Wcast-qual -Wcast-align -Wbad-function-cast -Winline -Wmissing-format-attribute -Wformat=2 -Wformat-security -Wformat-nonliteral -Wno-long-long -Wno-strict-aliasing -Werror  -ggdb3 -funsigned-char"
  Libraries                = "-lbz2 -lz -lc -luuid -lrt -ldl  -lltdl"
  RPATH enabled            = ""
  Distro-style RPMs        = "no"
make 过程出现如下错误 /usr/local/heartbeat/include/heartbeat/glue_config.h:105:0: error: "HA_HBCONF_DIR" redefined [-Werror]

    glue.config.h中 宏 HA_HBCONF_DIR被定义了多次

  vi 编辑glue_conf.h 注释掉最后一行 定义宏的代码

make install 安装 

二。heartbeat配置

   1》简要描述: 

     heartbeat属于机器之间进行主备高可用 也就是当主机 死机或者被关机的情况下 备机接管主机 其实就是接管主机的vip 和keepalived不同的地方

在于 keepalived是应用级别的主备转移  比如主机lvs挂了(主机并没有挂) vip转移到备用机器的lvs  

    原理:主机和备机之间进行心跳检测  当备机无法检测到主机的心跳 开启vip  如果主机和备机都没有挂掉 由于通信问题 无法连接 会出现裂脑 也就是 主机

   有vip  备机由于连不上主机 所以也对外路由了vip 两台主机都拥有了vip  导致数据出现故障  所以主机和备机间应该有一个网卡 只是用于检测心跳的 其他网

    络不能影响心跳检测

  2》测试环境 

      主机  物理网卡ip  192.168.58.135   心跳网卡ip  192.168.150.129   

      备机  物理网卡ip  192.168.58.140   心跳网卡ip  192.168.150.128  

      vip是 192.168.58.88 

  这里给出 如果添加双网卡 不同网络的配置

  》》点击vmware菜单 编辑-虚拟网络编辑器

    

 》》添加网卡 在虚拟机上右键 -设置 

 

 3》配置文件理解和主备转移配置

》》配置用户组   

从安装配置日志中可以看出 

  HA group name            = haclient
  HA user name             = hacluster

在启动时 必定要使用到该组合该用户所以先给予创建

groupadd haclient
useradd hacluster -g haclient -G haclient,root
chmod g+rwx /  和属组相同组(root和haclient都是root组)的用户都具有读写和执行的权限

》》配置hostname

分别58.135(主机名ha)和58.140(主机名ha1)执行
hostname 自己的ip 来设置主机名
修改 /etc/hosts文件
192.168.58.135 ha
192.168.58.140 ha1

》》复制配置文件

配置文件详解 从安装过程中的日志中 看到

 System configuration     = "/usr/local/heartbeat/etc"  默认的配置需要置于 /usr/local/heartbeat/etc目录下 默认该目录不存在配置文件

 拷贝三个重要的文件到 /usr/local/heartbeat/etc/ha.d 目录下 

  cp  /usr/local/heartbeat/share/doc/heartbeat/ha.cf  

    /usr/local/heartbeat/share/doc/heartbeat/authkeys /usr/local/heartbeat/share/doc/heartbeat   /usr/local/heartbeat/etc/ha.d

》》修改配置文件
  》/usr/local/heartbeat/etc/ha.d/ha.cf  

  该配置文件用于配置 心跳的核心配置

#表示调试的日志文件 一般测试建议开启 因为一旦启动服务报错 就可以根据日志定位错误
debugfile /var/log/ha-debug
#表示系统的的日志文件
logfile /var/log/ha-log
#表示使用系统日志
logfacility     local0
#主备之间的心跳间隔时间单位:s
#keepalive 2
#表示如果连接对方 30s 还无法连接 表示节点死亡 需要考虑vip转移
#deadtime 30
#表示10s时间未收到心跳时发出警告日志
#warntime 10
#有时机器启动后需要一段时间网卡才能正常工作 需要预留一定的时间后 再开始判断心跳
检测
#initdead 120
#多播的udp端口
udpport 694
#串行端口的波特率
#baud   19200
#串口的接口名
#serial /dev/ttyS0      # Linux
#serial /dev/cuaa0      # FreeBSD
#serial /dev/cuad0      # FreeBSD 6.x
#serial /dev/cua/a      # Solaris
#传播心跳的广播播网卡信息
#bcast  eth0            # Linux
#bcast  eth1 eth2       # Linux
#bcast  le0             # Solaris
#bcast  le1 le2         # Solaris
#多播传送心跳的网卡 多播组 端口 跃点数 是否回环内传送
#mcast eth0 225.0.0.1 694 1 0
#设置单播心跳 设置对方的ip地址 这里 58.135和 58.136需要分别设置对方的心跳ip  150.128和150.129
ucast eno33554984 192.168.150.128
#表示 如果主机停止后 从机接管  设置为 on 当主机从新启动后 主机立即接管vip  off 从机不会释放vip给主机
auto_failback on
#配置主从的节点信息
node    ha
node    ha1
#############################################
#使用ping模式 有时当主机挂掉或者heartbeat挂掉后vip才会转移  有时出现某个进程挂掉 切换需要使用脚本 
#ping模式用于测试 如果网卡ping不同 某个主机 就认为当前断网 需要转移vip 
#respawn root     /usr/local/heartbeat/libexec/heartbeat/ipfail 表示当ping不通时 自动调用 ipfail这个脚本
#apiauth ipfail gid=haclient uid=hacluster 表示有权限操作ipfail脚本的组和用户
############################################
ping 192.168.150.1
#ping组的所有主机
#ping_group group1 10.10.10.254 10.10.10.253
#respawn userid /path/name/to/run
respawn hacluster /usr/local/heartbeat/libexec/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster

这里注意一点 一般启动时会报错因为 ping和ucast这些配置都需要插件支持 需要将lib64下面的插件软连接到lib目录 才不会抛出异常

ln -svf /usr/local/heartbeat/lib64/heartbeat/plugins/RAExec/* /usr/local/heartbeat/lib/heartbeat/plugins/RAExec/
ln -svf /usr/local/heartbeat/lib64/heartbeat/plugins/* /usr/local/heartbeat/lib/heartbeat/plugins/

》/usr/local/heartbeat/etc/ha.d/authkeys

该文件表示发送心跳时 机器用于验证的key的hash算法 双方必须配置成一致的密码

auth 2  表示使用id为2的验证 下边需要定义一个2的验证算法 
#1 crc
2 sha1 HISHA1  #口令(HISHA1)随便给 主从配置相同即可

/usr/local/heartbeat/etc/ha.d/haresources

该文件表示资源的管理 如果是主机 当主机启动后 自动加载该文件中配置的所有启动资源 资源脚本默认在 haresources同级目录下的resource.d目录下

可以自定义脚本 比如 我的主机上安装了一个tomcat(//root/java/tomcat7)端口80

  在resource.d目录下新建一个 tomcat文件 vi tomcat 内容为启动tomcat

/root/java/tomcat7/bin/startup.sh
haresources 配置调用该tomcat脚本 配置如下

 ha IPaddr::192.168.58.88/24/eno16777736 tomcat
 一般该资源文件的配置格式为
   主机名或者ip  资源1 资源2 。。。。
 ha IPaddr::192.168.58.88/24/eno16777736 tomcat
表示 ha当前主机名 
 IPaddr::192.168.58.88/24/eno16777736 表示一个创建vip的脚本资源 resource.d下确实存在 IPaddr的脚本  参数表示eno16777736 网卡下新建vip为
     192.168.58.88
 tomcat 自然表示调用我们自定义的脚本资源

以上配置都是配置的58.135 主备中的主机 暂时不配置 140从机 尝试启动

service heartbeat start

service heartbeat status (本人也是报一堆错通过 /var/log/ha-debug分析错误才出现以下成功结构)

heartbeat OK [pid 10793 et al] is running on ha [ha]...
more /var/log/ha-debug 分析看其中Error的部分来分析错误 

最后 通过 ip addr  eno16777736  是否多出一个ip是 58.88  刚开始启动一般需要初始化一段时间vip才出来 因为initdead的默认配置

         window  通过 http://192.168.58.88/访问tomcat是否启动

接下来配置 140从机 (从机是从135克隆 所以网卡名称 和tomcat都和135一样)

发送几个核心配置文件到140机(克隆时 配置文件尚没有配置 所以需要scp过去)

cd /usr/local/heartbeat/etc/ha.d
scp ha.cf authkeys resource.d haresources root@192.168.58.140:/usr/local/heartbeat/etc/ha.d
scp ./resource.d/tomcat root@192.168.58.140:/usr/local/heartbeat/etc/ha.d/resource.d/
修改 ha.cf 

 只需要修改心跳的 135的心跳ip

ucast eno33554984 192.168.150.129
执行和135相同的动作 (配置主机名为 ha1 添加用户组 添加插件软连接等)

haresources中的主机名不能修改为ha1 必须还是主机135的 ha 否则 两个主句都会有vip

 测试结果1:配置后  分别启动135和 140 发现 135获取到了vip 88 并且tomcat启动了
 测试结果2尝 试 关闭135的heartbeat  service heartbeat stop 发现vip迅速转移到了 140 并且140的tomcat也启动起来
 测试结果3  参数再次启动 135的heartbeat的 看vip是否会转移回来主机  发现88vip右绑定回来了 回不回 由参数(ha.cf)auto_failback on决定


》》错误总结(通过日志文件 more /var/log/ha-debug 查看错误)

ERROR: Invalid uid [hacluster] specified for client child

没有添加组 haclient和用户 hacluster

Jul 27 03:53:23 ha1 heartbeat: [3598]: ERROR: Illegal directive [ucast] in /usr/local/heartbeat/etc/ha.d/ha.cf
Jul 27 03:53:23 ha1 heartbeat: [3598]: ERROR: Illegal directive [ping] in /usr/local/heartbeat/etc/ha.d/ha.cf

没有添加插件的软连接

》》个人建议

   由于heartbeat不能监控资源状态 所以当由于网络或者heartbeat本身的问题引发的vip转移 都会导致tomcat多次启动(比如主机135 heartbeat挂掉了tomcat不一定挂掉 当重启了heartbeat后  tomcat资源会再次调用) 当然建议你在自己的启动脚本中去判断启动了就不该再次启动

比如这里会稍稍修改 resource.d/tomcat文件

count=`ps -ef | grep tomcat | wc -l`
if [ $count -eq 1 ]; then
/root/java/tomcat7/bin/startup.sh
fi


原文地址:https://www.cnblogs.com/liaomin416100569/p/9331202.html