文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>HA解决方案

HA解决方案

时间:2007-02-15  来源:hcs

HA解决方案


摘要
随着越来越多的商业应用移动Internet上来时,提供高可用性的服务变得越来越重要。高可用性技术就是一种自动检测服务器节点和服务进程错误、失效, 并且当发生这种情况时能够自动适当地重新配置系统,使得集群中的其它节点能够自动承担这些服务,以实现服务不中断。

  随着越来越多的商业应用移动Internet上来时,提供高可用性的服务变得越来越重要。高可用性技术就是一种自动检测服务器节点和服务进程错误、失效,并且当发生这种情况时能够自动适当地重新配置系统,使得集群中的其它节点能够自动承担这些服务,以实现服务不中断。


  IBM公司的RS6000系列小型机十分畅销,广为市场所接受的原因,一方面是因为其优秀的整机性能,另一方面就是配套的HACMP方案—IBM高可用性解决方案。可见高可用性在关键应用场合的重要性。


1.基于LVS的HA方案

  Linux要进入高端市场就必须在这方面有相应的措施,所以许多公司都这方面加大了研究力度。现在,我们可以使用一些现存的软件去构筑具有高可性的LVS系统。下面列出两种方案,以供参考。


方案一:mon+heartbeat+fake+coda

  我们可以使用"mon"、"heartbeat"、"fake"和"coda"四个软件来构筑具用高可用性的Virtual Server。"mon"是一个大众化的资源管理系统,用来监控网络上的服务器节点和网络服务。"heartbeat"实现在两台计算机间通过在串行线上 使用UDP协议传送"心跳信息"。"Fake"是一个使用ARP欺骗的方法来实现IP接管。具有高可用性的Linux Virtual Server如下图所示:

  当服务器故障时,处理过程如下:

  "mon"进程运行在负载均衡器上,负责监测整个集群的服务器节点和服务进程。在配置文件"fping.monitor"中写入要检测服务器节 点,然后"mon"进程将会t秒检查一下相应的服务器节点是否还活着。另外相关的服务监视器也要做相应的配置,这样"mon"进程将每m秒检测一下所有节 点的相应服务进程。例如,http.monitor用于配置监控http服务;ftp.monitor用于配置监控ftp服务;以此类推。当配置完成后, 某个服务器节点失效或重新生效、服务进程失效或重新生效时都会发送一个通告信息,因此,负载均衡器能够知道服务器节点是否能接受服务。

  现在,负载均衡器成为了整个系统的单点失效。为了防止这一现象,我们必须安装一个负载均衡器的备份服务器。"fake"软件实现当负载均衡器失 效时,备份服务器自动接管IP地址,继续服务。而"heartbeat"则随时根据负载均衡器的状态自动激活/去激活备份服务器上的"fake"进程。在 负载均衡器和备份服务器上都运行着一个"heartbeat"进程,它们通过串行线周期性地发送"I'm alive "消息。如果备份服务器在一个预定时间内接收不到来自负载均衡器的"I'm alive"信息时,将自动激活"fake"进程接管负载均衡器的IP地址,并开始提供负载均衡服务;而当再次收到来自负载均衡器的"I'm alive "消息时,备份服务器将自动将"fake"进程去激活,释放出它接管的服务器,负载均衡器重新开始工作。


  但是,如果负载均衡器在客户正在请求时失效,这时会引起客户请求失败,客户必须重新发出请求信息。

  "coda"是一个容错的分布式文件系统,源于Andrew文件系统。服务器上的目录能够存储在"coda"上,所以文件能够实现高可用性,并且易于管理。

  配置实例:

  下面是一个基于VS-DR的Virutal Server构筑高可用性的WEB服务器。

  "mon"用于监测集群中的服务器节点和服务进程。例如,"fping.monitor"文件用于监测服务器节点, "http.monitor"文件用于检测HTTP服务,"ftp.monitor"用于检测FTP服务,以此类推。所以,我们只需往里增加或删除一个规 则。下面是一个配置实例:lvs.alert。

