Heartbeat是High-Availability Linux Project (Linux下的高可用性项目)的产物,是一套提供防止业务主机因不可避免的意外性或计划性宕机问题的高可用性软件。Heartbeat可以从Linux-HA 项目Web 站点免费获得,它提供了所有HA (高可用性)系统所需要的基本功能,如启动和停止资源、监测群集中系统的可用性、在群集中的节点间转移共享IP 地址的所有者等。它通过串行线、以太网接口或同时使用两者来监测特定服务(或多个服务)的运行状况。

Heartbeat实现了HA 功能中的核心功能――心跳,将Heartbeat软件同时安装在两台服务器上,用于监视系统的状态,协调主从服务器的工作,维护系统的可用性。它能侦测服务器应用级系统软件、硬件发生的故障,及时地进行错误隔绝、恢复;通过系统监控、服务监控、IP自动迁移等技术实现在整个应用中无单点故障,简单、经济地确保重要的服务持续高可用性。

Heartbeat采用虚拟IP地址映射技术实现主从服务器的切换对客户端透明的功能。


实验环境

centos6.5_x64

master eth0 192.168.1.128

eth1 192.168.1.129

slave eth0 192.168.1.130

eth1 192.168.1.131

vip 192.168.1.200


实验软件

epel-release-6-8.noarch.rpm

Nginx.x86_64

heartbeat.x86_64


软件安装

rpm -ivh epel-release-6-8.noarch.rpm

yum install -y libnet heartbeat* Nginx* glib*


vim /etc/hosts

centos6 192.168.1.128 添加两行配置 master/slave相同操作 uname -n名字

centos6-1 192.168.1.130


less /etc/hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

centos6 192.168.1.128


ssh-keygen -t rsa master/slave相同操作

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa):

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.


scp /root/.ssh/id_rsa.pub root@192.168.1.128:/root/.ssh/authorized_keys

scp /root/.ssh/id_rsa.pub root@192.168.1.130:/root/.ssh/authorized_keys ssh信任


scp /root/aa.txt root@192.168.1.128:/root/

aa.txt 100% 0 0.0KB/s 00:00

scp /root/bb.txt root@192.168.1.130:/root/

bb.txt 100% 0 0.0KB/s 00:00

如果使用scp命令没有提示输入密码表示ssh信任成功


service Nginx start

chkconfig --level 35 Nginx on


cd /usr/share/doc/heartbeat-3.0.4/ master/slave相同操作

cp authkeys ha.cf haresources /etc/ha.d/


vim /etc/ha.d/authkeys

#auth 1

#1 crc

#2 sha1 HI!

#3 md5 Hello! 找到


#auth 1

auth 3

#1 crc

#2 sha1 HI!

3 md5 Hello! 改为 第一种是CRC循环冗余校验,第二种是SHA1哈希算法,第三种是MD3哈希算法

chmod 600 /etc/ha.d/authkeys


vim /etc/ha.d/haresources

centos6 192.168.1.200/24/eth0:0 Nginx master端配置

centos6-1 192.168.1.200/24/eth0:0 Nginx slave端配置

设定虚拟IP和对应的接口,并且指定启动虚拟IP时启动Nginx服务


vim /etc/ha.d/ha.cf

#debugfile /var/log/ha-debug 找到

debugfile /var/log/ha-debug 改为

touch /var/log/ha-debug


#logfile /var/log/ha-log 找到

logfile /var/log/ha-log 改为 日志文件位置

touch /var/log/ha-log


logfacility local0


#keepalive 2 找到 检查时间间隔

keepalive 2 改为


#deadtime 30 找到 设定死亡时间

deadtime 30 改为


#warntime 10 找到 设定告警时间

warntime 10 改为


#initdead 120 找到 设定初始化时间

initdead 20 改为

#udpport 694 找到

udpport 694 改为 udp端口号

#ucast eth0 192.168.1.2 找到

ucast eth1 192.168.1.131 改为 master端配置eth1为心跳线ip 192.168.1.131为slave端ip

ucast eth1 192.168.1.129 改为 slave端配置 eth1为心跳线ip 192.168.1.129为master端ip


