Chinaunix首页 | 论坛 | 博客
  • 博客访问: 955422
  • 博文数量: 245
  • 博客积分: 11429
  • 博客等级: 上将
  • 技术积分: 2662
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-15 00:16
文章存档

2011年(56)

2010年(174)

2009年(15)

分类: LINUX

2010-09-16 10:51:07

服务器双机热备安装详解

首先介绍下heartbeat 的工作原理
 

1.Heartbeat的组成

Heartbeat提供了高可用集群最基本的功能,例如,节点间的内部通信方式、集群合作管理机制、监控工具和失效切换功能等。目前的最新版本是 Heartbeat 2.x,这里的讲述也是以Heartbeat 2.x为主。下面介绍Heartbeat 2.0的内部组成,主要分为以下几大部分。

heartbeat:节点间通信检测模块。

ha-logd:集群事件日志服务。

CCM(Consensus Cluster Membership):集群成员一致性管理模块。

LRM(Local Resource Manager):本地资源管理模块。

Stonith Daemon:使出现问题的节点从集群环境中脱离。

CRM(Cluster Resource Management):集群资源管理模块。

Cluster policy engine:集群策略引擎。

Cluster transition engine:集群转移引擎。

图18.1显示了Heartbeat 2.0内部结构组成。

 
(点击查看大图)图18.1  Heartbeat 2.0内部结构图

Heartbeat仅仅是个HA软件,它仅能完成心跳监控和资源接管,不会监视它控制的资源或应用程序。要监控资源和应用程序是否运行正常,必须使 用第三方的插件,例如ipfail、Mon和Ldirector等。Heartbeat自身包含了几个插件,分别是ipfail、Stonith和 Ldirectord,介绍如下。

ipfail的功能直接包含在Heartbeat里面,主要用于检测网络故障,并做出合理的反应。为了实现这个功能,ipfail使用ping节点或者ping节点组来检测网络连接是否出现故障,从而及时做出转移措施。

Stonith插件可以在一个没有响应的节点恢复后,合理接管集群服务资源,防止数据冲突。当一个节点失效后,会从集群中删除。如果不使用 Stonith插件,那么失效的节点可能会导致集群服务在多于一个节点运行,从而造成数据冲突甚至是系统崩溃。因此,使用Stonith插件可以保证共享 存储环境中的数据完整性。

Ldirector是一个监控集群服务节点运行状态的插件。Ldirector如果监控到集群节点中某个服务出现故障,就屏蔽此节点的对外连接功 能,同时将后续请求转移到正常的节点提供服务。这个插件经常用在LVS负载均衡集群中。关于Ldirector插件的使用,将在后续章节详细讲述。

同样,对于操作系统自身出现的问题,Heartbeat也无法监控。如果主节点操作系统挂起,一方面可能导致服务中断,另一方面由于主节点资源无法释放,而备份节点却接管了主节点的资源,此时就发生了两个节点同时争用一个资源的状况。

针对这个问题,就需要在Linux内核中启用一个叫watchdog的模块。watchdog是一个Linux内核模块,它通过定时向/dev /watchdog设备文件执行写操作,从而确定系统是否正常运行。如果watchdog认为内核挂起,就会重新启动系统,进而释放节点资源。

在Linux中完成watchdog功能的软件叫softdog。softdog维护一个内部计时器,此计时器在一个进程写入/dev /watchdog设备文件时更新。如果softdog没有看到进程写入/dev/watchdog文件,就认为内核可能出了故障。watchdog超时 周期默认是一分钟,可以通过将watchdog集成到Heartbeat中,从而通过Heartbeat来监控系统是否正常运行。

2.Heartbeat的工作原理

从图18.1中可以看出,Heartbeat内部结构由三大部分组成。

(1)集群成员一致性管理模块(CCM)

CCM用于管理集群节点成员,同时管理成员之间的关系和节点间资源的分配。Heartbeat模块负责检测主次节点的运行状态,以决定节点是否失效。ha-logd模块用于记录集群中所有模块和服务的运行信息。

(2)本地资源管理器(LRM)

LRM负责本地资源的启动、停止和监控,一般由LRM守护进程lrmd和节点监控进程Stonith Daemon组成。lrmd守护进程负责节点间的通信;Stonith Daemon通常是一个Fence设备,主要用于监控节点状态,当一个节点出现问题时处于正常状态的节点会通过Fence设备将其重启或关机以释放IP、 磁盘等资源,始终保持资源被一个节点拥有,防止资源争用的发生。

(3)集群资源管理模块(CRM)

CRM用于处理节点和资源之间的依赖关系,同时,管理节点对资源的使用,一般由CRM守护进程crmd、集群策略引擎和集群转移引擎3个部分组成。 集群策略引擎(Cluster policy engine)具体实施这些管理和依赖;集群转移引擎(Cluster transition engine)监控CRM模块的状态,当一个节点出现故障时,负责协调另一个节点上的进程进行合理的资源接管。

