. : : ClassiClub ForuM : : .

会员中心 论坛帮助 日历事件 标记论坛已读
返回   精品技术论坛 » 技术论坛 » 『软件使用』

『软件使用』: 电脑软件推荐, 电脑软件使用, 经验分享



发表新主题 回复
 
主题工具
shenkobe
 
shenkobe 的头像
高级会员
 
资 料:
注册日期: Apr 2002
帖子: 613 声望值: 4
精华: 0
#1 旧 2017-03-24, 13:57:06 默认 【求助】arp老化造成keepalive的vip切换的问题
shenkobe 当前离线  

大家有没有碰到过,交换机arp老化时间到了,keepalive的两台服务器,流量就发生了切换.也就是vip对应的mac地址变成了另外一台服务器的mac,有没有解决办法?


我的理想是当个成功的谋士
我现在的梦想是省下钱来买台7609玩玩,呵呵!
回复时引用此帖
minuteman
 
minuteman 的头像
终极会员
 
资 料:
注册日期: Oct 2001
帖子: 18,723 声望值: 3
精华: 1,解答: 26
#2 旧 2017-03-24, 14:17:01 默认
minuteman 当前离线  

不会出现这样的问题的吧

VIP浮动,查查看是不是心跳有问题了

是不是有ARP欺骗?或者网络线缆问题?

heartbeat用了好些年了,没用过keepalived,不过想来在VIP的处理上应该是差不多的
回复时引用此帖
minuteman
 
minuteman 的头像
终极会员
 
资 料:
注册日期: Oct 2001
帖子: 18,723 声望值: 3
精华: 1,解答: 26
#3 旧 2017-03-24, 14:19:29 默认
minuteman 当前离线  

刚才上网搜了一下keepalived,看到有一句话, keepalived will ensure that a shared IP address will be present at at least one place

这意思是不是说keepalived可能会出现双机的割裂,造成两边都在抢vip?
回复时引用此帖
apos
 
apos 的头像
支柱会员
 
资 料:
注册日期: Aug 2001
帖子: 8,003 声望值: 4
精华: 2,解答: 1
#4 旧 2017-03-24, 14:23:47 默认
apos 当前离线  

那叫闹裂吧


引用:
作者:灯下黑
链接:https://www.zhihu.com/question/50997...swer/136178424
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

可以采用第三方仲裁的方法。由于keepalived体系中主备两台机器所处的状态与对方有关。如果主备机器之间的通信出了网题,就会发生脑裂,此时keepalived体系中会出现双主的情况,产生资源竞争。一般可以引入仲裁来解决这个问题,即每个节点必须判断自身的状态。最简单的一种操作方法是,在主备的keepalived的配置文件中增加check配置,服务器周期性地ping一下网关,如果ping不通则认为自身有问题 。最容易的是借助keepalived提供的vrrp_script及track_script实现。如下所示。初始的配置: global_defs {
router_id LVS_DEVEL
}

vrrp_sync_group VG_1 {
group {
VI_1
}
notify_master /root/slave2master.py
notify_backup /root/master2slave.py
}

vrrp_instance VI_1 {
vrrp_unicast_bind 192.168.150.21
vrrp_unicast_peer 192.168.150.20
state BACKUP
interface manbr
virtual_router_id 51
nopreempt
priority 100
advert_int 10
authentication {
auth_type PASS
auth_pass XXXX
}
virtual_ipaddress {
192.168.150.23 dev manbr
}
}
增加仲裁的配置:global_defs {
router_id LVS_DEVEL
}
track_script {
check_local
}
vrrp_script check_local {
script "/root/check_gateway.sh"
interval 5
}
vrrp_sync_group VG_1 {
group {
VI_1
}
notify_master /root/slave2master.py
notify_backup /root/master2slave.py
}

vrrp_instance VI_1 {
vrrp_unicast_bind 192.168.150.21
vrrp_unicast_peer 192.168.150.20
state BACKUP
interface manbr
virtual_router_id 51
nopreempt
priority 100
advert_int 10
authentication {
auth_type PASS
auth_pass XXXX
}
virtual_ipaddress {
192.168.150.23 dev manbr
}
}
check_gateway.sh 就是我们的仲裁逻辑,发现ping不通网关,则关闭keepalived service keepalived stop。该方法在服务器通信正常之后无法再将keepalived启动起来4. 我认为更值得推荐的是自己写脚本,写一个while循环,每轮ping网关,累计连续失败的次数,当连续失败达到一定次数则运行service keepalived stop关闭keepalived服务。如果发现又能够ping通网关,再重启keepalived服务。最后在脚本开头再加上脚本是否已经运行的判断逻辑,将该脚本加到crontab里面。
回复时引用此帖
langhua
 
