Linux-HA实战(1)— Heartbeat安装
接触Heartbeat主要是因为之前项目中使用了TFS,最近想给nameserver做HA,因为TFS官方用的Heartbeat,所以刚好了解下,参考了网络上很多内容,这里简单记录下。
内容
环境和软件包
我的机器是两台64位的CentOS,其它Linux机器应该差不多可以参考官方的说明。
从Heartbeat 2.1.4之后原先的项目被拆分成了三个子项目:cluster-glue
、resource-agents
和heartbeat
,导致了配置更加复杂。下面列出了我使用的各个软件包版本并提供了下载(后面具体安装提供了官方的下载地址,这里自己做个备份)。
- cluster-glue 1.0.9
- resource-agents 3.9.2
- heartbeat 3.0.5
Heartbeat源码安装
先最小化系统安装:gcc编译环境等。
- # yum install gcc gcc-c++ autoconf automake libtool glib2-devel libxml2-develbzip2-devel e2fsprogs-devel libxslt-devel libtool-ltdl-devel make wget docbook-dtds docbook-style-xsl
添加 Haclient 组和 Hacluster 账户。这个用户主要用来配置respawn的。
- # groupadd haclient
- # useradd -g haclient hacluster -M -s /sbin/nologin
安装libaio
cluster-glue依赖的库。libaio是Linux下的一个异步非阻塞接口,它提供了以异步非阻塞方式来读写文件的方式,读写效率比较高。
- # yum install libaio-devel
安装cluster-glue
glue(胶水的意思)是用来粘合Heartbeat、Pacemake以及Resource Agent的一系列类库、工具的集合。
- # wget http://hg.linux-ha.org/glue/archive/glue-1.0.9.tar.bz2
- # tar jxvf glue-1.0..tar.bz2
- # cd Reusable-Cluster-Components-glue--glue-1.0./
- # ./autogen.sh
- # ./configure --prefix=/usr/local/heartbeat --sysconfdir=/etc/heartbeat libdir=/usr/local/heartbeat/lib64 LIBS='/lib64/libuuid.so.1'
- # make & make install l
安装Resource Agents
resource-agents为集群资源的访问提供了一系列标准的接口。
- # wget https://codeload.github.com/ClusterLabs/resource-agents/zip/v3.9.2
- # unzip v3.9.2
- # cd resource-agents-3.9./
- # ./autogen.sh
- # ./configure --prefix=/usr/local/heartbeat --sysconfdir=/etc/heartbeat libdir=/usr/local/heartbeat/lib64 CFLAGS=-I/usr/local/heartbeat/include LDFLAGS=-L/usr/local/heartbeat/lib64 LIBS='/lib64/libuuid.so.1'
- //建立一个软连接,避免编译时找不到所需要的包
- # ln -s /usr/local/heartbeat/lib64/* /lib64/
注意:LDFLAGS的空格,否则configure时不会报错但make时报错。
安装Heartbeat
- # wget http://hg.linux-ha.org/heartbeat-STABLE_3_0/archive/7e3a82377fa8.tar.bz2
- # tar jxvf 7e3a82377fa8.tar.bz2
- # cd Heartbeat---7e3a82377fa8/
- # ./bootstrap
- # ./configure --prefix=/usr/local/heartbeat --sysconfdir=/etc/heartbeat CFLAGS=-I/usr/local/heartbeat/include LDFLAGS=-L/usr/local/heartbeat/lib64 LIBS='/lib64/libuuid.so.1'
- # vi /usr/local/heartbeat/include/heartbeat/glue_config.h
- // 删除 glue_config.h 最后一行定义的配置文件路径,避免编译时产生的路径重复定义错误,Shift+g 跳到末行,dd删除
- # make && make install
配置文件修改
将配置文件复制到 /etc/heartbeat/ 下,并使用sed 修改路径
- # cp doc/ha.cf /etc/heartbeat/ha.d/
- # cp doc/haresources /etc/heartbeat/ha.d/
- # cp doc/authkeys /etc/heartbeat/ha.d/
- # chkconfig --add heartbeat
- # chkconfig heartbeat on
- # chmod /etc/heartbeat/ha.d/authkeys
- # sed -i 's#/usr/lib/ocf#/usr/local/heartbeat/usr/lib/ocf#g' /etc/heartbeat/ha.d/shellfuncs
- # sed -i 's#/usr/lib/ocf#/usr/local/heartbeat/usr/lib/ocf#g' /etc/heartbeat/ha.d/resource.d/hto-mapfuncs
- # sed -i 's#/usr/lib/ocf#/usr/local/heartbeat/usr/lib/ocf#g' /usr/local/heartbeat/usr/lib/ocf/lib/heartbeat/ocf-shellfuncs
建立Resource-Agent 的脚本软连接,避免Heartbeat 找不到路径而无法工作
- # ln -s /usr/local/heartbeat /usr/lib/ocf
Heartbeat yum安装
推荐通过yum来安装Heartbeat,因为无论是tfs官方还是网上一些参考资料都是采用这种方式,这样会少很多路径配置方面的问题。但CentOS默认情况通过yum install heartbeat好像找不到相应的包,需要先下载并安装epel包:
- # wget http://mirrors.sohu.com/fedora-epel/6/i386/epel-release-6-8.noarch.rpm
- # rpm -ivh epel-release--.noarch.rpm
- # yum install heartbeat*
Heartbeat配置
Heartbeat的配置主要涉及到ha.cf、haresources、authkeys这三个文件。其中ha.cf是主配置文件,haresource用来配置要让Heartbeat托管的服务,authkey是用来指定Heartbeat的认证方式,具体参考:http://ixdba.blog.51cto.com/2895551/548625
需要注意几点:
authkeys的配置方式:
- # auth //认证序号1
- # md5 password //序号1 采用MD5 后面是密钥
auth 后面填写序号,可任意填写,但第二行开头必须为序号名,然后为验证方式,支持三种( crc md5 sha1 )方式验证,最后面是自定义密钥。
- 需要保证authkeys有相应的读写权限:
- # chmod /etc/heartbeat/ha.d/authkeys
对于HA系统来说主从节点的机器时间同步时很重要的。
服务要想被Heartbeat托管则必须写成可以通过start/stop来启动和关闭的脚本,然后放在/etc/init.d或者Heartbeat自己的ha.d/resource.d目录中。
HA的备份节点也需要安装Heartbeat,可以同错scp命令来复制配置文件:
- # scp –r node1:/etc/heartbeat/ha.d/* /etc/heartbeat/ha.d/
- //node1为主节点的主机名(uname -n)
测试
- 创建测试脚本 在Heartbeat的ha.d/resource.d下如下建立一个脚本:
- # vi /etc/heartbeat/ha.d/resource.d/test1
输入如下内容:
- #!/bin/bash
- logger $ called with $
- case "$1" in
- start)
- # Start commands go here
- echo "start!!!";
- ;;
- stop)
- # Stop commands go herer
- echo "stop!!!";
- ;;
- status)
- # Status commands go here
- echo "status!!!";
- ;;
- esac
增加相应的权限:
- # chmod test1
可以这样执行该脚本:
- # ./test1 start
- 配置haresource文件
- # vi /etc/heartbeat/ha.d/haresources
- # 输入下面的内容
- # ydhl-test1 test1
其中ydhl-test1为uname –n输出的结果。
配置authkeys,参见上段内容。
配置ha.cf
- debugfile /var/log/ha-debug
- # 用于记录heartbeat的调试信息
- logfile /var/log/ha-log
- # 用于记录heartbeat的日志信息
- logfacility local0
- keepalive
- # 设置心跳间隔
- watchdog /dev/watchdog
- deadtime
- # 在30秒后宣布节点死亡
- warntime
- # 在日志中发出“late heartbeat“警告之前等待的时间,单位为秒
- initdead
- # 网络启动时间
- udpport
- # 广播/单播通讯使用的udp端口
- #baud
- #serial /dev/ttyS0
- # 使用串口heartbeat
- bcast eth0
- # 使用网卡eth0发送心跳检测
- auto_failback on
- # 当主节点从故障中恢复时,将自动切换到主节点
- watchdog /dev/watchdog
- # 该指令是用于设置看门狗定时器,如果节点一分钟内都没有心跳,那么节点将重新启动
- node HA-
- node HA-
- # 集群中机器的主机名,与“uname –n”的输出相同。
- ping 192.168.0.254
- # ping 网关或路由器来检测链路正常
- respawn hacluster /usr/local/heartbeat/lib64/heartbeat/ipfail
- # respawn调用 ipfail 来主动进行切换
- apiauth ipfail gid=haclient uid=hacluster
- # 设置启动ipfail的用户和组
备份节点配置,参见上段内容。
同步主从节点系统时间:可以通过ntpdate来同步
- 启动Heartbeat
在启动之前用下面的命令在主从节点上面测试一下配置是否正确,ReourceManager在Heartbeat安装目录的share/heartbeat目录下。
- # ./ResourceManager listkeys `/bin/uname -n`
- 测试通过后启动主节点和从节点Heartbeat:
- # service heartbeat start
通过查看 /var/log/messages可以看到Hearbeat的很多信息:
可以看到我们前面的测试脚本test1输出的信息。
当通过service heartbeat stop命令停止一个节点的Heartbeat的时候,从日志中可以看到另外一个节点已经感知到了:
重启后可以看到:
FAQ
Q:为什么在/var/log/messages里看到很多下面这样的警告?
A :这种情况是因为部署Heartbeat是直接从其它机器上拷贝过来导致的。直接拷过来会导致两个节点上的uuid冲突,解决方法是强制某个Hearbeat重新生成uuid,先停止Heatbeat然后删除hb_uuid这个文件(可以通过find命令查找)重启就好了:
- # rm –rf /usr/local/heartbeat/var/lib/heartbeat/hb_uuid
Q:什么是“脑裂”问题?
A :采用keepalive等心跳软件,需要注意“脑裂”问题: "在“双机热备”高可用(HA)系统中,当联系2个节点的“心跳线”断开时,本来为一整体、动作协调的HA系统,就分裂成为2个独立的个体。由于相互失去了联系,都以为是对方出了故障,2个节点上的HA软件像“裂脑人”一样,“本能”地争抢“共享资源”、争起“应用服务”,就会发生严重后果:或者共享资源被瓜分、2边“服务”都起不来了;或者2边“服务”都起来了,但同时读写“共享存储”,导致数据损坏(常见如数据库轮询着的联机日志出错)。
Q:启动heartbaet的时候可能会报很多库找不到的错误:
A:可以先通过find命令查找,然后通过建立软连接就可以解决了:
- # ln -s /usr/libexec/pacemaker/* /usr/local/heartbeat/lib64/heartbeat/
参考链接
[1]高可用方案之脑裂问题探讨
Linux-HA实战(1)— Heartbeat安装的更多相关文章
- (转)Linux-HA实战(1)— Heartbeat安装
原文:http://blog.csdn.net/liaomin416100569/article/details/76087448-------centos7源代码编译安装heartbeat 原文:h ...
- Linux.NET实战手记—自己动手改泥鳅(上)
各位读者大家好,不知各位读者有否阅读在下的前一个系列<Linux.NET 学习手记>,在前一个系列中,我们从Linux中Mono的编译安装开始,到Jexus服务器的介绍,以及如何在Linu ...
- Linux系统实战项目——sudo日志审计
Linux系统实战项目——sudo日志审计 由于企业内部权限管理启用了sudo权限管理,但是还是有一定的风险因素,毕竟运维.开发等各个人员技术水平.操作习惯都不相同,也会因一时失误造成误操作,从而 ...
- LR添加Windows和Linux压力机实战
添加Windows和Linux压力机实战 既然Controller是LoadRunner的“心脏”,那么压力产生也必然是它发起的,通过压力机来对被测系统产生压力.一般压力机分为Windows和Linu ...
- linux应用之nginx的安装及配置(centos)
Ubuntu/CentOS 系统上安装与配置Nginx 一.在线安装: Ubuntu:sudo apt-get install nginx CentOS: sudo yum install nginx ...
- 使用Cloudera Manager搭建zookeeper集群及HDFS HA实战篇
使用Cloudera Manager搭建zookeeper集群及HDFS HA实战篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.使用Cloudera Manager搭建zo ...
- LVS+Heartbeat安装部署文档
LVS+Heartbeat安装部署文档 发表回复 所需软件: ipvsadm-1.24-10.x86_64.rpmheartbeat-2.1.3-3.el5.centos.x86_64.rpmhear ...
- Docker系列之实战:3.安装MariaDB
环境 [root@centos181001 ~]# cat /etc/centos-release CentOS Linux release 7.6.1810 (Core) [root@centos1 ...
- CentOS7 实战源码安装mysql5.7.17数据库服务器
CentOS7 实战源码安装mysql5.7.17数据库服务器 简介:实战演练mysql数据库服务器的搭建 mysql简介: mysql是一个开源的关系型数据库管理系统,现在是oracle公司旗下的 ...
随机推荐
- jQuery源码分析系列(35) : Ajax - jsonp的实现与原理
ajax的核心是通过XmlHttpRequest获取非本页内容,而jsonp的核心则是动态添加<script>标签来调用服务器提供的js脚本 json核心就是:允许用户传递一个callba ...
- centos6.5 下搭建lamp环境
一直以为很麻烦,实际操作起来并没有遇到什么问题,yum源是163,php版本是5.3(有点老,以后再更新吧):详细步骤如下: 第一步:安装php mysql apache yum -y install ...
- 10年C#历程的MVP之路与MVP项目介绍
本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html 1.意外的惊喜 10月份收到微软总部寄来的荣誉证书,非常激动, ...
- 细说Linq之Aggregate
前言 Linq中有关常见的方法我们已经玩的得心应手,而对于那些少用的却是置若罔闻(夸张了点),但只有在实际应用中绞尽脑汁想出的方法还不如内置的Linq方法来的实际和简洁,不喜勿喷,怪我见识短. 通过R ...
- Java ConcurrentHashMap Example and Iterator--转
原文地址:http://www.journaldev.com/122/java-concurrenthashmap-example-iterator#comment-27448 Today we wi ...
- HandlerThread 创建一个异步的后台线程
使用HandlerThread几大优点: 1.制作一个后台异步线程,需要的时候就可以丢一个任务给它,使用比较灵活; 2.Android系统提供的,使用简单方便,内部自己封装了Looper+Handle ...
- 实现一个纵向排列的 ListBox ,并具有操作按钮
需要实现的效果如下: 要想把 ListBox 的内容纵向显示很简单,只需把 ListBox 的内容控件为 WrapPanel 就可以了: <ListBox.ItemsPanel> < ...
- 【原创】基于日志增量,统计qps,并基于ip排序
增量统计日志行数(只统计上一秒) dns_qps.py #!/usr/bin/env python #_*_coding:utf-8_*_ import datetime import re impo ...
- Net设计模式实例之适配器模式(Adapter Pattern)
一.适配器模式简介(Brief Introduction) 适配器模式,将一个类装换成客户期望的另外一个接口.Adapter模式使的原本由于接口不兼容而不能工作的那些类可以一起工作. 二.解决的问题( ...
- [转]9个offer,12家公司,35场面试,从微软到谷歌,应届计算机毕业生的2012求职之路
1,简介 毕业答辩搞定,总算可以闲一段时间,把这段求职经历写出来,也作为之前三个半月的求职的回顾. 首先说说我拿到的offer情况: 微软,3面->终面,搞定 百度,3面->终面,口头of ...