我的编程空间,编程开发者的网络收藏夹
学习永远不晚

说说Keepalived的脑裂

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

说说Keepalived的脑裂

1. 工作场景

Keepalived提供了Loadbalancing和High-Availability的功能, 本文说的是其为2个Mycat节点提供HA功能的场景.



2. 关键配置如下, 为主备非抢占模式.

! mycat01, 192.168.4.196


global_defs {

    # 一个keepalived.conf, 对应一个router_id

    router_id mycat01

}


vrrp_instance VI_1 {

    state BACKUP

    nopreempt

    interface eth0

    # 一个组播内, 各节点该值相同

    virtual_router_id 196

    priority 200

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass Zf4aqy

    }


    virtual_ipaddress {

        192.168.4.200

    }

}    


! mycat02, 192.168.4.195


global_defs {

    router_id mycat02

}


vrrp_instance VI_1 {

    state BACKUP

    nopreempt

    interface eth0

    virtual_router_id 196

    priority 200

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass Zf4aqy

    }


    virtual_ipaddress {

        192.168.4.200

    }

}    



3. Keepalived提供HA的工作原理

Keepalived的HA功能, 是通过VRRP(Virtual Router Redundancy Protocol, 虚拟路由冗余协议)来实现的. 其用IP组播的方式(默认组播地址: 224.0.0.18), 实现服务节点间的通信, 通过一种竞选机制来将路由任务交给某台VRRP路由器. 工作时主节点发送VRRP协议报文, 备节点接收报文, 若一段时间(默认3个报文发送时间)备节点接收不到主节点发送的报文, 就会启动接管程序接管主节点的资源. 备节点可以有多个, 通过优先级竞选.



4. Keepalived发生脑裂的情况

4.1 根据上述工作原理知道, 备节点接收不到报文时, 如两者间的网络不通了, 备节点就会启动接管程序接管主节点的资源, 对外提供服务, 表现形式就是备节点上出现了虚拟IP, 此时主节点也是持有虚拟IP的.


问题重现如下, 此时mycat01为主节点, mycat02为备节点, 在mycat02上drop掉组播数据包.

# iptables -A INPUT -m pkttype --pkt-type multicast -j DROP


然后观察message日志, 可见其也变成了主节点.

# tail -f /var/log/messages

Mar 17 00:13:58 mycat02 kernel: ip_tables: (C) 2000-2006 Netfilter Core Team

Mar 17 00:14:00 mycat02 Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE

Mar 17 00:14:01 mycat02 Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE

Mar 17 00:14:01 mycat02 Keepalived_vrrp: VRRP_Instance(VI_1) setting protocol VIPs.

Mar 17 00:14:01 mycat02 Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.4.200

Mar 17 00:14:01 mycat02 Keepalived_healthcheckers: Netlink reflector reports IP 192.168.4.200 added

Mar 17 00:14:06 mycat02 Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.4.200


在mycat01上抓包, 看到mycat02也在向组播地址发送数据包.

# tcpdump -nnei eth0 | grep -i 'vrid 196'

00:13:58.735738 fa:16:3e:f4:18:40 > 01:00:5e:00:00:12, ethertype IPv4 (0x0800), length 54: 192.168.4.196 > 224.0.0.18: VRRPv2, Advertisement, vrid 196, prio 202, authtype simple, intvl 1s, length 20

00:13:59.736268 fa:16:3e:f4:18:40 > 01:00:5e:00:00:12, ethertype IPv4 (0x0800), length 54: 192.168.4.196 > 224.0.0.18: VRRPv2, Advertisement, vrid 196, prio 202, authtype simple, intvl 1s, length 20

00:14:00.736800 fa:16:3e:f4:18:40 > 01:00:5e:00:00:12, ethertype IPv4 (0x0800), length 54: 192.168.4.196 > 224.0.0.18: VRRPv2, Advertisement, vrid 196, prio 202, authtype simple, intvl 1s, length 20

00:14:00.955581 fa:16:3e:5d:23:10 > 01:00:5e:00:00:12, ethertype IPv4 (0x0800), length 54: 192.168.4.195 > 224.0.0.18: VRRPv2, Advertisement, vrid 196, prio 202, authtype simple, intvl 1s, length 20

00:14:01.956340 fa:16:3e:f4:18:40 > 01:00:5e:00:00:12, ethertype IPv4 (0x0800), length 54: 192.168.4.196 > 224.0.0.18: VRRPv2, Advertisement, vrid 196, prio 202, authtype simple, intvl 1s, length 20


当把iptables停掉后, mycat01和mycat02扔分别持有虚拟IP 192.168.4.200, 这也说明了主备非抢占模式的一个弊端, 主备抢占模式是不会这样的, 下面是其主要配置.

! mycat01, 192.168.4.196


global_defs {

    router_id mycat01

}


vrrp_instance VI_1 {

    state MASTER

    virtual_router_id 196

    priority 200

}    


! mycat02, 192.168.4.195


global_defs {

    router_id mycat02

}


vrrp_instance VI_1 {

    state BACKUP

    virtual_router_id 196

    priority 150

}    