#!/usr/bin/perl
#
# lvs.alert - Linux Virtual Server alert for mon
#
# It can be activated by mon to remove a real server when the
# service is down, or add the server when the service is up.
#
#
use Getopt::Std;
getopts ("s:g:h:t:l:P:V:R:W:F:u");

$ipvsadm = "/sbin/ipvsadm";
$protocol = $opt_P;
$virtual_service = $opt_V;
$remote = $opt_R;

if ($opt_u) {
$weight = $opt_W;
if ($opt_F eq "nat") {
$forwarding = "-m";
} elsif ($opt_F eq "tun") {
$forwarding = "-i";
} else {
$forwarding = "-g";
}

if ($protocol eq "tcp") {
system("$ipvsadm -a -t $virtual_service -r $remote -w $weight $forwarding");
} else {
system("$ipvsadm -a -u $virtual_service -r $remote -w $weight $forwarding");
}
} else {
if ($protocol eq "tcp") {
system("$ipvsadm -d -t $virtual_service -r $remote");
} else {
system("$ipvsadm -d -u $virtual_service -r $remote");
}
};

  "lvs.alert"文件放在/usr/lib/mon/alert.d目录下。

  "mon"的配置文件(/etc/mon/mon.cf或者/etc/mon.cf)可以象下面所示一样,配置成在集群中监测HTTP服务和服务器节点的功能。

#
# The mon.cf file
#
#
# global options
#
cfbasedir= /etc/mon
alertdir= /usr/lib/mon/alert.d
mondir = /usr/lib/mon/mon.d
maxprocs= 20
histlength = 100
randstart = 30s

#
# group definitions (hostnames or IP addresses)
#
hostgroup www1 www1.domain.com

hostgroup www2 www2.domain.com

#
# Web server 1
#
watch www1
service http
interval 10s
monitor http.monitor
period wd {Sun-Sat}
alert mail.alert wensong
upalert mail.alert wensong
alert lvs.alert -P tcp -V 10.0.0.3:80 -R 192.168.0.1 -W 5 -F dr
upalert lvs.alert -P tcp -V 10.0.0.3:80 -R 192.168.0.1 -W 5 -F dr

#
# Web server 2
#
watch www2
service http
interval 10s
monitor http.monitor
period wd {Sun-Sat}
alert mail.alert wensong
upalert mail.alert wensong
alert lvs.alert -P tcp -V 10.0.0.3:80 -R 192.168.0.2 -W 5 -F dr
upalert lvs.alert -P tcp -V 10.0.0.3:80 -R 192.168.0.2 -W 5 -F dr

  注意:如果目标端口不同,则你需要为"lvs.alert"设置参数,形如:

"lvs.alert -V 10.0.0.3:80 -R 192.168.0.3:8080"

  现在,负载均衡器能够将服务器节点失效和服务失效的情况隐藏起来,当它们恢复正常后又自动将其投入使用。


  另外,为了防止负载均衡器成为整个系统的单点失效,我们需要构建一个负载均衡器的备份服务器,让它们周期性地传递"心跳信息"。详细的细节请参考"heartbeat"软件包中带的相关文档,构建两个服务器节点组成"heartbeat"系统是相单简单的。


  例如,我们假定两个负载均衡器有下列的IP地址:

lvs1.domain.com (负载均衡器) 10.0.0.1
lvs2.domain.com (备份服务器) 10.0.0.2
www.domain.com (集群服务的虚拟IP) 10.0.0.3

  在lvs1.domain.com 和lvs2.domain.com两台机器上都安装"heartbeat"软件包,然后新建/etc/hd.d/ha.conf,内容如下:

#
#keepalive: how many seconds between heartbeats
#
keepalive 2
#
#deadtime: seconds-to-declare-host-dead
#
deadtime 10
#hopfudge maximum hop count minus number of nodes in config
hopfudge 1
#
#What UDP port to use for udp or ppp-udp communication?
#
udpport 1001
#What interfaces to heartbeat over?
udp eth0
#
#Facility to use for syslog()/logger (alternative to log/debugfile)
#
logfacility local0
#
#Tell what machines are in the cluster
#nodenodename ...-- must match uname -n
nodelvs1.domain.com
nodelvs2.domain.com

  "/etc/ha.d/haresources"文件内容如下:

