Chinaunix

标题: 关于heartbeat双机热备active/standby疑问?? [打印本页]

作者: 大司南    时间: 2008-01-11 10:08
标题: 关于heartbeat双机热备active/standby疑问??
我通过网上的一些文章使用了heartbeat  配置成了 active/standby 模式
但是现在我的想法是如下: 主服务器 A  从服务器 B

1. 主服务器(A)挂掉,从服务器(B)接管主服务器资源
2. 从服务器(B)挂掉,主服务器(A)不受影响,继续服务。。

请问这个需要怎样设置?修改 ha.cf 能不能实现?还是需要其他的插件??
我现在的设置发现,从服务器挂掉,主服务器会接管从服务器资源,这样就造成主服务器的资源运行两次,使得主服务器服务受到影响。。
不知道大家有没有什么好的想法??
作者: xinyv    时间: 2008-01-11 10:33
贴 haresources ha.cf
作者: 大司南    时间: 2008-01-11 10:42
主dr的ha.cf:
+++++++++++++++++++++++++++++++
logfile        /var/log/ha-log
keepalive 5
deadtime 15
warntime 10
initdead 120
udpport        7941
ucast eth0 192.168.1.100
auto_failback on
watchdog /dev/watchdog
node        MDR
node        BDR
ping_group group1 192.168.1.5 192.168.1.7
respawn hacluster /usr/lib/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster
++++++++++++++++++++++++++++++++
备机和主的ha.cf大部分相同只是
ucast eth0 192.168.1.101
++++++++++++++++++++++++++++++++
主dr的haresources:
MDR Lvs_Dr.sh ldirectord
++++++++++++++++++++++++++++++++
备机和主的haresources相同
++++++++++++++++++++++++++++++++
作者: xinyv    时间: 2008-01-11 10:47
你的问题我不确定你可以

  1. auto_failback off
复制代码

看看结果。
作者: xinyv    时间: 2008-01-11 10:49
另外贴你的 uname -n
你的问题想是 haresources 里面配置重复的问题。
作者: 大司南    时间: 2008-01-11 11:06
首先,谢谢您的回复
主dr :
#uname -n
MDR
备dr :
#uname -n
BDR

我的haresources里面只配置了
MDR Lvs_Dr.sh ldirectord

我发现,每次从机down后,主dr的ldirectord都会不正常,不能起作用。
作者: xinyv    时间: 2008-01-11 11:35
你用 ldirectord 做的啥服务?
建议你主从的hosts文件里加入这两台机器。

[ 本帖最后由 xinyv 于 2008-1-11 11:36 编辑 ]
作者: 大司南    时间: 2008-01-11 11:42
ldirecord是heartbeat的一个套件,因为我做的lvs,ldirectord做realserver的管理
/etc/hosts我已经把两台服务器都添加了.

现在我已经实现了Direct server的ha,但是,我觉得不够理想,因为我是想以MDR服务器为主
BDR只是在MDR挂掉时候,临时跑一下,不想BDR影响MDR
作者: xinyv    时间: 2008-01-11 11:50
原帖由 大司南 于 2008-1-11 11:42 发表
ldirecord是heartbeat的一个套件,因为我做的lvs,ldirectord做realserver的管理
/etc/hosts我已经把两台服务器都添加了.

现在我已经实现了Direct server的ha,但是,我觉得不够理想,因为我是想以MDR服务器 ...


把 auto_failback on 看看你切换的脚本。
作者: xpingtn    时间: 2008-01-11 15:22
想问一下,假如realserver有两台机器都跑web服务,如果有一台realserver down机了,lvs是否可以检测到后端realserver down机了
作者: zdszdszds    时间: 2008-01-11 16:47
标题: 回复 #10 xpingtn 的帖子
ipvsadm是检测不到的,不过heartbeat- ldirectord可以做检测,是他控制的ipvsadm
作者: Godbach    时间: 2008-01-11 21:47
做一个脚本啊,当前服务器如果由Master-->Slave,执行相应脚本,当然应该保持从机的状态始终和从机一致就可以了。
作者: 大司南    时间: 2008-01-14 10:14
原帖由 Godbach 于 2008-1-11 21:47 发表
做一个脚本啊,当前服务器如果由Master-->Slave,执行相应脚本,当然应该保持从机的状态始终和从机一致就可以了。


其实这个问题,我现在是解决了,不过是以脚本方式解决的,改了几个参数。但是我主要想问,heartbeat本身有没有这个解决方案,毕竟我们大多数做的standby的服务器,性能都稍差一些。还是以主服务器为主。

请问有没有谁能解答一下??


另外xinyv兄提出的方案 把auto_failback off 或auto_failback on 这个主要是决定如果主服务器挂掉,又恢复,是不是将resource移回主服务器,这个应该不是解决方法,不过还是非常感谢xinyv兄,提出的思路。


