HA 即(high available cluster)高可用集群,又称双机热备,保证关键性业务的不间断提供服务。 如:两台机器A和B,正常情况A提供服务,B待命闲置;一但A宕机或服务宕掉,自动切换至B机继续提供服务。实现高可用的开源软件有heartbeat和keepalived,其中keepalived还有负载均衡的功能。heartbeat作为常用集群开源软件,熟悉它的配置方法,非常有必要。

说明:以下是heartbeat的yum安装和配置的方法介绍,需要扩展epel源,如果没有,执行命令:

# yum install -y epel-release

 1. 试验环境:
  两个CentOS 6.0 64位虚拟机(master:eth1: 192.168.220.11;slave:eth1: 192.168.220.22),master主机设置一个虚拟ip作为心跳线(虚拟机只有一个网卡,实际应用中应该有多个网卡,或者用串口来连接,否则会有不安全因素)

2. 前期准备:
   【1】修改hostname:(修改hostname的目的是为了便于记忆,hostname可以自定义)
  master主机:

# vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=master
# hostname master;bash

  slave主机:

# vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=slave
# hostname slave;bah

【2】修改/etc/hosts文件(两台主机作同样的配置)

# vim /etc/hosts
192.168.220.11 master
192.168.220.22 slave

【3】关闭防火墙

# iptables -F
# getenforce //若get到Disabled,不需做配置;若get到的是Enforcing,作如下修改:
# vim /etc/selinux/config
SELINUX=enforcing --> SELINUX=disabled

【4】虚拟ip的设定

# cd /etc/sysconfig/network-scripts
# cp ifcfg-eth1 ifcfg-eth1:0
# vim ifcfg-eth1:0 //简单配置,很多参数都不需要设定,如下:
DEVICE=eth1:0 //修改为eth1:0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.220.33 //修改为33
NETMASK=255.255.255.0
# /etc/init.d/network restart
# ifconfig //配置正确的话,能列出eth1:0虚拟网卡的信息

 

3. heartbeat的安装和配置:
 【1】yum安装:# yum install -y heartbeat* libnet nginx   //依赖libnet,nginx是我们试验的服务,可以用yum安装。
 【2】master主机的配置:

# cd /usr/share/doc/heartbeat-3.0.4/   //注意版本的问题,可以不是3.0.4
# cp authkeys ha.cf haresources /etc/ha.d/ //拷贝3个核心配置文件
# cd /etc/ha.d

  (1)修改authkeys

# vim authkeys   //最后4行配置如下:
# auth 1
#1 crc //最不严谨
#2 sha1 HI! //最严谨
#3 md5 Hello! //中间值

  将第一行的auth后面的值修改成3,并且,打开最后一行的注释,即选择中间严谨的类型。

# chmod 600 authkeys   //修改权限为600,否则heartbeat无法启动

  (2)修改haresources

# vim haresources   //默认是全部注释的,所以可以在后面追加一行:
master 192.168.220.33/24/eth1:0 nginx //注意这里的ip是虚拟网卡的ip,即心跳线的配置ip,24规定网段,nginx是我们要试验的服务名称

  (3)修改ha.cf

# > ha.cf   //清空配置
# vim !$ //编辑,添加如下配置:
debugfile /var/log/ha-debug //排错日志路径
logfile /var/log/ha-log //运行日志
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 60
udpport 694
ucast eth1 192.168.220.22 //slave的网卡ip
auto_failback on
node master
node slave
ping 192.168.220.2 //仲裁地址,一般为路由器地址,或者一个稳妥的、服务稳定的ip
respawn hacluster /usr/lib64/heartbeat/ipfail //注意: 32bit的linux系统,路径为lib,而非lib64,如下:
########## ERROR: Client child command [/usr/lib/heartbeat/ipfail] is not executable ##############

  (4)复制配置文件到slave主机:

# scp authkeys ha.cf haresources slave:/etc/ha.d/

【3】slave主机的配置:    只需要修改ha.cf:

ucast eth1 192.168.220.22 --> ucast eth1 192.168.220.11   //将ip改成master的ip地址

【4】启动heartbeat(先master,后slave)

  (1)master主机

