背景需求:
使用heartbeat来做HA集群,并且把nginx服务作为HA对应的服务。master1为主,另一个是备。
需要在主备上漂移的资源有两个:VIP和nginx服务
 
准备两台机器:
master1: 192.168.42.12        10.1.1.1(心跳)
master2: 192.168.42.13        10.1.1.2(心跳)
vip: 192.168.42.14
 
 
以下是IP配置:
 
(上图可以看到没有配置vip:两台机器都不必手动添加vip,交给heartbeat去自动添加即可)
 
1.以下5步操作在两台机器上完成:
 
1). /etc/init.d/iptables stop
 
2). setenforce 0
 
3). vi /etc/hosts               //增加以下内容
192.168.42.12 master1
192.168.42.13 master2
保存退出
 
4). 安装epel扩展源:
yum -y install epel-release
 
5). 安装heartbeat和nginx
yum -y install heartbeat nginx
 
2.在master1上配置:
 
cd /usr/share/doc/heartbeat-3.0.4/
cp authkeys ha.cf haresources /etc/ha.d/
cd /etc/ha.d
vi authkeys
auth 3
md5 Hello!
保存退出。
 
chmod 600 authkeys
 
vi haresources        //加入如下语句
master1 IPaddr::192.168.42.14/25/eth0:0 nginx        //这里填写需要漂移的资源:VIP和nginx服务。
 
//设定VIP为192.168.42.14/25,设置在eth0:0接口上,启动VIP时启动NGINX服务,这里的NGINX服务必须是能够直接在/etc/init.d/目录下启动。
保存退出。如下图所示:
 
 
vi ha.cf //改为如下内容:
debugfile /var/log/ha-debug         //设定debug文件目录
logfile /var/log/ha-log            //设定日志文件目录
logfacility local0
keepalive 2            //设定检查时间间隔为2s
deadtime 30            //设定死亡时间为30s
warntime 10            //设定告警时间为10s(10s以上没收到对方的回应就报警)
initdead 60            //设定初始化时间为60s
udpport 694            //启动udp监听端口号
ucast eth1 10.1.1.2            //填写对方的心跳网卡及心跳IP
auto_failback on            //启动故障恢复模式(主在恢复正常后会自动接管资源)
node master1            //指定两个节点,主节点必须写在前面
node master2
ping 192.168.42.1            //指定一个第三方的仲裁节点,这里写的是网关
respawn hacluster /usr/lib64/heartbeat/ipfail            //使用这个脚本去侦听对方是否还活着(使用的是ICMP报文检测)
保存退出。如下图所示:
 
 
3.把master1上的三个文件复制到master2上:
 
cd /etc/ha.d
scp authkeys ha.cf haresources root@master2:/etc/ha.d
 
4.修改master2上的ha.cf文件:
 
vi /etc/ha.d/ha.cf
ucast eth1 10.1.1.2 ===》 ucast eth1 10.1.1.1            //只改一处即可,填写对方的心跳网卡及心跳IP
保存退出。如下图所示:
 
5.启动heartbeat:
 
先主后从。
/etc/init.d/heartbeat start
 
启动后master1会出现一个eth0:0及VIP,并自动启动nginx;而master2则不会启动eth0:0和nginx。如下图所示:
 
 
 
 
 
6.测试:当master1关机后,是否会切换nginx:
 
 
可以发现,当master1关机后,master2立即启动了自身的nginx来接管业务。
 
master1系统重启后,heartbeat恢复工作,自动将nginx开启,如下图所示:
 
 
并且VIP已移到master1上:如下图所示:
 
 
而此时的master2上的nginx已经被heartbeat关掉了,VIP也没了,如下图所示:
 
 
相关日志:
 
 
实验操作成功。
 
另外:当master1上的heartbeat关掉后,master2会自动接管master1上的应用和VIP,而master1的heartbeat恢复工作后,master2上的应用和VIP自动退出,交还给master1。
 

以手动方式完全释放master1的heartbeart对资源的管理权:
 
master1上执行:
/usr/share/heartbeat/hb_standby
执行后,master1上的资源被释放,master2会立即接管资源。
 
以手动方式让master1强行接管master2资源管理权:
master1上执行:
/usr/share/heartbeat/hb_takeover
执行后,master2上的资源被释放,master1会立即接管资源。
 

扩展:在主上面的心跳线接口给down掉之后,备上面因为检测不到主还活着,于是自己成为主,启动了虚拟IP接口,接替了主的工作。当把主的心跳线接口up起来之后备主动把虚拟IP交还给主,自己成为备。
然后我将主上面的对外接口给down之后,备因为检测到心跳接口还是正常的,还以为主还活着,于是高可用就失败了。当主把对外接口up之后需要重新启动heartbeat服务才能从备上面把工作接管过来。
由这里可以看出心跳线是至关重要的,心跳线挂了之后将有可能导致脑裂行为的发生(即主和备一起在抢占虚拟IP的控制权),实际环境中最好给心跳线做冗余,使用以太端口捆绑保障心跳线的健壮性。
同时,假如主的对外接口挂了,但是心跳线没有挂,备就无法检测到主挂了,也就无法实现高可用了。