lvs1.domain.com 10.0.0.3 lvs mon

  "/etc/rc.d/init.d/lvs"文件内容如下:


#!/bin/sh
#
# You probably want to set the path to include
# nothing but local filesystems.
#
PATH=/bin:/usr/bin:/sbin:/usr/sbin
export PATH

IPVSADM=/sbin/ipvsadm

case "$1" instart)
if [ -x $IPVSADM ]
then
echo 1 > /proc/sys/net/ipv4/ip_forward
$IPVSADM -A -t 10.0.0.3:80
$IPVSADM -a -t 10.0.0.3:80 -r 192.168.0.1 -w 5 -g
$IPVSADM -a -t 10.0.0.3:80 -r 192.168.0.2 -w 5 -g
fi
;;
stop)
if [ -x $IPVSADM ]
then
$IPVSADM -C
fi
;;
*)
echo "Usage: lvs {start|stop}"
exit 1
esac

exit 0

  最后,确认你已经在负载均衡器和备份服务器上均新建了以上文件,你就可以在两台机器上启动"heartbeat"进程了。


  注意:"fake"已经包含在"heartbeat"包中,所以无需单独地安装"fake"包。当 lvs1.domain.com失效时,lvs2.domain.com将接管所有lvs1.domain.com的"haresources",也就是 使用ARP欺骗接管10.0.0.3,并启动/etc/rc.d/init.d/lvs和/etc/rc.d/init.d/mon脚本。当 lvs1.domain.com恢复正常时,lvs2将释放所有HA资源,lvs1接替工作。


方案二:ldirectord+heartbeat

  "ldirectord"(Linux Director Daemon)是Jacob Rief编程实现的一个独立进程,以实现对服务和物理服务器的监测,广泛地用于http和https服务。


  "ldirectord"安装简单,能很好地与"heartbeat"很好的配合工作。"ldirectord"程序包含在"ipvs"包中的"contrib"目录中。


  下面指出了"ldirectord"的一些优点:

  "ldirectord"是专门撰写的LVS监测程序。

  它从/etc/ha.d/xxx.cf文件中读取所有关于IPVS路由表的配置信息。当"ldirectord"运行起来后,IPVS路由表将会被适当地配置。

  也可以将Virtual service配置放在多个配置文件中,所以可以单独修改某一种服务的参数,而不影响其它的服务。"ldirectord"能被"heartbeat"轻松地管理----启动、关闭。

  将"ldirectord"放到/etc/ha.d/resource.d/目录下,然后在/etc/ha.d/haresources中增加一行:

node1 IPaddr::10.0.0.3 ldirectord::www ldirectord::mail

  "ldirectord"能够手动开启、关闭。可以在无备份负载均衡器的LVS集群中使用它。


  配置实例:


  新建或修改配置文件/etc/ha.d/www.cf,使其包含:

#
# The /etc/ha.d/www.cf for ldirectord
#

# the number of second until a real server is declared dead
timeout = 10

# the number of second between server checks
checkinterval = 10

#
# virtual = x.y.z.w:p
# protocol = tcp|udp
# scheduler = rr|wrr|lc|wlc
# real = x.y.z.w:p gate|masq|ipip [weight]
# ...
#

virtual = 10.0.0.3:80
protocol = tcp
scheduler = wlc
real = 192.168.0.1:80 gate 5
real = 192.168.0.2:80 gate 5
request = "/.testpage"
receive = "test page"

  在 /etc/ha.d/haresources文件中写入以下配置:

lvs1.domain.com IPaddr::10.0.0.3 ldirectord::www

  同时,必须新建一个.testpage文件放在所有WWW服务器的主目录下:

  使用命令:

echo "test page" > .testpage

  在主、备两台机器上都启动"heartbeat"进程,如果有任何错误,可以分别检查/var/log/ha-log和

  /var/log/ldirector.log两个文件。

