使用HeartBeat实现高可用HA的配置过程详解

一、写在前面

HA即(high available)高可用,又被叫做双机热备,用于关键性业务。简单理解就是,有2台机器 A 和 B,正常是 A 提供服务,B 待命闲置,当 A 宕机或服务宕掉,会切换至B机器继续提供服务。常见的实现高可用的开源软件有 heartbeat 和 keepalived。

这样,一台 web 服务器一天24小时提供web服务,难免会存在 web 服务挂掉或服务器宕机宕机的情况,那么用户就访问不了服务了,这当然不是我们期望的。如果这样,有2台服务器,A对外提供 web 服务,B作为备用,如果A挂掉,那么B立刻替代A的位置去提供 web 服务,这样对用户来说是透明的。但是有个问题,服务器A的 ip 是 10.0.0.100,服务器B的 ip 是 10.0.0.101,显然向用户提供A或B的ip地址是不可行的,因为用户总不能去切换ip来访问的吧。这时heartbeat或keepalived可以提供一个虚拟IP:10.0.0.102,用户只需要访问 10.0.0.102,当A提供服务时,VIP 会设置在A服务器上,当B提供服务时,VIP会设置在B服务器上,这样就可以让用户通过访问 10.0.0.102 来获取web服务,即使A或B服务器切换也不影响用户的正常访问。

下面我们使用 heartbeat 来做 HA 集群,并且把 nginx 服务作为 HA 对应的服务。

二、准备实验环境

服务器A:
主机名:master
操作系统:CentOS6.8 64位
eth0网卡地址:192.168.0.18
eth1网卡地址:172.16.254.18

服务器B:
主机名:slave
操作系统:CentOS6.8 64位
eth0网卡地址:192.168.0.28
eth1网卡地址:172.16.254.28

虚拟VIP:
VIP:192.168.0.38

三、设置主机名

master节点设置hostname

#hostname master
#vim /etc/sysconfig/network
编辑配置文件:
HOSTNAME=master

slave节点设置hostname

# hostname slave
# vim /etc/sysconfig/network
编辑配置文件:
HOSTNAME=slave

四、关闭防火墙和selinux(2台节点都要操作)

关闭iptables

# iptables -F
# service iptables save
# service iptables stop

关闭selinux:

# setenforce
# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

五、配置hosts文件(2台节点都操作)

# vim /etc/hosts
增加内容如下:
192.168.0.18 master
192.168.0.28 slave

六、安装epel扩展源 (2台都操作)

# yum install -y epel-release

七、安装heartbeat (2台都操作)

# yum install -y heartbeat* libnet nginx

八、主master节点配置

1、拷贝配置文件:

# cd /usr/share/doc/heartbeat-3.0./
# cp authkeys ha.cf haresources /etc/ha.d/
# cd /etc/ha.d

2、修改authkeys

# vim authkeys
更改或增加如下内容:
auth
md5 Hello!
然后修改其权限
# chmod authkeys

3、编辑haresources文件

# vim haresources
加入下面一行:
master 192.168.0.38//eth0: nginx

说明:master为主节点hostname,192.168.0.38为vip,/24为掩码为24的网段,eth0:0为vip的设备名,nginx为heartbeat监控的服务,也是两台机器对外提供的核心服务。

4、编辑ha.cf

# vim ha.cf
修改为如下内容:
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive
deadtime
warntime
initdead
udpport
ucast eth1 172.16.254.28
auto_failback on
node master
node slave
ping 172.16.254.1
respawn hacluster /usr/lib64/heartbeat/ipfail

5、配置说明:

debugfile /var/log/ha-debug:该文件保存heartbeat的调试信息。
logfile /var/log/ha-log:heartbeat的日志文件。
keepalive 2:心跳的时间间隔,默认时间单位为秒s。
deadtime 30:超出该时间间隔未收到对方节点的心跳,则认为对方已经死亡。
warntime 10:超出该时间间隔未收到对方节点的心跳,则发出警告并记录到日志中。
initdead 60:在某系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔,取值至少为deadtime的2倍。
udpport 694:设置广播通信使用的端口,694为默认使用的端口号。
ucast eth1 172.16.254.28:设置对方机器心跳检测的网卡和IP。
auto_failback on:heartbeat的两台主机分别为主节点和从节点。主节点在正常情况下占用资源并运行所有的服务,遇到故障时把资源交给从节点由从节点运行服务。在该选项设为on的情况下,一旦主节点恢复运行,则自动获取资源并取代从节点,否则不取代从节点。
respawn heartbeat /usr/lib/heartbeat/ipfail:指定与heartbeat一同启动和关闭的进程,该进程被自动监视,遇到故障则重新启动。最常用的进程是ipfail,该进程用于检测和处理网络故障,需要配合ping语句指定的ping node来检测网络连接。如果你的系统是64bit,请注意该文件的路径。

九、把主节点上的三个配置文件拷贝到从节点

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

十、从节点slave编辑ha.cf

# vim /etc/ha.d/ha.cf
只需要更改一个地方如下:
ucast eth1 172.16..28改为ucast eth1 172.16.254.18

十一、启动heartbeat服务

