Heartbeat原理及部署

  参考:https://blog.csdn.net/wzy0623/article/details/81188814

    http://www.mamicode.com/info-detail-1494631.html

    https://www.jianshu.com/p/12c4b3e43b65

  一,Heartbeat简介

  通过Heartbeat,可以将资源(ip以及程序服务等资源)从一台已经故障的计算机快速转移到另一台正常运转的机器上继续提供服务,一般称之为高可用服务。官方网址:http://www.linux-ha.org/wiki/Heartbeat
        通过修改Heartbeat的配置文件,可以指定一台Heartbeat服务器作为主服务器,另一台自动成为热备服务器。在热备服务器上面配置Heartbeat守护程序来监听来自主服务器的心跳信息。如果在规定时间内,无法监听到心跳信息,那么就启动故障转移,取得主服务器上的相关资源的所有权,接替主服务器继续不间断的提供服务,从而达到资源以及服务高可用的目的。一般故障切换时间在5~20s之间。Heartbeat还支持主主模式,及两台服务器互为主备。
        另外,和Keepalived的服务一样,Heartbeat高可用是服务器级别的,不是服务级别的。它可以监测以下系统问题:
  服务器宕机
  Heartbeat软件故障
  心跳连接线故障
  服务故障不会导致切换,但可以通过服务宕机把Heartbeat服务停掉,从而主机实现自动切换。至少需要两台主机才可以实现高可用服务。两台Heartbeat服务之间可以通过以下方式进行通信:
  穿行电缆,所谓的串口(首选,缺点是距离不能太远)
  一根以太网电缆两网卡直连(常用方式)
  以太网电缆,通过交换机等网络设备连接。(交换机可能出现问题等)
        Heartbeat通过ip地址接管和arp广播进行故障转移的。在主服务器故障时,备用节点接管资源后,会立即强制更新所有客户端本地的arp表,即清楚客户端本地缓存的故障服务器的vip和mac地址的解析记录,确保客户端和新的主服务器的对话。
        真实ip,又被称为管理ip,一般指配置在物理网卡上面的ip。在负载均衡高可用环境中,管理ip是不对外提供访问服务的,仅作为管理服务器使用,如SSH可以通过这个进行服务连接管理。VIP是虚拟ip,实际上就是eth0:X,x为0~255的任意数字,可以在一个网卡上面绑定多个别名。VIP当主服务器故障时,可以自动漂移到备用服务器。
  

  二,安装Heartbeat

  环境查看

 

 

   服务器规划

IP 用途 主机名
192.168.1.101 主服务器 hdp3
192.168.1.102 备服务器 hdp4

 

  初始配置

  禁用防火墙

systemctl disable firewalld

   关闭senlinux

  设置主机名并设置hosts文件 

  两台主机名不一样,hosts文件一样 

# cat /etc/hosts
192.168.1.101 hdp3
192.168.1.102 hdp4

   安装依赖包

yum -y install glib2-devel libtool-ltdl-devl net-snmp-devel bzip2-devel ncurses-devel openssl-devel libtool libxml2 libxml2-devel gettext bison flex zlib-devel mailx which libxslt docbook-dtds docbook-style-xsl PyXML shadow-utils opensp autoconf automake bzip2 e2fsprogs-devel libxslt-devel libtool-ltdl-devel make asciidoc libuuid-devel asciidoc

   下载安装包

    Heartbeat 3.0.6:http://hg.linux-ha.org/heartbeat-STABLE_3_0/archive/958e11be8686.tar.bz2
    Cluster Glue 1.0.12:http://hg.linux-ha.org/glue/archive/0a7add1d9996.tar.bz2
    Resource Agents 3.9.6:https://github.com/ClusterLabs/resource-agents/archive/v3.9.6.tar.gz

   添加 haclient 组和 hacluster 账户,这个用户主要用来配置respawn的。

groupadd haclient
useradd -g haclient -M -s /sbin/nologin hacluster

   安装Cluster Glue 1.0.12

tar -xf 0a7add1d9996.tar.bz2 
cd Reusable-Cluster-Components-glue--0a7add1d9996/
./autogen.sh
./configure --prefix=/usr/local/heartbeat  LIBS='/lib64/libuuid.so.1'
make && make install

  安装Resource Agents

tar -xf v3.9.6.tar.gz
cd resource-agents-3.9.6/
./autogen.sh
./configure --prefix=/usr/local/heartbeat  
make && make install

   安装heartbeat-3-0-6

tar -xf 958e11be8686.tar.bz2
cd Heartbeat-3-0-958e11be8686/
#设置,否则安装会报错
export CFLAGS="$CFLAGS -I/usr/local/heartbeat/include -L/usr/local/heartbeat/lib"
#删除配置文件的最后一行
sed -i '/^#define HA_HBCONF_DIR /d' /usr/local/heartbeat/include/heartbeat/glue_config.h
./bootstrap 
./configure --prefix=/usr/local/heartbeat  LIBS='/lib64/libuuid.so.1'
make && make install

   拷贝配置文件

cd /usr/local/heartbeat/share/doc/heartbeat
cp authkeys ha.cf haresources /usr/local/  heartbeat/etc/ha.d/

   设置配置文件权限及软连接

