Chinaunix首页 | 论坛 | 博客
  • 博客访问: 37936
  • 博文数量: 13
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 252
  • 用 户 组: 普通用户
  • 注册时间: 2014-01-21 18:30
文章分类
文章存档

2014年(13)

我的朋友

分类: 网络与安全

2014-04-18 09:11:25

一、简述
Heartbeat通过插件技术实现了集群间的串口、多播、广播和组播通信,在配置的时候可以根据通信媒介选择采用的通信协议,heartbeat启动的时候检查这些媒介是否存在,如果存在则加载相应的通信模块。这样开发人员可以很方便地添加新的通信模块,比如添加红外线通信模块。
对于高可用集群系统,如果集群间的通信不可靠,那么很明显集群本身也不可靠。Heartbeat采用UDP协议和串口进行通信,它们本身是不可靠的,可靠性必须由上层应用来提供。那么怎样保证消息传递的可靠性呢?
Heartbeat通过冗余通信通道和消息重传机制来保证通信的可靠性。Heartbeat检测主通信链路工作状态的同时也检测备用通信链路状态,并把这一状态报告给系统管理员,这样可以大大减少因为多重失效引起的集群故障不能恢复。例如,某个工作人员不小心拨下了一个备份通信链路,一两个月以后主通信链路也失效了,系统就不能再进行通信了。通过报告备份通信链路的工作状态和主通信链路的状态,可以完全避免这种情况。因为这样在主通信链路失效以前,就可以检测到备份工作链路失效,从而在主通信链路失效前修复备份通信链路。
Heartbeat通过实现不同的通信子系统,从而避免了某一通信子系统失效而引起的通信失效。最典型的就是采用以太网和串口相结合的通信方式。这被认为是当前的最好实践,有几个理由可以使我们选择采用串口通信:
(1)IP通信子系统的失效不太可能影响到串口子系统。
(2)串口不需要复杂的外部设备和电源。
(3)串口设备简单,在实践中非常可靠。
(4)串口可以非常容易地专用于集群通信。
(5)串口的直连线因为偶然性掉线事件很少。
不管是采用串口还是以太网IP协议进行通信,heartbeat都实现了一套消息重传协议,保证消息包的可靠传递。实现消息包重传有两种协议,一种是发送者发起,另一种是接收者发起。
对于发送者发起协议,一般情况下接收者会发送一个消息包的确认。发送者维护一个计时器,并在计时器到时的时候重传那些还没有收到确认的消息包。这种方法容易引起发送者溢出,因为每一台机器的每一个消息包都需要确认,使得要发送的消息包成倍增长。这种现像被称为发送者(或者ACK)内爆(implosion)。
对于接收者发起协议,采用这种协议通信双方的接收者通过序列号负责进行错误检测。当检测到消息包丢失时,接收者请求发送者重传消息包。采用这种方法,如果消息包没有被送达任何一个接收者,那么发送者容易因NACK溢出,因为每个接收者都会向发送者发送一个重传请求,这会引起发送者的负载过高。这种现像被称为NACK内爆(implosion)。
Heartbeat实现的是接收者发起协议的一个变种,它采用计时器来限制过多的重传,在计时器时间内限制接收者请求重传消息包的次数,这样发送者重传消息包的次数也被相应的限制了,从而严格的限制了NACK内爆。

二、对httpd做高可用集群

   1.环境说明    

   我们通过192.168.1.210对外提供web服务,两个客户端的ip地址分别为192.168.1.200和192.168.1.201,在192.168.1.202上提供了nfs服务为两台web服务器提供共享存储

   2.前期准备工作

     由于heartbeat是基于主机名通信的,需要对两台服务器配置主机名,并能够对实现主机名的解析
   
在/etc/hosts文件中添加如下行
192.168.1.201node2.wangfeng7399.com node2
192.168.1.200node1.wangfeng7399.com node1

      为了实验的方便性,本处我们基于ssh的密钥认证,实现两台主机登陆不需要密码
   