langhua 的头像
荣誉版主
 
资 料:
注册日期: Sep 2003
帖子: 3,894 声望值: 4
精华: 0,解答: 18
#5 旧 2017-03-24, 15:55:27 默认
langhua 当前离线  

标准的vrrp是生成相同的虚拟MAC,这个肯定没问题,如果有问题,也是配置的问题,或者网络设备VRID冲突了

另外HA也有用设备自己物理MAC做切换的,
心跳消息出现问题,也就是备的自动宣告变成主的,在三层设备上就就看到IP对的MAC更新了。
回复时引用此帖
shenkobe
 
shenkobe 的头像
高级会员
 
资 料:
注册日期: Apr 2002
帖子: 613 声望值: 4
精华: 0
#6 旧 2017-03-25, 19:43:05 默认
shenkobe 当前离线  

我做了ping脚本,在切换的过程中没有丢包,基本排除心跳不通导致。VRID也确认不冲突。
抓包发现主备两台Keepalive都会回应ARP消息,出现争抢,感觉是谁抢到归谁,请问有地方可配置只有主Keepalive回应ARP消息么?
回复时引用此帖
ASBai
 
ASBai 的头像
热心会员
 
资 料:
注册日期: May 2005
帖子: 4,922 声望值: 5
精华: 18,解答: 27
#7 旧 2017-03-25, 21:57:03 默认
ASBai 当前离线  

引用:
作者: minuteman 查看帖子
刚才上网搜了一下keepalived,看到有一句话, keepalived will ensure that a shared IP address will be present at at least one place

这意思是不是说keepalived可能会出现双机的割裂,造成两边都在抢vip?
是的,脑裂(Split-Brain)才是 heartbeat 等双机容错方案的最大问题。所以才有了基于多数派算法的 master 选举策略。或者使用基于多数派算法保证强一致的分布式协调服务来完成服务选举,比如 ZooKeeper、etcd、Consul 等。

PS: 看到 4 楼的帖子,稍微说两点:

1. 第三方仲裁者本质上也是也是一种多数派算法,只不过 Arbiter Server 不具备选举权,只具备投票权。

2. 这种心跳端口后靠 ping Arbiter 的方法是非常不保险的,比如:
2.1. 网络故障时,有可能发生单通(单工)的情形导致一方收到心跳,另一方未收到。
2.2. 可能发生双方心跳线断开,但都能 ping 通 Arbiter 的情形,此时需要 Arbiter 决定到底向谁投票(在有效租期内只能投给一方),显然 ping(ICMP)协议不具备这种投票选择的能力。
2.3. 基于心跳的协议一般还会涉及租期,还要考虑各种“时差”类问题。
等等(还能构造出更多类似问题)

因此 Arbiter 是需要专门设计,与 Master、Slave 使用专用协议通信的节点。

引用:
作者: shenkobe 查看帖子
我做了ping脚本,在切换的过程中没有丢包,基本排除心跳不通导致。VRID也确认不冲突。
抓包发现主备两台Keepalive都会回应ARP消息,出现争抢,感觉是谁抢到归谁,请问有地方可配置只有主Keepalive回应ARP消息么?
都会回应 API 消息说明你两个节点都配了相同的 IP 地址吧?应该是在对应脚本里通过 ifconfig 等命令实现:选举成为 Master 时将 VIP 赋予当前节点,降级为 Slave 时则自动取消该 VIP 才对吧——意即:要确保整个集群中,在任意给定时间,最多只有一个节点拥有该 VIP 地址。

此帖于 2017-03-25 22:10:38 被 ASBai 编辑. .


baiy.cn
俺的原创免费作品站
回复时引用此帖
发表新主题 回复

主题工具

论坛规则  发帖规则
不可以发表主题
不可以回复帖子
不可以上传附件
不可以编辑自己的帖子
论坛启用 vB 代码
版面启用 表情符号
版面启用 [IMG] 代码
版面禁用 HTML 代码


所有时间均为北京时间, 现在的时间是 08:49:46.

本论坛带宽由迅通网络提供
SSL证书由TrustAsia提供

Copyright © 2000 - 2019 ClassiClub Forum All Rights Reserved.
粤ICP备09123456号