auto_failback on 找到启动抢占模式(主在挂了以后重新起来后备会自动切换成备)auto_failback auto_failback on改为

node centos6 指定负载节点

node centos6-1

#ping 10.10.10.254 找到

ping 192.168.1.101 改为

#respawn hacluster /usr/lib/heartbeat/ipfail 找到

respawn hacluster /usr/lib64/heartbeat/ipfail 改为

chmod 600 /etc/ha.d/ha.cf


service heartbeat start master/slave端相同操作

netstat -tuplna | grep heartbeat

udp 0 0 0.0.0.0:56611 0.0.0.0:* 6831/heartbeat: wri

udp 0 0 0.0.0.0:694 0.0.0.0:* 6831/heartbeat: wri

ps -ef | grep heartbest

root 8034 8015 0 00:27 pts/0 00:00:00 grep heartbest


tail -f /var/log/ha-log

ip-request-resp(default)[12892]: 2017/10/25_01:25:59 received ip-request-resp 192.168.1.200/24/eth0:0 OK yes

ResourceManager(default)[12915]: 2017/10/25_01:26:00 info: Acquiring resource group: centos6 192.168.1.200/24/eth0:0 Nginx

/usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_192.168.1.200)[12943]: 2017/10/25_01:26:00 INFO: Resource is stopped

ResourceManager(default)[12915]: 2017/10/25_01:26:00 info: Running /etc/ha.d/resource.d/IPaddr 192.168.1.200/24/eth0:0 start

IPaddr(IPaddr_192.168.1.200)[13076]: 2017/10/25_01:26:00 INFO: Adding inet address 192.168.1.200/24 with broadcast address 192.168.1.255 to device eth0 (with label eth0:0)

IPaddr(IPaddr_192.168.1.200)[13076]: 2017/10/25_01:26:00 INFO: Bringing device eth0 up

IPaddr(IPaddr_192.168.1.200)[13076]: 2017/10/25_01:26:00 INFO: /usr/libexec/heartbeat/send_arp -i 200 -r 5 -p /var/run/resource-agents/send_arp-192.168.1.200 eth0 192.168.1.200 auto not_used not_used


ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNowN

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: eth1: <broADCAST,MULTICAST,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:0c:29:45:17:73 brd ff:ff:ff:ff:ff:ff

inet 192.168.1.129/24 brd 192.168.1.255 scope global eth1

inet6 fe80::20c:29ff:fe45:1773/64 scope link

valid_lft forever preferred_lft forever

3: eth0: <broADCAST,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:0c:29:45:17:69 brd ff:ff:ff:ff:ff:ff

inet 192.168.1.128/24 brd 192.168.1.255 scope global eth0

inet 192.168.1.200/24 brd 192.168.1.255 scope global secondary eth0:0

inet6 fe80::20c:29ff:fe45:1769/64 scope link

valid_lft forever preferred_lft forever master端



ip addr

1: lo: <LOOPBACK,LOWER_UP> mtu 65536 qdisc noqueue state UNKNowN

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: eth0: <broADCAST,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:0c:29:3d:5b:1b brd ff:ff:ff:ff:ff:ff

inet 192.168.1.130/24 brd 192.168.1.255 scope global eth0

inet 192.168.1.200/24 brd 192.168.1.255 scope global secondary eth0:0

inet6 fe80::20c:29ff:fe3d:5b1b/64 scope link

valid_lft forever preferred_lft forever

3: eth1: <broADCAST,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:0c:29:3d:5b:25 brd ff:ff:ff:ff:ff:ff

inet 192.168.1.131/24 brd 192.168.1.255 scope global eth1

inet6 fe80::20c:29ff:fe3d:5b25/64 scope link

valid_lft forever preferred_lft forever slave端

看到eth0:0 说明配置成功


echo Nginx_master > /usr/share/Nginx/html/index.html master端

echo Nginx_slave > /usr/share/Nginx/html/index.html slave端

Nginx -s reload

750b3664141c30ea13eea498bc2278cb.jpg-wh_