CentOS6.6安装heartbeat配置资源切换操作笔记实现高可用(原创)的更多相关文章

  1. centos7系统下nginx安装并配置开机自启动操作

    准备工作 我的centos7系统是最小化安装的, 缺很多库, 首先安装必须的运行库 ? 1 2 3 4 5 6 7 8 9 10 11 yum install wget gcc gcc-c++ pcr ...

  2. HAProxy基于Centos6.5安装及配置

    一.使用2.6内核Linux,配置sysctl参数 vi /etc/sysctl.conf #haproxy confignet.ipv4.tcp_tw_reuse = 1net.ipv4.ip_lo ...

  3. Redis简介、安装、配置、启用学习笔记

    前一篇文章有介绍关系型数据库和非关系型数据库的差异,现在就来学习一下用的较广的非关系型数据库:Redis数据库 Redis 简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-v ...

  4. 使用Keepalived配置主从热备实现Nginx高可用(HA)

    Keepalived 简要介绍 Keepalived 是一种高性能的服务器高可用或热备解决方案,Keepalived 可以用来防止服务器单点故障的发生,通过配合 Nginx 可以实现 web 前端服务 ...

  5. linux下配置redis4.0.2主从复制以及高可用

    一.环境 三台服务器分别为: 172.28.18.75/172.28.18.103/172.28.18.104 在三台服务器上分别部署一个redis节点以及一个sentinel节点 二.主从复制配置 ...

  6. docker toolbox的redis 配置主从及哨兵模式保证高可用

    redis 的缓存中间件安装方法,简单举例如下: 环境: docker toolbox 一   主从模式1 搜索redis镜像  docker search redis2 拉取镜像docker pul ...

  7. Redis 安装,配置以及数据操作

    Nosql介绍 Nosql:一类新出现的数据库(not only sql)的特点 不支持SQL语法 存储结构跟传统关系型数据库中那种关系表完全不同,nosql中存储的数据都是k-v形式 Nosql的世 ...

  8. CentOS6.5 安装Sphinx 配置MySQL数据源

      前提安装完mysql,并创建测试表和数据 DROP TABLE IF EXISTS `documents`; CREATE TABLE IF NOT EXISTS `documents` ( `i ...

  9. CentOS6.4 安装Sphinx 配置MySQL数据源

    前提安装完mysql,并创建测试表和数据 DROP TABLE IF EXISTS `documents`; CREATE TABLE IF NOT EXISTS `documents` ( `id` ...

随机推荐

  1. AirSim的搭建和使用

    由于自己使用设备拍摄的数据质量太差,所以决定使用AirSim这个框架来生成数据.之所以使用这个框架,是因为之前同事用其生成了一些有效数据. 当然,我是不可能把我搭建的步骤一一写出来的,一来是因为太麻烦 ...

  2. asp之GetArray提取链接地址,以$Array$分隔的代码

    '================================================== '函数名:GetArray '作 用:提取链接地址,以$Array$分隔 '参 数:ConStr ...

  3. 4.airflow测试

    1.测试sqoop任务1.1 测试全量抽取1.1.1.直接执行命令1.1.2.以shell文件方式执行sqoop或hive任务1.2 测试增量抽取2.测试hive任务3.总结 当前生产上的任务主要分为 ...

  4. ES6的新特性(20)—— Module 的加载实现

    Module 的加载实现 上一章介绍了模块的语法,本章介绍如何在浏览器和 Node 之中加载 ES6 模块,以及实际开发中经常遇到的一些问题(比如循环加载). 浏览器加载 传统方法 HTML 网页中, ...

  5. <浪潮之巅>读书笔记

    <浪潮之巅>这本书通过介绍AT&T.IBM.微软.苹果.google等IT公司的发展历史,揭示科技工业的胜败规律,说明这些公司是如何在每一次科技革命浪潮到来时站在浪尖,实现跨越式发 ...

  6. bat获取当前日期的前一天

    批处理做这样的事情很麻烦,你可以用cscript来实现,比如把下面的内容保存为a.js文件:var d=new Date();d.setTime(d.getTime()-24*3600*1000);v ...

  7. Struts2:Struts2在jsp中使用标签时值的获取

    在OGNL的使用中,需要访问一系列的对象,这些对象放在OGNL的context中,context是一个Map结构,实际上它和ActionContext是相应的. 当用户发送请求时,struts会创建A ...

  8. 使用ssh公钥登陆

    记录一下使用的具体命令,具体参考: Centos设置禁止密码登录而只使用密钥登录SSH方法  优先参考这个. ssh使用公钥授权不通过的问题解决 Xshell配置ssh免密码登录-密钥公钥(Publi ...

  9. Windows下IntelliJ IDEA中调试Spark Standalone

    参考:http://dataknocker.github.io/2014/11/12/idea%E4%B8%8Adebug-spark-standalone/ 转载请注明来自:http://www.c ...

  10. 补发9.26“天天向上”团队Scrum站立会议

    组长:王森 组员:张金生 张政 栾骄阳 时间:2016.09.26 地点:612寝 组员 已完成 未完成 王森 可行性分析 找出设计亮点 张金生 寻找UI素材 设计用户操作 张政 搭建环境 基础逻辑框 ...