[root@node1 ~]# ssh-keygen
[root@node1 ~]# ssh-copy-id root@node2
在node2上同样使用以上命令生成sshkey

   3.在node1和node2上分别准备httpd,本处可以通过yum安装也可以通过编译源码安装,关于安装过程,本处不在累赘,如想了解过程,其移步至本人的博客http://wangfeng7399.blog.51cto.com/3518031/1379373

   4.时间同步,本处使用的互联网的时间服务器,也可以自建时间服务器,关于如何自建时间服务器,将会在后续推出,敬请期待
1
    
[root@node1 ha]# ntpdate time.windows.com

   查看两边的服务器时间是否同步
   
[root@node1 ha]# ssh node2 'date';date
Thu Apr 1722:05:42CST 2014
Thu Apr 1722:05:42CST 2014

   5.安装heartbeat

     ①.解决依赖关系,由于centos6.5提供的为heartbeatV3版本,本处不能直接通过yum安装
   
yum install perl-TimeDate PyXML libnet net-snmp-libs -y

     说明:libnet包在eprl源中,请确保安装epel源

    ②.安装heartbeatV2版本的rpm包
   
[root@node1 ha]# rpm -ivh heartbeat-2.1.4-12.el6.x86_64.rpm heartbeat-pils-2.1.4-12.el6.x86_64.rpm heartbeat-stonith-2.1.4-12.el6.x86_64.rpm heartbeat-gui-2.1.4-12.el6.x86_64.rpm

   6.配置heartbeat

①.准备配置文件
   
[root@node1 ha.d]# cd /usr/share/doc/heartbeat-2.1.4/
[root@node1 heartbeat-2.1.4]# cp ha.cf authkeys /etc/ha.d/

     ②.修改配置文件
编辑authkey文件
auth 2
#1 crc
2 sha1 HI!hajsbdja2189wqjke
#3 md5 Hello!
[root@node1 ha.d]# chmod 600 authkeys
修改认证文件的权限
 修改ha.cf文件      


  对ha.cf详解
#debugfile /var/log/ha-debug 是否开启调试功能,已经调试功能的文件位置
logfile        /var/log/ha-log 日志文件的保存位置
keepalive 1  每个多长时间发送一次心跳信息,默认单位为s,也支持以ms为单位
deadtime 10   在检测不到对方心跳,替换的时间
warntime 8    警告时间
initdead 120启动heartbeat后多长时间开始检查心跳
udpport 694  基于那个端口检测心跳信息
crm on 以crm的模块开启
bcast  eth0            # Linux  linux广播的端口
mcast eth0 225.0.0.169410多播的地址
ucast eth0 192.168.1.2组播的地址
compression    bz2 压缩传输算法         on 主节点启动是否自动切换回主节点
ping 192.168.1.253仲裁设备,可以指向网关
#ping_group group1 10.10.10.25410.10.10.253仲裁设备组
#debug 1debug的级别
compression_threshold 2压缩的最低大小,单位为kb
node node1.wangfeng7399.com node节点,切记,本处不能使用ip地址
node node2.wangfeng7399.com node节点,切记,本处不能使用ip地址

  7.为用户hacluster创建密码,在安装heartbeat-gui时,会自动安装此用户


  [root@node1 ha]# passwd hacluster

   8.将配置好的文件复制一份到node2节点上
   
[root@node1 ha.d]# scp ha.cf authkeys node2:/etc/ha.d/

   9.准备nfs服务器,并使apache用户对其有读写执行的权限,并准备主页

  
[root@localhost ~]# vi /etc/exports
/www/html 192.168.1.0/24(rw)
[root@localhost ~]# setfacl -m u:apache:rwx /www/html/

   10.通过图形界面配置相关信息    
   
[root@node1 ha.d]# hb_gui &
阅读(652) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~