iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >说说Keepalived的脑裂
  • 791
分享到

说说Keepalived的脑裂

2024-04-02 19:04:59 791人浏览 泡泡鱼
摘要

1. 工作场景Keepalived提供了Loadbalancing和High-Availability的功能, 本文说的是其为2个Mycat节点提供HA功能的场景.2. 关键配置如下, 为主备非抢占模式.!

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的脑裂

您可能感兴趣的文档:

--结束END--

本文标题: 说说Keepalived的脑裂

本文链接: https://www.lsjlt.com/news/40437.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • 如何预防keepalived脑裂问题
    如何预防keepalived脑裂问题,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。(1)可以采用第三方仲裁的方法。由于keepalived体系中主备两台机器所处...
    99+
    2023-06-06
  • Windows 虚拟电脑的说明
    Windows虚拟电脑是一种在Windows操作系统下运行虚拟机的软件。虚拟机是一种软件模拟的计算机环境,可以在现有的操作系统上运行...
    99+
    2023-09-07
    Windows
  • 说说 TCP的粘包、拆包
    分析&回答 拆包和粘包是在socket编程中经常出现的情况, 在socket通讯过程中,如果通讯的一端一次性连续发送多条数据包,tcp协议会将多个数据包打包成一个tcp报文发送出去,这就是所谓的粘包。如果通讯的一端发送的数据包超过一次tcp...
    99+
    2023-09-05
    tcp/ip 网络 网络协议
  • 说说我心中的Linux系统
     我不知道在阅读此篇文章的你,是一个什么样的人,或许你只是偶然看到此篇文章的路人,或许是对linux有兴趣但没接触过linux的圈外人,或许是已经入行没多久的菜鸟,或许是喜欢linux却学习不下去预备放弃的人更或许你是linux运...
    99+
    2023-06-05
  • 简单说说STL的内存管理
    1. 概述STL Allocator是STL的内存管理器,也是最低调的部分之一,你可能使用了3年stl,但却不知其为何物。 STL标准如下介绍Allocatorthe STL inc...
    99+
    2022-11-15
    STL 内存管理
  • 说说MySQL中MVCC机制的原理
    目录一、概述:二、什么是Undo log三、行的隐藏列四、Undo log版本链五、关于ReadViewReadView包含以下几个重要的参数:一、概述: 了解了mysql的底层架构后,我们今天要深入了解下什么是MVCC...
    99+
    2023-04-24
    MySQL MVCC机制实现 MySQL的MVCC机制
  • 简单说说Python与Go的区别
    背景 工作中的主力语言是Python,今年要搞性能测试的工具,由于GIL锁的原因,Python的性能实在是惨淡,需要学一门性能高的语言来生成性能测试的压力端。因此我把目光放在了现在的新秀Go。经过一段时间的学习,也写了一个小工具,...
    99+
    2023-01-31
    区别 简单 Python
  • 说说我当初是如何学Linux的
    今天我就说说我当初是如何从一名普通桌面维护工程师,通过学习和努力转成Linux运维工程师的,以及作为Linux运维工程师需要一些什么技能和知识,希望可以帮到一些对Linux有兴趣或者想往Linux这个方向转的,都可以看看。15年我还在做普通...
    99+
    2023-06-05
  • 说说Node.js自带的模块热替换
    Node.js是一个非常流行的JavaScript运行环境,它使得开发者可以使用JavaScript构建高性能的网络应用。在Node.js的生态系统中,许多开发者喜欢使用实时重载工具来提高开发效率。而热模块替换就是一种实时重载工具,它可以在...
    99+
    2023-05-14
  • 说说html转pdf工具的使用范围
    随着互联网应用的不断普及,越来越多的文件需要在线阅读和分享。但有时候,在线阅读并不能满足用户的需求。比如,用户需要离线保存或打印某个网页或文档。这时,将网页或文档转换为PDF格式就是一种不错的选择。因此,一些网站和开发者也开发出了html转...
    99+
    2023-05-14
  • 简单说说JVM堆区的相关知识
    一、堆概述 一个jvm实例(进程)只存在一个堆内存,堆也是java内存管理的核心区域。 java 堆区在jvm启动时即被创建,其空间大小也就被确定了 《ja...
    99+
    2024-04-02
  • 说说Java异步调用的几种方式
    目录一、通过创建新线程二、通过线程池三、通过@Async注解四、通过CompletableFuture日常开发中,会经常遇到说,前台调服务,然后触发一个比较耗时的异步服务,且不用等异...
    99+
    2024-04-02
  • python 爬取全本免费小说网的小说
      这几天朋友说想看电子书,但是只能在网上看,不能下载到本地后看,问我有啥办法?我找了好几个小说网址看了下,你只能直接在网上看,要下载txt要冲钱买会员,而且还不能在浏览器上直接复制粘贴。之后我就想到python的爬虫不就可以爬取后下载吗...
    99+
    2023-01-30
    小说网 全本 小说
  • 说说字符串转 OffSetDateTime 你真的会用吗
    字符串转 OffSetDateTime 你真的会用 要创建OffsetDateTime ,需要日期 (日,月和年), 时间 (小时,分钟,秒和纳秒)和偏移量 (与UTC的差异)。 如...
    99+
    2024-04-02
  • MySQL中脑裂指的是什么
    本文小编为大家详细介绍“MySQL中脑裂指的是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“MySQL中脑裂指的是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 ...
    99+
    2024-04-02
  • 大神说的一句话说清楚一个概念
    1.分布式 把一个项目拆成几个部分,然后分别交给不同的人或部门去完成,部门与部门之间互相团结协作共同完成这个大项目。 2.集群 集群就是大家一起干活,负载均衡就是每个人干的都差不多(在同一个项目里),不能把某个人累死,也不能让某个人闲死。...
    99+
    2023-01-30
    一句 大神 概念
  • 说说@ModelAttribute在父类和子类中的执行顺序
    @ModelAttribute在父类、子类的执行顺序 被 @ModelAttribute 注解的方法会在Controller每个方法执行之前都执行,因此对于一个Controller中...
    99+
    2024-04-02
  • RCMD的使用说明
    这篇文章主要介绍“RCMD的使用说明”,在日常操作中,相信很多人在RCMD的使用说明问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”RCMD的使用说明”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!*****...
    99+
    2023-06-08
  • SQLServer的死锁说明
    目录一、了解死锁二、检测并结束死锁2.1、可能死锁的资源三、处理死锁四、最大限度地减少死锁4.1、以相同的顺序访问对象4.2、避免事务中的用户交互4.3、保持交易简短且在一个批次中4...
    99+
    2023-05-15
    SQL Server死锁说明 SQL Server死锁
  • mysql8.0JSON_CONTAINS的使用说明
    目录JSON_CONTAINS的使用语法案例JSON_CONTAINS函数问题结构如下JSON_CONTAINS的使用 语法 JSON_CONTAINS(json_doc, val[...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作