我上面的ha.cf和haresources文件的配置,其实目的就是把资源全部放在MDR上,BDR上的资源也是指向MDR的。
MDR-->haresources:
MDR Lvs_Dr.sh ldirectord
BDR-->haresources:
MDR Lvs_Dr.sh ldirectord
所以两台服务器开机时候MDR机会把Lvs_Dr.sh ldirectord 全部start,而BDR服务器则不会将Lvs_Dr.sh ldirectord start.
第一种情况:
MDR挂掉,BDR会去haresources找到Lvs_Dr.sh ldirectord 并将其全部start,由于ha.cf配置auto_failback on,所以当MDR恢复,BDR会将Lvs_Dr.sh ldirectord 全部stop。将资源交给MDR
BDR挂掉,MDR发现BDR挂掉,于是MDR拿到BDR的资源,并启动,由于之前MDR已经启动了Lvs_Dr.sh ldirectord start,那么此时这两个脚本将再启动一次,造成启动不正常。
以上是我的理解。。。。

[ 本帖最后由 大司南 于 2008-1-14 10:18 编辑 ]
作者: Godbach    时间: 2008-01-14 11:05
那是不是指要修改一下heartbeat实现的方法,这要熟悉heartbeat的协议吧
作者: 大司南    时间: 2008-01-14 11:35
原帖由 Godbach 于 2008-1-14 11:05 发表
那是不是指要修改一下heartbeat实现的方法,这要熟悉heartbeat的协议吧


那请你写一下你对heartbeat的理解。。。
作者: root_man    时间: 2008-01-14 11:38
auto_failback:  determines whether a resource will automatically fail back to its "primary" node, or remain on whatever node is serving it until that node fails, or an administrator intervenes.

为什么将bdr上的资源停掉?
我只开一台MDR 然后脚本监测其状态  有问题短信通知 然后人工重启有什么区别?
作者: 大司南    时间: 2008-01-14 11:47
原帖由 root_man 于 2008-1-14 11:38 发表
auto_failback:  determines whether a resource will automatically fail back to its "primary" node, or remain on whatever node is serving it until that node fails, or an administrator intervenes.
...


因为我们用HA的目的是要提供可持续服务,那么第一种情况,如果MDR服务器挂掉,BDR可以马上接替服务,但是,不知你有没有想过,如果BDR,突然挂掉,那么MDR是不是会受影响呢。。。这个我测试了一下,确实是会受影响的,那么这个就不能保证可持续服务。。。
作者: root_man    时间: 2008-01-14 11:57
ldirectord ldirectord is a daemon to monitor and administer real servers in a LVS cluster of load balanced virtual servers.
ldirectord monitors the health of the real servers by periodically requesting a known URL and checking that the response contains an expected response. If a real server fails then the server is removed and will be reactivated once it comes back on line.

你要的是不是这种?
http://www.ultramonkey.org/3/topologies/sl-ha-lb-eg.html
作者: 大司南    时间: 2008-01-14 14:53
原帖由 root_man 于 2008-1-14 11:57 发表
ldirectord ldirectord is a daemon to monitor and administer real servers in a LVS cluster of load balanced virtual servers.
ldirectord monitors the health of the real servers by periodically req ...


请仔细看我的需求,这个不能解决我的问题,不过还是十分感谢您。。。
作者: bhuang    时间: 2008-01-14 20:24
标题: 回复 #13 大司南 的帖子
你是怎么解决的?我也遇到和你一样的情况,配置基本和你一样,就是当备份服务器down掉(此时资源不在备份服务器上)后会导致正在运行的主服务器重启资源,会导致主服务器上的服务中断一会,郁闷啊
作者: 大司南    时间: 2008-01-15 09:52
原帖由 bhuang 于 2008-1-14 20:24 发表
你是怎么解决的?我也遇到和你一样的情况,配置基本和你一样,就是当备份服务器down掉(此时资源不在备份服务器上)后会导致正在运行的主服务器重启资源,会导致主服务器上的服务中断一会,郁闷啊


我测试了很多遍,备份服务器挂掉,主服务器不是重起,如果重起,那么问题就不大了,主服务器会出现资源start 两次。。。这样就会出现不正常。。。
作者: bhuang    时间: 2008-01-15 12:37
原帖由 大司南 于 2008-1-15 09:52 发表


我测试了很多遍,备份服务器挂掉,主服务器不是重起,如果重起,那么问题就不大了,主服务器会出现资源start 两次。。。这样就会出现不正常。。。


你的应该是“Lvs_Dr.sh ldirectord”这两个脚本有问题,手工运行下Lvs_Dr.sh stop,ldirectord stop看下能否停掉资源
作者: 大司南    时间: 2008-01-15 14:40
原帖由 bhuang 于 2008-1-15 12:37 发表


你的应该是“Lvs_Dr.sh ldirectord”这两个脚本有问题,手工运行下Lvs_Dr.sh stop,ldirectord stop看下能否停掉资源

这个我可以确认,脚本没有问题,我单独都运行调试过,没问题的.
作者: xinyv    时间: 2008-01-17 10:24
我觉得你可以贴一下你的日志看看,heartbeat在启动的时候主要吧所有资源 start 而从在没有检测到主的时候也会把所有资源start,但在检测到主以后就会把所有资源stop,看了这么多讨论基本确定你的问题在你的perl模块安装有问题,看看你的DBI安装是否正确。
作者: zhenghuacs2c    时间: 2008-07-28 22:34
配置问题,增加一个限制条件
作者: danieljiang    时间: 2008-07-29 09:53
原帖由 xpingtn 于 2008-1-11 15:22 发表
想问一下,假如realserver有两台机器都跑web服务,如果有一台realserver down机了,lvs是否可以检测到后端realserver down机了


这本来就是ldirectord的功能啊,用mon也能实现




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2