4.2 同一个组播内, virtual_router_id配置不相同, 也会发生脑裂现象, 这里就不在赘述了.



说到最后, 如何避免脑裂现象呢, 其实可以看到, 只要有虚拟IP存在, 就不可能完全规避这个问题. 也就是没有虚拟IP了, 就没有脑裂了, 那么节点又如何向外提供服务呢? 引入Zookeeper或Consul的服务发现机制, 这些又是另外的事情了...


若感兴趣可关注订阅号”数据库最佳实践”(DBBestPractice).

说说Keepalived的脑裂

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

说说Keepalived的脑裂

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何预防keepalived脑裂问题

如何预防keepalived脑裂问题,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。(1)可以采用第三方仲裁的方法。由于keepalived体系中主备两台机器所处
2023-06-06

Windows 虚拟电脑的说明

Windows虚拟电脑是一种在Windows操作系统下运行虚拟机的软件。虚拟机是一种软件模拟的计算机环境,可以在现有的操作系统上运行其他操作系统。Windows虚拟电脑的功能包括:1. 运行多个操作系统:通过Windows虚拟电脑,用户可以
2023-09-07

说说 VARCHAR 背后的那些事

在使用MySQL的过程中,在存储字符串时,大家或许都有过这样或那样的困惑,譬如:1.  对于固定长度的字符串,为什么推荐使用 CHAR 来存储?2.  VARCHAR 可设置的最大长度是多少?3.  给定一个字符串,怎么知道它的空间使用情况?4.  创建索引时
说说 VARCHAR 背后的那些事
2019-10-23

说说我心中的Linux系统

我不知道在阅读此篇文章的你,是一个什么样的人,或许你只是偶然看到此篇文章的路人,或许是对linux有兴趣但没接触过linux的圈外人,或许是已经入行没多久的菜鸟,或许是喜欢linux却学习不下去预备放弃的人更或许你是linux运维技术行业
2023-06-05

简单说说STL的内存管理

<STL 源码剖析>将其描述为空间配置器,理由是allocator可以将其它存储介质(例如硬盘)做为stl 容器的存储空间。由于内存是allocator管理的主要部分,因此,本文以STL内存管理为出发点介绍allocator
2022-11-15

说说MySQL中MVCC机制的原理

目录一、概述:二、什么是Undo log三、行的隐藏列四、Undo log版本链五、关于ReadViewReadView包含以下几个重要的参数:一、概述:了解了mysql的底层架构后,我们今天要深入了解下什么是MVCC。MVCC,全称M
2023-04-24

简单说说Python与Go的区别

背景工作中的主力语言是Python,今年要搞性能测试的工具,由于GIL锁的原因,Python的性能实在是惨淡,需要学一门性能高的语言来生成性能测试的压力端。因此我把目光放在了现在的新秀Go。经过一段时间的学习,也写了一个小工具,记一下这两个
2023-01-31

说说我当初是如何学Linux的

今天我就说说我当初是如何从一名普通桌面维护工程师,通过学习和努力转成Linux运维工程师的,以及作为Linux运维工程师需要一些什么技能和知识,希望可以帮到一些对Linux有兴趣或者想往Linux这个方向转的,都可以看看。15年我还在做普通
2023-06-05

说说html转pdf工具的使用范围

随着互联网应用的不断普及,越来越多的文件需要在线阅读和分享。但有时候,在线阅读并不能满足用户的需求。比如,用户需要离线保存或打印某个网页或文档。这时,将网页或文档转换为PDF格式就是一种不错的选择。因此,一些网站和开发者也开发出了html转pdf工具,为用户提供了更加方便的文件转换服务。html转pdf工具的使用范围很广,主要应用在以下几个方面:1. 网页保存:用户可以将自己喜
2023-05-14

说说Node.js自带的模块热替换

Node.js是一个非常流行的JavaScript运行环境,它使得开发者可以使用JavaScript构建高性能的网络应用。在Node.js的生态系统中,许多开发者喜欢使用实时重载工具来提高开发效率。而热模块替换就是一种实时重载工具,它可以在应用运行时,替换掉已经被加载的模块。这意味着,当你在编辑你的应用代码时,无需重启服务器,就可以立即看到修改后的结果。热模块替换工具主要有两种
2023-05-14

说说Android的UI刷新机制的实现

本文主要解决以下几个问题:我们都知道Android的刷新频率是60帧/秒,这是不是意味着每隔16ms就会调用一次onDraw方法?如果界面不需要重绘,那么16ms到后还会刷新屏幕吗?我们调用invalidate()之后会马上进行屏幕刷新吗?
2022-06-06

python 爬取全本免费小说网的小说

这几天朋友说想看电子书,但是只能在网上看,不能下载到本地后看,问我有啥办法?我找了好几个小说网址看了下,你只能直接在网上看,要下载txt要冲钱买会员,而且还不能在浏览器上直接复制粘贴。之后我就想到python的爬虫不就可以爬取后下载吗?  
2023-01-30

编程热搜

目录