centos6 搭建heartbeat的更多相关文章

  1. iOS Framework弱链接:未定义符号错误

    我正在构建我自己的框架,建议将其分发给其他开发人员以包括他们的项目.该框架可选地链接某些框架.问题是,当我将我的框架链接到在BuildPhases中不包含CoreLocation的真实独立项目时,我在尝试构建此主机项目时遇到链接器错误,如“未定义的架构符号”是否有可能避免这种情况,因为我不想强迫开发人员将CoreLocation包含在他们的项目中?实际上,我知道这是可能的,但我该怎么做呢?

  2. macos – 运行brew命令充满了’同意Xcode / iOS许可证需要管理员权限,请通过sudo以root身份重新运行.’

    所以我跑了:如果滚动到底部,可以输入“同意”,然后就可以了.

  3. ios – 检查互联网连接是否可用于swift

    目前,当我的应用程序尝试在没有互联网连接的情况下对用户的位置进行地理位置分配我有点新的快速和ios编程–我的道歉.解决方法不是一个完整的网络检查库,但我发现了this简单的方法来检查网络可用性.我设法把它翻译成Swift,并在这里是最终的代码.它适用于3G和WiFi连接.我也将其上传到我的Github一个工作的例子.如果您正在寻找一种简单的方法来检查纯粹在Swift中的网络可用性,您可以使用它.

  4. ios – 检查Internet连接可用性?

    在开始与我的iPhone应用程序中的服务通信之前,我只需要检查互联网连接的可用性.我使用Swift1.2和Xcode6作为我的开发环境….我的问题是,我对于iOS开发是相当新鲜的,不太确定使用这个逻辑来完成它是多么好可靠.该课程中的大部分内容完全不清楚,但是我做的小测试工作很好!

  5. ios – 检查快速操作可用性

    我正在使用仅在IOS9中支持的主屏幕快速操作.如果在IOS8中使用,则使用常量UIApplicationLaunchOptionsShortcutItemKey将崩溃.检查是否支持快速操作的正确方法是什么?一种方法是通过systemVersion检查IOS9,但我希望有更好的方法.[[UIDevicecurrentDevice]systemVersion]解决方法在目标C中,您可以检查是否存在类.

  6. ios – 仅适用于iPad的Settings.bundle?

    我有一种情况需要通过设置应用程序为我的应用程序提供一个设置.我的应用程序是通用的,但这个特殊的设置只在iPad上有意义,所以我只希望我的应用程序显示在iPad上的设置中.这可能吗?

  7. ios – 在Swift应用程序中支付给另一个用户

    我有这个问题.我正在Swift中制作一个销售用户图像和视频的iOS应用程序.我有自己的服务器,所以所有媒体都保存在那里.但现在我已经到了一个点,我需要让用户可以使用信用卡或PayPal帐户从其他用户那里购买一些内容.其他用户可以在地图上找到,他们已将他们的付款信息添加到他们的个人资料中(其他人看不到),以便可以进行交易.我已经对这个主题做了一些研究,我知道在Swift中付费的强大工具是Stripe

  8. ios – Swift 4设置捆绑,获取默认值

    我创建了一个包含大约8个切换开关的设置包.我想要做的是从设置包中获取默认值.目前我现在有这两种方法:我在viewDidLoad中调用这些方法然而,这并没有得到我的默认值.如果我关闭应用程序,打开设置,调整设置并重新打开应用程序,这会产生正确的值.有没有获得默认设置?

  9. Swift调用OC和C

    Swift文件:main.swiftOC文件:Root.hRoot.mC函数文件:Fun.c桥接文件:工程名称-Bridging-Header.h

  10. OC调用Swift

    修改main.m文件OC文件:Root.hRoot.mSwift文件:Person.swift