在Heartbeat集群中,最核心的是Heartbeat模块的心跳监测部分和集群资源管理模块的资源接管部分。心跳监测一般由串行接口通过串口 线来实现,两个节点之间通过串口线相互发送报文来告诉对方自己当前的状态。如果在指定的时间内未受到对方发送的报文,就认为对方失效,这时资源接管模块将 启动,用来接管运行在对方主机上的资源或者服务。

图18.2是一个Heartbeat集群的一般拓扑图。在实际应用中,由于节点的数目、网络结构和磁盘类型配置的不同,拓扑结构可能会有不同。







下面介绍安装吧
环境准备
   主机名    eth0                 eth1
  monitor  192.168.188.138      10.10.10.145    主服务器
  daniel   192.168.188.139      10。10.10.147    从服务器
  共同的虚拟ip vip  为192.168.188.131


yum -y install pkgconfig   glib2-devel   e2fsprogs libnet* 安装库文件

下载软件包并解压
 软件下载地址:
  创建用户和组
 groupadd haclient
 useradd -g haclient hacluster
tar -xzf heartbeat-2.0.7.tar.gz
 ./configure 

--with-ccmuser-name=hacluster


  make && make install

    也可以用yum install  heartbeat*
   然后 rpm -qa | grep heartbeat 如果有下面的软件包 说明可以进行下一步了
heartbeat-2.1.3-3.el5.centos
heartbeat-devel-2.1.3-3.el5.centos
heartbeat-stonith-2.1.3-3.el5.centos
heartbeat-ldirectord-2.1.3-3.el5.centos
heartbeat-pils-2.1.3-3.el5.centos
heartbeat-gui-2.1.3-3.el5.centos

编辑hosts 文件

monitor 的主机上
10.10.10.147 daniel
10.10.10.145 monitor
192.168.188.138 monitor
192.168.188.139 daniel
daniel  从服务器上的
10.10.10.147 daniel
10.10.10.145 monitor
192.168.188.138 monitor
192.168.188.139 daniel

将这几个文件拷贝到/etc/ha.d/下面

cd /usr/share/doc/heartbeat-2.0.7/

cp ha.cf  /etc/ha.d/

  cp haresources  /etc/ha.d/

  cp authkeys  /etc/ha.d/

编辑文件

编辑/etc/ha.d/ha.cf

logfile /var/log/ha-log ha的日志文件记录位置。如没有该目录,则需要手动添加
keepalive 2  ##设定心跳(监测)时间时间为2秒
deadtime 30#指定若备用节点在30秒内没有收到主节点的心跳信号,则立即接管主节点的服务资源

warntime 10#指定心跳延迟的时间为10秒。当10秒钟内备份节点不能接收到主节点的

initdead 120

#在某些系统上,系统启动或重启之后需要经过一段时间网络才
能正常工作,该选项用于解决这种情况产生的时间间隔。取值至少为deadtime的两倍

udpport 694 ##使用udp端口694 进行心跳监测
baud    19200
#serial  /dev/ttyS0      # Linux
#选择串行通信设备,用于双机使用串口线连接的情况。

如果双机使用以太网连接,则应该关闭该选项。  

#serial /dev/cuaa0      # FreeBSD
#serial /dev/cua/a      # Solaris
bcast   eth1            # Linux
#mcast eth0 225.0.0.1 694 1 0
#ucast eth0 192.168.188.138
auto_failback on
#crm on
node    monitor
##节点1,必须要与 uname -n 指令得到的结果一致。
node    daniel
ping 10.10.10.145 10.10.10.147 
##通过ping 网关来监测心跳是否正常。

respawn hacluster /usr/lib/heartbeat/ccm
respawn hacluster /usr/lib/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster
#apiauth ipfail uid=hacluster


编辑vi /etc/ha.d/haresources

主服务器主机名    两个机器的虚拟ip  服务
monitor  192.168.188.131       httpd

编辑认证密码authkeys(自行修改)
authkeys文件用于设定Heartbeat的认证方式,共有3种可用的认证方式,即crc、 md5和sha1。3种认证方式的安全性依次提高,但是占用的系统资源也依次增加。如果Heartbeat集群运行在安全的网络上,可以使用crc方式; 如果HA每个节点的硬件配置很高,建议使用sha1,这种认证方式安全级别最高;如果是处于网络安全和系统资源之间,可以使用md5认证方式。这里我们使 用crc认证方式,设置如下:
 auth 1
1 sha1 123

#1 crc 123
#2 sha1 HI!
#3 md5 Hello!