# /etc/init.d/heartbeat start
Starting High-Availability services: INFO: Running OK
CRITICAL: Resource 192.168.220.33/24/eth1:0 is active, and should not be!
CRITICAL: Non-idle resources can affect data integrity!
info: If you don't know what this means, then get help!
info: Read the docs and/or source to /usr/share/heartbeat/ResourceManager for more details.
CRITICAL: Resource 192.168.220.33/24/eth1:0 is active, and should not be!
CRITICAL: Non-idle resources can affect data integrity!
info: If you don't know what this means, then get help!
info: Read the docs and/or the source to /usr/share/heartbeat/ResourceManager for more details.
CRITICAL: Non-idle resources will affect resource takeback!
CRITICAL: Non-idle resources may affect data integrity!
Done.

  heartbeat会自动拉起nginx,不过第一次启动会比较慢。过一段时间(10S多),检查nginx是否被拉起:

# ps aux |grep nginx

  (2)修改nginx的index.html,方便查看机器的运行状况:

# > /usr/share/doc/nginx/html/index.html   //清空
# echo "masterMMMMMMMMMMMM" > !$

  如果nginx已经启动,在浏览器里面输入下面网址:192.168.220.33,应该可以得到回执结果(虚拟网卡的ip): masterMMMMMMMMMMMM

  (3)slave主机:
  正常情况下,nginx是不被拉起的,因为主机还没宕机,所以ps aux |grep nginx的结果是空。
修改nginx的index.html:

# > /usr/share/doc/nginx/html/index.html
# echo "slaveSSSSSSSSSSSSSS" > !$

  心跳线检测的原理是ping,那么我们将master的ping服务关闭,heartbeat检测到ping失败后,会将nginx的服务转给slave来执行:
  iptables -A INPUT -p icmp -j DROP   //ping命令来自icmp协议,关掉协议,ping失效。
  这时候,可以用tail -f /var/log/ha-log命令来查看heartbeat的处理过程:

  master的ha-log日志内容:

Jan 11 22:47:32 master heartbeat: [2574]: WARN: node 192.168.220.2: is dead    //ping 192.168.220.2路由器失败
Jan 11 22:47:32 master ipfail: [2601]: info: Status update: Node 192.168.220.2 now has status dead
Jan 11 22:47:32 master heartbeat: [2574]: info: Link 192.168.220.2:192.168.220.2 dead. //路由器挂了
harc(default)[2929]: 2016/01/11_22:47:32 info: Running /etc/ha.d//rc.d/status status
Jan 11 22:47:33 master ipfail: [2601]: info: NS: We are dead. :<
Jan 11 22:47:33 master ipfail: [2601]: info: Link Status update: Link 192.168.220.2/192.168.220.2 now has status dead
Jan 11 22:47:34 master ipfail: [2601]: info: We are dead. :< //哦,原来是我们自己挂了
Jan 11 22:47:34 master ipfail: [2601]: info: Asking other side for ping node count.
Jan 11 22:47:37 master ipfail: [2601]: info: Giving up because we were told that we have less ping nodes.
Jan 11 22:47:37 master ipfail: [2601]: info: Delayed giveup in 4 seconds.
Jan 11 22:47:41 master ipfail: [2601]: info: giveup() called (timeout worked)
Jan 11 22:47:42 master heartbeat: [2574]: info: master wants to go standby [all]
Jan 11 22:47:42 master heartbeat: [2574]: info: standby: slave can take our all resources //从可接管服务
Jan 11 22:47:42 master heartbeat: [2956]: info: give up all HA resources (standby). //放弃我们的工作
ResourceManager(default)[2969]: 2016/01/11_22:47:42 info: Releasing resource group: master 192.168.220.33/24/eth1:0 nginx
ResourceManager(default)[2969]: 2016/01/11_22:47:42 info: Running /etc/init.d/nginx stop //停掉nginx服务
ResourceManager(default)[2969]: 2016/01/11_22:47:42 info: Running /etc/ha.d/resource.d/IPaddr 192.168.220.33/24/eth1:0 stop
IPaddr(IPaddr_192.168.220.33)[3057]: 2016/01/11_22:47:42 INFO: IP status = ok, IP_CIP=
/usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_192.168.220.33)[3031]: 2016/01/11_22:47:42 INFO: Success
Jan 11 22:47:42 master heartbeat: [2956]: info: all HA resource release completed (standby).
Jan 11 22:47:42 master heartbeat: [2574]: info: Local standby process completed [all].
Jan 11 22:47:43 master heartbeat: [2574]: WARN: 1 lost packet(s) for [slave] [459:461]
Jan 11 22:47:43 master heartbeat: [2574]: info: remote resource transition completed. //远程资源传递完成
Jan 11 22:47:43 master heartbeat: [2574]: info: No pkts missing from slave! //没有遗失数据
Jan 11 22:47:43 master heartbeat: [2574]: info: Other node completed standby takeover of all resources. //slave节点完全接管我们的工作

   slave的ha-log内容:

Jan 12 11:48:17 slave ipfail: [115215]: info: Telling other node that we have more visible ping nodes.   //告知master,我们可以ping通
Jan 12 11:48:22 slave heartbeat: [115188]: info: master wants to go standby [all] //master想让我们接手
Jan 12 11:48:22 slave heartbeat: [115188]: info: standby: acquire [all] resources from master //接受来自master的资源
Jan 12 11:48:22 slave heartbeat: [115841]: info: acquire all HA resources (standby).
ResourceManager(default)[115854]: 2016/01/12_11:48:22 info: Acquiring resource group: master 192.168.220.33/24/eth1:0 nginx
/usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_192.168.220.33)[115882]: 2016/01/12_11:48:22 INFO: Resource is stopped
ResourceManager(default)[115854]: 2016/01/12_11:48:22 info: Running /etc/ha.d/resource.d/IPaddr 192.168.220.33/24/eth1:0 start //启动心跳线网卡
IPaddr(IPaddr_192.168.220.33)[116015]: 2016/01/12_11:48:22 INFO: Adding inet address 192.168.220.33/24 with broadcast address 192.168.220.255 to device eth1 (with label eth1:0) //虚拟网卡指向我们的网卡
IPaddr(IPaddr_192.168.220.33)[116015]: 2016/01/12_11:48:22 INFO: Bringing device eth1 up
IPaddr(IPaddr_192.168.220.33)[116015]: 2016/01/12_11:48:22 INFO: /usr/libexec/heartbeat/send_arp -i 200 -r 5 -p /var/run/resource-agents/send_arp-192.168.220.33 eth1 192.168.220.33 auto not_used not_used
/usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_192.168.220.33)[115989]: 2016/01/12_11:48:22 INFO: Success //网卡配置完毕
ResourceManager(default)[115854]: 2016/01/12_11:48:22 info: Running /etc/init.d/nginx start //启动nginx服务
Jan 12 11:48:23 slave heartbeat: [115841]: info: all HA resource acquisition completed (standby). //所有HA资源接手完毕
Jan 12 11:48:23 slave heartbeat: [115188]: info: Standby resource acquisition done [all]. //资源接手完毕
Jan 12 11:48:24 slave heartbeat: [115188]: info: remote resource transition completed. //远程资源传送完毕,完活儿!!!

  根据这些内容,我们可以知道heartbeat的运行过程;如此,在浏览器输入心跳线网卡地址的时候:192.168.220.33,得到如下返回结果:
slaveSSSSSSSSSSSSSS
  这时候,master的nginx被关闭,而slave的nginx正式接手,完成了服务的不间断提供。
  如果刚才不是用防火墙,而是执行命令,将heartbeat服务关闭,结果也是一样的,slave会接手nginx服务。那么,如果将ipatables刚设的规则去掉,或者重新开启heartbeat服务,会怎么样呢?

# ipatales -D INPUT -p icmp -j DROP
# service heartbeat start

   结果是,slave自动关闭nginx,master的nginx又重新启动,接手web服务,可以自己亲自试验一下。刷新浏览器,可以清楚的看到结果。

