分享
 
 
 

HA解决方案

王朝电脑技术·作者佚名  2004-07-03
窄屏简体版  字體: |||超大  

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

# node nodename ... -- must match uname -n

node lvs1.domain.com

node lvs2.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\" in

start)

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将承担其服务,为客户服务。这种系统结构既保证了系统的安全运行,又保证了系统资源。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有