chmod 600 authkeys
将修改的这些文件 复制到从服务器上
scp -r node1:/etc/ha.d/*  /etc/ha.d/ 
启动
  1. /etc/init.d/heartbeat    
  2. Usage: /etc/init.d/heartbeat {start|stop|status|restart|reload|force-reloa
 

这样就启动了主节点的Heartbeat服务,为了让Heartbeat能在开机自动运行以及关机自动关闭,可以手动创建以下软连接:

  1. [root@monitor ~]#ln -s  /etc/init.d/heartbeat  /etc/rc.d/rc0.d/K05heartbeat  
  2. [root@monitor ~]#ln -s  /etc/init.d/heartbeat  /etc/rc.d/rc3.d/S75heartbeat  
  3. [root@monitor ~]#ln -s  /etc/init.d/heartbeat  /etc/rc.d/rc5.d/S75heartbeat  
  4. [root@monitor ~]#ln -s  /etc/init.d/heartbeat  /etc/rc.d/rc6.d/K05heartbeat

  记住要修改防火墙哦
#vi /etc/sysconfig/iptables
加入以下内容
-A RH-Firewall-1-INPUT -p udp -m udp --dport 694 -d 10.10.10.0/24 -j ACCEPT
意思是udp 694端口对 对方的心跳网卡地址 10.10.10.0 段 开放。
#service iptables restart

测试

 

在服务器上 将网卡禁用 ifdown eth1

 

在进行访问 会时从服务器的服务

 

当主服务器启动时会将主动权从从服务器上抢回

 

先启动httpd

在浏览器输入
192.168.188。131  就会看到了


设置lvs
heartbeat 文件可改可不改改的话
编辑ha.cf如下

crm on 设置为on
heartbeat 也可以用ldirectord 来管理
5.建立软连接让HA自动接管lvs-dr.sh,ldirectord等资源.
#ln -s /etc/init.d/lvs  /etc/ha.d/resource.d/  //etc/init.d/lvs 存放LVS启动相关脚本
#ln -s /usr/sbin/ldirectord  /etc/ha.d/resource.d


6.采用Heartbeat2.x style,利用crm 管理资源.
#/usr/lib/heartbeat/haresources2cib.py  -stout -c /etc/ha.d/ha.cf/etc/ha.d/haresources
将生成的cib.xml文件在/var/lib/heartbeat/crm目录
【注意】
关于crmClusterResource Manager):crm资源配置方法是在新的版本中引入的,如果想使用该格式来配置资源(ip,服务,共享磁盘等),可以参看配置示例:
/var/lib/heartbeat/crm/cib.xml 文件的作用与/etc/ha.d/haresources相同,是二者择一的关系
# cat/dev/null > haresources
//haresources清空,采用crm来管理资源
修改vi /etc/ha.d/ldirectord.cf
# Global Directives
checktimeout=3
checkinterval=1
#fallback=127.0.0.1:80
autoreload=yes
#logfile="/var/log/ldirectord.log"
#logfile="local0"
#emailalert="admin@x.y.z"
#emailalertfreq=3600
#emailalertstatus=all
quiescent=no

# Sample for an http virtual service
virtual=192.168.188.131:80
        real=192.168.188.131.138:80 gate
        real=192.168.188.131.139:80 gate
#       real=192.168.6.6:80 gate
#       fallback=127.0.0.1:80 gate
#       service=http
#       request="index.html"
#       receive="Test Page"
#       virtualhost=some.domain.com.au
        scheduler=wrr
        persistent=6
        #netmask=255.255.255.255
        protocol=tcp
        checktype=connect
        checkport=80
#       request="index.html"
#       receive="Test Page"
#       virtualhost=

设置lvs
pvsadm -A -t 192.168.188.131:80 -s wrr
[root@monitor ~]# ipvsadm -a -t 192.168.188.131:80 -r 192.168.188.138:80 -g -w 1
[root@monitor ~]# ipvsadm -a -t 192.168.188.131:80 -r 192.168.188.139:80 -g -w 1
[root@monitor ~]# route add -host 192.168.188.131 dev eth0:0
[root@monitor ~]# ifconfig eth0:0 192.168.188.131 broadcast 192.168.188.131 netmask 255.255.255.245 up

假如两台VS之间使用的互备关系,那么当一台VS接管LVS服务时,可能会网络不通,这时因为路由器的MAC缓存表里无法及时刷新MAC.关于vip这个地址的MAC地址还是替换的VSMAC,有两种解决方法,一种是修改新VSMAC地址,另一种是使用send_arp /arpiing命令.
arping命令为例.
/sbin/arping -I eth0 -c 3 -s ${vip}${gateway_ip} > /dev/null 2>&1
例如:
/sbin/arping -I eth0 -c 3 -s 192.168.1.6192.168.1.1
b)某台Realserver服务down掉以后如何从IPVS列表自动中删除恢复时如何自动添加?配置ldirectord.conf
quiescent=no echo 1 >/proc/sys/net/ipv4/vs/expire_nodest_conn

2ha.cf相关注释
auto_failback设置为on时,一旦主节点重新恢复联机,将从从节点取回所有资源。
Stonith设备是一种能够自动关闭电源来响应软件命令的设备
Watchdog在实现上可以是硬件电路也可以是软件定时器,能够在系统出现故障时自动重新启动系统。

3lvs状态查看
操作步骤详细到命令行级别
查看LVS的连接情况:ipvsadm -L -n
查看LVS的吞吐量情况: ipvsadm -L -n --rate
查看LVS的统计信息:ipvsadm -L -n --stats
实时查看LVS连接状态变化: watch ipvsadm ?ln


参考:
官方文档:

阅读(2448) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-09-16 15:31:34

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com