cd /usr/local/heartbeat/etc/ha.d
chmod 600 authkeys
ln -svf /usr/local/heartbeat/lib64/heartbeat/plugins/RAExec/* /usr/local/heartbeat/lib/heartbeat/plugins/RAExec/
ln -svf /usr/local/heartbeat/lib64/heartbeat/plugins/* /usr/local/heartbeat/lib/heartbeat/plugins/

   编辑配置文件

  192.168.1.101上的ha.cf文件内容如下

# cat /usr/local/heartbeat/etc/ha.d/ha.cf 
# 保存调试信息文件
debugfile /var/log/ha-debug         
# 日志文件
logfile /var/log/ha-log
# 表示使用系统日志            
logfacility local0 
# 心跳的时间间隔,单位秒                 
keepalive 1                         
# 超出该时间间隔未收到对方节点的心跳,则判定对方死亡
deadtime 30  
# 超出该时间间隔未收到对方节点的心跳,则发出警告记录到日志中                       
warntime 10 
#  在某系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔,取值至少为deadtime的2倍                         
initdead 120  
# 设置广播通信使用的端口,694为默认使用的端口号                           
udpport 694                         
# 传播心跳的广播播网卡信息
bcast eth0      
# 设置对方机器心跳检测的IP
# 第二列为网卡名 第三列为心跳IP,生产中心跳需要与数据网络分开                   
ucast eth0 192.168.1.102  
# 在该选项设为on的情况下,一旦主节点恢复运行,则自动获取资源并取代从节点         
auto_failback off              
# 配置主从的节点信息
node hdp3                           
node hdp4           
# 如果ping不通该地址,就认为当前断网,需要转移vip
ping 192.168.1.9                   
# 指定与heartbeat一同启动和关闭的进程,该进程被自动监视,遇到故障则重新启动。最常用的进程是ipfail,该进程用于检测和处理网络故障,需要配合ping语句指定的ping node来检测网络连接。如果你的系统是64bit,请注意该文件的路径
respawn hacluster /usr/local/heartbeat/libexec/heartbeat/ipfail  
# 指定用户和组
apiauth ipfail gid=haclient uid=hacluster

   注意:如果复制配置文件可能导致无法启动heartbeat,可能是因为字符编码或者空格等原因,可以直接在原配置文件修改

  192.168.1.102除了以下配置不一样其他一致

# 设置对方机器心跳检测的IP
# 第二列为网卡名 第三列为心跳IP,生产中心跳需要与数据网络分开                   
ucast eth0 192.168.1.101  

   编辑认证文件authkeys

  开启2认证,认证秘钥为HI!生产中使用复杂秘钥

# sed '/#/d' authkeys 
auth 2
2 sha1 HI!

   编辑资源配置文件

  192.168.1.101配置文件

#cat haresources 
hdp3 IPaddr::192.168.1.100/24/eth0

   解析:hdp3代表主机名,192.168.1.100为VIP 虚拟在网卡eth0上

  192.168.1.101配置文件

# cat haresources 
hdp4 IPaddr::192.168.1.100/24/eth0

   启动heartbeat

 systemctl start heartbeat

   主服务器上查看日志

 

 

 

   备主机没有虚拟VIP

 

   停止主服务器的heartbeat

systemctl stop heartbeat

   主服务器查看ha日志

 

   从服务器查看ha日志

 

   再次启动主服务器的heartbeat

  查看从服务器日志知道hdp3已经触及active状态

 

   从服务器VIP还保留,除非从服务器heartbeat停止主heartbeat应用正常则主会接收生成VIP

  三,使用heartbeat实现web高可用

  以上只实现的VIP漂移,下面通过heartbeat实现web高可用

  两台主机安装apache

yum -y install httpd

   找到httpd启动程序并负责到heartbeat管理目录

# which  httpd
/usr/sbin/httpd
cp /usr/sbin/httpd /usr/local/heartbeat/etc/ha.d/resource.d/

   使用heartbeat需要满足以下条件

1)httpd命令需要放在/etc/init.d/下或者/etc/ha.d/resource.d下

2)httpd命令需要具备可执行权限(x)

3)httpd必须支持如下启动方式

/etc/init.d/httpd

Usage: httpd {start|stop|restart|condrestart|try-restart|force-reload|reload|status|fullstatus|graceful|help|configtest}

   查看httpd帮助可以知道httpd可以使用命令启动,需要加参数-k

 

   

httpd -k start

   修改haresources

  两台服务器配置一致

# cat haresources 
hdp3 IPaddr::192.168.1.100/24/eth0 httpd::-k

   重启heartbeat查看日志

systemctl restart heartbeat

 

  主服务器

 

   注意:使用heartbeat可以管理应用资源,应用无需使用systemctl enable设置成开机自启动

  高可用测试,为了区分,在两台服务器写入不同的首页

#主服务器
echo hdp3>/var/www/html/index.html
#备服务器
echo hdp4>/var/www/html/index.html

   停止主服务器的heatbeat模拟中断

  备服务器查看日志

 

   web页面使用VIP访问变成备服务器的首页了

 

   生产中主备服务器后端内容是一致的,主服务器宕机对于用户来说无感知

   注意:如果heartbeat正常,VIP正常,httpd服务宕了,这个时候不会做高可用切换,写个简单的脚本定时或守护进程判断httpd服务,如果有问题,则停止heartbeat,主动使其上的业务切换到另一台

  

posted @ 2020-07-16 14:53  minseo  阅读(2576)  评论(0编辑  收藏  举报