配置完毕后,先master启动,后slave启动。

# service heartbeat start

十二、检查测试

# ifconfig
看是否有接口 eth0:
# ps aux | grep nginx
看是否有nginx进程

十三、测试方式1

主节点上故意禁ping

# iptables -I INPUT -p icmp -j DROP

十四、测试方式2

主节点停止heartbeat服务

# service heartbeat stop

十五、测试脑裂

主节点master和从节点slave都down掉eth1网卡

# ifdown eth1

linux双机热备份的更多相关文章

  1. MySQL双机热备份配置

    双机热备份,即能够把主数据库中所有的数据同时写到备份的数据库中,从而实现MySQL数据库的热备份. MySQL Replication是MySQL提供的一种主从备份的机制,并且整个复制备份过程是异步进 ...

  2. MySQL双机热备份

    系统: CentOS release 6.6 (Final) MySQL: mysql  Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) ...

  3. MySQL数据库双机热备份

    MySQL数据库双机热备份 1.mysql 数据库没有增量备份的机制 当数据量太大的时候备份是一个很大的问题.还好 mysql 数据库提供了一种主从备份的机制,其实就是把主数据库的所有的数据同时写到备 ...

  4. Microsoft SQL Server 双机热备份,实时同步

    1.两台服务器,主服务器,从服务器,两台服务器都安装SQL Server 2008R2并且安装相同表结构的数据库(需要实时同步的数据库) 2.主服务器数据库安装完毕,打开SQL Server 配置管理 ...

  5. centos双机热备份

    centos双机热备份 本机没有用到F5硬件,用到的是radware. 现在有2台服务器:192.168.2.66, 192.168.2.67 有一个公网ip:xxx.xxx.xx.203 将67上冷 ...

  6. mysql双机热备份的实现步骤

    MySQL 提供了数据库的同步功能,这对我们实现数据库的冗灾.备份.恢复.负载均衡等都是有极大帮助的.本文描述了常见的同步设置方法.<?xml:namespace prefix = o /> ...

  7. 在Linux 双机下自己手动实现浮动ip技术

    两台Linux服务器,一台为主机(IP:124.158.26.30)对外提供了一定的网络服务,另一台从机(IP:124.158.26.31)能提供相同的服务,但ip地址没有对外部公开客户端连接的都是1 ...

  8. MYSQL双机热备份的配置实施(问题总结)

    为了实现MYSQL数据库的冗灾.备份.恢复.负载均衡等功能,喻名堂这两天一直在学习和研究mysql的双机热备,其实MYSQL的双机热备就是使用MYSQL同步功能两种方式里面的“主-主”同步方式实现的. ...

  9. Linux双机信任,适用统一安装

    一.生成建立安全信任关系的证书. 在A机root用户下执行ssh-keygen命令,在需要输入的地方,直接回车, # ssh-keygen -t rsa 注:直接回车就行 二.查看生成密钥的文件 # ...

随机推荐

  1. PHP--极光推送

    /* * @param * @param 系统通知type为1 * @param 聊天消息 type为2 * @param 提醒付款 接单者确认订单 接单者取消订单 接单 type 为3 * @par ...

  2. JAVA遇见HTML——JSP篇(JavaBeans)

    1.像使用普通java类一样,创建javabean实例,利用构造方法创建实例 跟表单关联,“*”表示根据名称来进行匹配,就是根据表单所提交过来的参数的名字和Javabean当中的属性名字来进行一一匹配 ...

  3. 安装卸载JDK

    卸载JDK 删除Java的安装目录 删除JAVA_HOME 删除path下关于Java的目录 java-version 安装JDK 百度搜索JDK8,找到下载地址 同意协议 下载电脑对应的版本 双击安 ...

  4. Java锁--LockSupport

    转载请注明出处:http://www.cnblogs.com/skywang12345/p/3505784.html LockSupport介绍 LockSupport是用来创建锁和其他同步类的基本线 ...

  5. hudson 使用节点打包出现ClassNotFoundException: org.jvnet.hudson.maven3.agent.Maven3Main 错误

    java.lang.NoClassDefFoundError: org/jvnet/hudson/maven3/agent/Maven3Main Caused by: java.lang.ClassN ...

  6. 调整swt table的行高

    table.addListener(SWT.MeasureItem, new Listener() { public void handleEvent(Event event) { // 设置行高度 ...

  7. 获取TableViewer里面的所有TableViewerColumn

    private TableViewerColumn[] getTableViewerColumns(TableViewer tableViewer) { TableColumn[] columns = ...

  8. .net常用属性

    1.   在ASP.NET中专用属性:               获取服务器电脑名:Page.Server.ManchineName               获取用户信息:Page.User   ...

  9. Dockerfile创建tomcat和jdk,并发布java项目

    1.准备好需要的jdk 和 tomcat kun@ubuntu:~$ cd tomcat-docker/ kun@ubuntu:~/tomcat-docker$ ll total drwxrwxr-x ...

  10. SpringMVC配置 事务管理

    1.确保持久层配置完毕 2.pom.xml里追加spring-tx 3.application-context.xml追加 <bean id="transactionManager&q ...