Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->Linux技术 ->系统管理 ->正文

HA解决方案

来源:Linux-cn.com 作者:Webmaster 时间:2007-05-05 点击: [收藏] [投稿]

  随着越来越多的商业应用移动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

 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:Linux环境下透明代理完全解决方案   下一篇:adore rootkit分析

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号