2 Xlinux的LATCH HA解决方案

  正如前面所述,高可用性解决方案(HA)是一种极为重要的,许许多多厂商投入了大量的研究,其中Xlinux发行版就提供了LATCH HA解决方案,能够应用在各种集中式、客户机-服务器模式或OLTP系统中。同时其与市场上各种主流的数据库系统与OLTP软件(如Oracle、 SYSBASE、Informix与Tuxedo)也都保持兼容。LATCH HA同时提供了各种应用程序接口。因此,客户能够在其私有软件中集成各种功能来保证系统的高可靠性,这样也保护了客户的投资。下面我们就一起看看 LATCH HA方案。


  LATCH HA解决方案的最典型的系统结构:两台主机A、B共享一个磁盘阵列,A为工作机,B为备份机。它们之间用一根心跳线来连接,这称为“心跳检测”,主要通过 一条RS232检测链路来完成。LATCH HA也采用了网络Ping来验证系统宕机检测的准确性。安装在主机上的HA软件上的HA软件通过心跳线来实时监测对方的运行状态,一旦正在工作的主机A因 为各种硬件故障导致系统发生故障,主机B立即投入工作。怎么样,与IBM的HACMP有点象吧!


  LATCH HA实现了“高可靠性共享存储”架构。该架构由两个或三个冗余服务器、一个共享冗余磁盘阵列、一个可选DBMS及LATCH HA系统软件构成。在LATCH HA的保护下,企业的计算机系统能够提供不间断的信息服务,避免由于硬件故障或日常维护所带来的宕机,因而能够首先最佳的可靠性及最大程度地减少宕机时 间。

方案应用

  LATCH HA能够应用在各种集中式、客户机-服务器模式或OLTP系统中。同时其与市场上各种主流的数据库系统与OLTP软件-如Oracle、 SYBASE、 Informix与Tuxedo-也都保持兼容。LATCH HA同时提供了各种应用程序接口。因此,客户能够在其私有软件中集成各种功能来保证系统的高可靠性。

  1) LATCH HA/HS2000 在线待机模式

  在这种模式下,一个服务器作为主服务器。正常情况下其承当所有的服务。另外一台服务器作为待机服务器,正常情况下除了监控主服务器的状态,不进 行其他的操作。一旦主服务器宕机,待机服务器就接手工作,成为新的主服务器。客户仍然可以拥有同样的服务器IP地址、NFS、数据、数据库及其他……这种 应用模式近似于上面介绍的典型应用模式—A与B实际上是在完成同一个功能应用,安装在主机上的HA软件通过心跳线来实时监测对方的运行状态,一旦正在工作 的主机A因为各种硬件故障-如电源失效、主要部件失效或者启动盘失效等导致系统发生故障,主机B立即投入工作。

  2) LATCH HA/DA2000双机就绪模式

  在这种模式下,两个主机都作为主服务器,共享自己的磁盘阵列,各自承当一部分服务。例如服务器A在执行应用A, 服务器B在执行应用B, 两个主机在正常情况下各自独立运行自己的应用逻辑,两个主机同时又都作为对方的待机服务器,通过心跳线监控对方的状态。一旦某一服务器宕机,另一台服务器 就承担所有的服务,为所有的客户服务。及一旦服务器A发生故障,服务器B马上接管服务器A上原来的应用;或者服务器B发生故障,服务器A马上接管服务器B 上原来的应用,这是一种互为冗余的模式。

  很明显,一旦某一服务器宕机,另一台服务器的工作服但就比较重,于是就有了下面的三主机模式。

  3) LATCH HA/HC2000 三主机模式

  这种应用模式是最高端的HA应用模式,它既保证了系统的设备冗余,避免系统宕机,而且又能保证在一旦宕机的情况下有足够的系统资源以供使用。

  在这种模式中,待机服务器C同时监控主服务器A与B的状态。一旦服务器A或B宕机,服务器C将承担其服务,为客户服务。这种系统结构既保证了系统的安全运行,又保证了系统资源。

排行榜 更多 +
飞翔之光手机版

飞翔之光手机版

冒险解谜 下载
飞翔之光手游

飞翔之光手游

冒险解谜 下载
月亮冲突英雄

月亮冲突英雄

飞行射击 下载