HA解决方案随着越来越多的商业应用移动Internet上来时,提供高可用性的服务变得越来越重要。高可用性技术就是一种自动检测服务器节点和服务进程错误、失效,并且当发生这种情况时能够自动适当地重新配置系统,使得集群中的其它节点能够自动承担这些服务,以实现服务不中断。 IBM公司的RS6000系列小型机十分畅销,广为市场所接受的原因,一方面是因为其优秀的整机性能,另一方面就是配套的HACMP方案—IBM高可用性解决方案。可见高可用性在关键应用场合的重要性。 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分析 更多相关文章
|
推荐文章
精彩文章
|