集群(heartbeat)搭建的更多相关文章

  1. centos HA高可用集群 heartbeat搭建 heartbeat测试 主上停止heartbeat服务 测试脑裂 两边都禁用ping仲裁 第三十二节课

    centos   HA高可用集群  heartbeat搭建 heartbeat测试  主上停止heartbeat服务  测试脑裂  两边都禁用ping仲裁  第三十二节课 heartbeat是Linu ...

  2. zookeeper集群的搭建以及hadoop ha的相关配置

    1.环境 centos7 hadoop2.6.5 zookeeper3.4.9 jdk1.8 master作为active主机,data1作为standby备用机,三台机器均作为数据节点,yarn资源 ...

  3. 朝花夕拾之--大数据平台CDH集群离线搭建

    body { border: 1px solid #ddd; outline: 1300px solid #fff; margin: 16px auto; } body .markdown-body ...

  4. Hadoop+Spark:集群环境搭建

    环境准备: 在虚拟机下,大家三台Linux ubuntu 14.04 server x64 系统(下载地址:http://releases.ubuntu.com/14.04.2/ubuntu-14.0 ...

  5. linux环境(CentOS-6.7)下redis集群的搭建全过程

    linux环境下redis集群的搭建全过程: 使用mount命令将光盘挂载到/mnt/cdrom目录下: [root@hadoop03 ~]# mount -t iso9660 -o ro /dev/ ...

  6. 【redis】 linux 下redis 集群环境搭建

    Redis集群 (要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下) 127.0.0.1:63791 ...

  7. 项目进阶 之 集群环境搭建(三)多管理节点MySQL集群

    上次的博文项目进阶 之 集群环境搭建(二)MySQL集群中,我们搭建了一个基础的MySQL集群,这篇博客咱们继续讲解MySQL集群的相关内容,同时针对上一篇遗留的问题提出一个解决方案. 1.单管理节点 ...

  8. [原]项目进阶 之 集群环境搭建(二)MySQL集群

    上次的博文中我们介绍了一下集群的相关概念,今天的博文我们介绍一下MySQL集群的相关内容. 1.MySQL集群简介 MySQL群集技术在分布式系统中为MySQL数据提供了冗余特性,增强了安全性,使得单 ...

  9. Spark 1.6.1分布式集群环境搭建

    一.软件准备 scala-2.11.8.tgz spark-1.6.1-bin-hadoop2.6.tgz 二.Scala 安装 1.master 机器 (1)下载 scala-2.11.8.tgz, ...

  10. Solr集群的搭建以及使用(内涵zookeeper集群的搭建指南)

    1   什么是SolrCloud SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud.当一个系统的索引数据量少的时候 ...

随机推荐

  1. Mac下安装hexo Error: Cannot find module './build/Release/DTraceProviderBindings 解决

    参考: Github:Mac 下已经装了hexo,仍旧报错 官方文档 $ npm install hexo --no-optional if it doesn't work try $ npm uni ...

  2. Ant Design of Angular

    1.按照官方的方法,报了这个 node_modules/rxjs/internal/types.d.ts(81,74): error TS1005: ';' expected.node_modules ...

  3. Sublime Text 3 配置文件路径修改

    Sublime Text 3安装完以后(安装过程不再演示),第一次打开会在C:\Users\admin\AppData\Roaming目录下创建一个Sublime Text 3目录用于存放Sublim ...

  4. Java回顾之网络通信

    在这篇文章里,我们主要讨论如何使用Java实现网络通信,包括TCP通信.UDP通信.多播以及NIO. TCP连接 TCP的基础是Socket,在TCP连接中,我们会使用ServerSocket和Soc ...

  5. kali debian linux 的samba 共享设置

    1) 首先,默认的源http.kali.org 会自动帮你找镜像,问题是他找到了 mirrors.neusoft.edu.cn , 这个源速度虽然快,却是有问题的. 安装不了cifs-utils 2) ...

  6. 流量监控iftop安装-CentOS7

    继之前撘的服务器后路由器一直崩溃,今天找到了原因.之前被下的木马并没有被删掉,而是一直在传输数据.占用了所有宽带. 官网(http://www.ex-parrot.com/pdw/iftop/down ...

  7. Intellij Idea 将java项目打包成jar

    1.菜单:File->project stucture 2.在弹窗最左侧选中Artifacts->"+",选jar,选择from modules with depend ...

  8. 素数对猜想之python3实现

    题目 让我们定义d​n​​为:d​n​​=p​n+1​​−p​n​​,其中p​i​​是第i个素数.显然有d​1​​=1,且对于n>1有d​n​​是偶数.“素数对猜想”认为“存在无穷多对相邻且差为 ...

  9. C++ 标准库和标准模板库(STL)

    转自原文http://blog.csdn.net/sxhelijian/article/details/7552499 一.C++标准库 C++标准库的内容分为10类,分别是(建议在阅读中,将你已经用 ...

  10. phalcon 设置cookie一直是httponly导致前端读取不到cookie的值

    解决办法: 修改配置如果不好使,则暂时降低phalcon版本为3.1.2. 注意设置cookie的参数secure的值为false,否则js还是读取不到cookie