随机推荐

  1. 在airgapped(离线)CentOS 6系统上安装yum软件包

    我有一个CentOS6系统,出于安全考虑,它已经被空气泄漏.它可能从未连接到互联网,如果有,它很长时间没有更新.我想将所有.rpm软件包放在一个驱动器上,这样它们就可以脱机安装而无需查询互联网.但是,我在测试VM上遇到的问题是,即使指定了本地路径,yum仍然会挂起并尝试从在线存储库进行更新.另外,有没有办法使用yum-utils/yumdownloader轻松获取该包的所有依赖项和所有依赖项?目前

  2. centos – 命名在日志旋转后停止记录到rsyslog

    CentOS6.2,绑定9.7.3,rsyslog4.6.2我最近设置了一个服务器,我注意到在日志轮换后,named已停止记录到/var/log/messages.我认为这很奇怪,因为所有日志记录都是通过rsyslog进行的,并且named不会直接写入日志文件.这更奇怪,因为我在更新区域文件后命名了HUPed,但它仍然没有记录.在我停止并重新启动命名后,记录恢复.这里发生了什么?

  3. centos – 显示错误的磁盘大小

    对于其中一个磁盘,Df-h在我的服务器上显示错误的空白区域:Cpanel表明它只有34GB免费,但还有更多.几分钟前,我删除了超过80GB的日志文件.所以,我确信它完全错了.fdisk-l/dev/sda2也显示错误:如果没有格式化,我该怎么做才能解决这个问题?并且打开文件描述符就是它需要使用才能做到这一点.所以…使用“lsof”并查找已删除的文件.重新启动写入日志文件的服务,你很可能会看到空间可用.

  4. 如何在centos 6.9上安装docker-ce 17?

    我目前正在尝试在centOS6.9服务器上安装docker-ce17,但是,当运行yuminstalldocker-ce时,我收到以下错误:如果我用跳过的标志运行它我仍然得到相同的消息,有没有人知道这方面的方法?

  5. centos – 闲置工作站的异常负载平均值

    我有一个新的工作站,具有不寻常的高负载平均值.机器规格是:>至强cpu>256GB的RAM>4x512GBSSD连接到LSI2108RAID控制器我从livecd安装了CentOS6.564位,配置了分区,网络,用户/组,并安装了一些软件,如开发工具和MATLAB.在启动几分钟后,工作站负载平均值的值介于0.5到0.9之间.但它没有做任何事情.因此我无法理解为什么负载平均值如此之高.你能帮我诊断一下这个问题吗?

  6. centos – Cryptsetup luks – 检查内核是否支持aes-xts-plain64密码

    我在CentOS5上使用cryptsetupluks加密加密了一堆硬盘.一切都很好,直到我将系统升级到CentOS6.现在我再也无法安装磁盘了.使用我的关键短语装载:我收到此错误:在/var/log/messages中:有关如何装载的任何想法?找到解决方案问题是驱动器使用大约512个字符长的交互式关键短语加密.出于某种原因,CentOS6中的新内核模块在由旧版本创建时无法正确读取512个字符的加密密钥.似乎只会影响内核或cryptsetup的不同版本,因为在同一系统上创建和打开时,512字符的密钥将起作用

  7. centos – 大量ssh登录尝试

    22个我今天登录CentOS盒找到以下内容这是过去3天内的11次登录尝试.WTF?请注意,这是我从我的提供商处获得的全新IP,该盒子是全新的.我还没有发布任何关于此框的内容.为什么我会进行如此大量的登录尝试?是某种IP/端口扫描?基本上有4名匪徒,其中2名来自中国,1名来自香港,1名来自Verizon.这只发生在SSH上.HTTP上没有问题.我应该将罪魁祸首子网路由吗?你们有什么建议?

  8. centos – kswap使用100%的CPU,即使有100GB的RAM也可用

    >Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

  9. centos – Azure将VM从A2 / 3调整为DS2 v2

    我正在尝试调整前一段时间创建的几个AzureVM,从基本的A3和标准A3到标准的DS2v2.我似乎没有能力调整到这个大小的VM.必须从头开始重建服务器会有点痛苦.如果它有所不同我在VM中运行CentOS,每个都有一个带有应用程序和操作系统的磁盘.任何人都可以告诉我是否可以在不删除磁盘的情况下删除VM,创建新VM然后将磁盘附加到新VM?

  10. centos – 广泛使用RAM时服务器计算速度减慢

    我在非常具体的情况下遇到服务器速度下降的问题.事实是:>1)我使用计算应用WRF>2)我使用双XeonE5-2620v3和128GBRAM(NUMA架构–可能与问题有关!

返回
顶部