Keepalived高可用服务详解(面试点+实践点都包括噢!!!)

简介: Keepalived高可用服务详解(面试点+实践点都包括噢!!!)

理论部分

总结比较重要的点,万一面试的时候问道某个理论点了呢。尤其是Keepalived和VRRP工作原理,玩意面试问你个说说Keepalived是怎么工作的,这不就是理论部分了嘛,不过不面试也应该知道。

Keepalived介绍

  • Keepalived软件起初是为管理及监控LVS集群中各节点状态而设计的,后来加入了VRRP功能,可以为其他服务解决高可用问题。
  • Keepalived软件主要通过VRRP协议实现高可用功能。
  • VRRP协议是Virtual Router Redundancy Protocol(虚拟路由冗余协议)的缩写,目的是为解决静态路由单点故障。
  • 官方网站:http://www.keepalived.org

Keepalived服务重要功能

  • 管理LVS负载均衡软件
  • 实现对LVS集群节点健康检查功能(healthcheck)
  • 作为系统网络服务的高可用功能(failover)

Keepalived高可用故障切换转移原理

Keepalived高可用服务通过VRRP来实现故障切换转移。

VRRP协议工作原理

  • VRRP协议是Virtual Router Redundancy Protocol(虚拟路由冗余协议)的缩写,目的是为解决静态路由单点故障。
  • VRRP通过竞选协议机制来决定路有任务运行在哪台主机上。
  • VRRP用IP多播方式(默认多播地址224.0.0.18)实现高可用对之间通信的。
  • 工作时主节点向备节点发包,当某时刻备节点接收不到数据包的时候,会启动接管程序接管主节点资源。
  • 备节点可以有多个,通过优先级竞选,但在工作中通常还是一对居多。

Keepalived服务工作原理

  • Keepalived高可用服务通过VRRP协议进行通讯,通过竞选机制确定主备。
  • 工作时主节点优先获得资源,备节点等待,当主节点出现故障时,备节点主动接管主节点资源,继续对外提供服务。
  • 主节点向备节点发送VRRP广播包,告诉备节点自己的存活,当备节点接收不到来自主节点的广播包时,就会主动接管资源,继续提供服务,接管速度最快可以小于1秒。

实践部分

实践部分从Keepalived的搭建、配置文件、高可能配置上说明。

环境搭建及讲解

环境搭建

这里先用一台主机搭建Keepalived服务

  • 环境准备
cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core)
uname -r
3.10.0-693.el7.x86_64
  • 安装Keepalived服务(采用yum安装方式)
yum -y install keepalived
  • 启动服务及查看状态(默认启动三个进程三个VIP)
systemctl start keepalived
ps -ef | grep keepalived | grep -v grep
root       1662      1  0 09:53 ?        00:00:00 /usr/sbin/keepalived -D
root       1663   1662  0 09:53 ?        00:00:00 /usr/sbin/keepalived -D
root       1664   1662  0 09:53 ?        00:00:00 /usr/sbin/keepalived -D
  • 关闭服务
systemctl stop keepalived

配置文件说明

yum安装的keepalived版本为v1.3.5,如果想要更新的版本甚至2.x版本的话请使用编译安装

Keepalived服务高可用功能的配置文件包含两个重要模块:全局定义部分和VRRP实例定义区块部分

yum安装的配置文件位置为/etc/keepalived/keepalived.conf

这部分内容为全局定义模块:

  1 ! Configuration File for keepalived
  2 
  3 global_defs {
  4    notification_email {
  5      acassen@firewall.loc
  6      failover@firewall.loc
  7      sysadmin@firewall.loc
  8    }
  9    notification_email_from Alexandre.Cassen@firewall.loc
 10    smtp_server 192.168.200.1
 11    smtp_connect_timeout 30
 12    router_id LVS_DEVEL
 13    vrrp_skip_check_adv_addr
 14    vrrp_strict
 15    vrrp_garp_interval 0
 16    vrrp_gna_interval 0
 17 }

以上内容含义分别为:

  • 第一行:注释,定义这个keepalived服务配置文件
  • 第四~八行:定义服务故障报警的邮箱地址(基本不用)
  • 第九行:指定邮箱的发件人
  • 第十行:指定发送邮箱的SMTP服务区
  • 第十一行:连接SMTP的超时时间

第十二行:Keepalived的服务标识,同一局域网,标识唯一

第十三行:检查收到的 VRRP 广告中的所有地址

第十四行:强制执行严格的 VRRP 协议合规性

第十五行:接口上发送的免费 ARP 消息之间的延迟

第十六行:在接口上发送的未经请求的 NA 消息之间的延迟

这部分内容为VRRP实例定义区块:

 19 vrrp_instance VI_1 {
 20     state MASTER
 21     interface eth0
 22     virtual_router_id 51
 23     priority 100
 24     advert_int 1
 25     authentication {
 26         auth_type PASS
 27         auth_pass 1111
 28     }
 29     virtual_ipaddress {
 30         192.168.200.16
 31         192.168.200.17
 32         192.168.200.18
 33     }
 34 }

以上内容含义分别为:

  • 第十九行:定义这是一个vrrp_instance实例,名字为VI_1
  • 第二十行:表示角色状态为MASTER,备机为BACKUP
  • 第二十一行:表示对外提供服务的网络端口,注意多网卡时要选对网卡
  • 第二十二行:虚拟路由ID标识,一个高可用集群中标识相同
  • 第而十三行:优先级,数字越大优先级越高
  • 第二十四行:MASTER与BACKUP之间通信检查的时间间隔,默认1秒
  • 第二十五~八行:权限认证配置,一个实例中主备认证相同,密码建议4位数字
  • 第二十九~三十三行:定义虚拟ip,可以有多个,最好指明子网掩码和绑定网卡

更多配置说明请访问官方文档地址:https://www.keepalived.org/manpage.html

Keepalived服务单实例配置

  • 准备两台装着相同Keepalived服务的主机,安装方式上面有
  • lb01主机上的配置(MASTER)
! Configuration File for keepalived
global_defs {
   router_id lb01
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.100.100/24 dev eth0 label eth0:3
    }
}
  • lb02主机配置,由于配置类似,只说不同点(BACKUP)
4    router_id lb02
  8     state BACKUP
  11     priority 50
  • 两台主机启动服务
systemctl start keepalived
  • 此时MASTER节点能看到VIP,BACKUP节点看不到为正常
inet 192.168.100.100/24 scope global eth0:3
  • 测试:关闭MASTER节点服务,VIP是否漂移到BACKUP节点

  • 当MASTER节点恢复后,VIP会重新回到主节点

关于Keepalived“脑裂”问题

脑裂一般是因为某些原因两台高可用服务器无法检测对方的心跳消息,各自取得资源及服务的所有权,同时运行服务。这样导致ip或服务在两端同时存在而发生冲突。

可能导致脑裂的原因:

  • 心跳链路故障,无法正常通信
  • 开启防火墙导致心跳消息拦截
  • 配置信息不正确
  • 其他

常用解决方案:

  • 同时使用串行电缆和以太网电缆连接,同时使用两条心跳线
  • 做好对脑裂的监控报警
  • 检测到脑裂问题强行关闭一个心跳节点

Keepalived服务双实例双主模式

基于单实例的环境,进行配置双实例。

  • lb01配置文件修改
! Configuration File for keepalived
global_defs {
   router_id lb01
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.100.100/24 dev eth0 label eth0:3
    }
}
vrrp_instance VI_2 {
    state BACKUP
    interface eth0
    virtual_router_id 52
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.100.150/24 dev eth0 label eth0:4
    }
}
  • lb02配置文件修改:
! Configuration File for keepalived
global_defs {
   router_id lb02
}
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.100.100/24 dev eth0 label eth0:3
    }
}
vrrp_instance VI_2 {
    state MASTER
    interface eth0
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.100.150/24 dev eth0 label eth0:4
    }
}
  • 两台主机重启keepalived服务,然后观察VIP状态
  • 正常情况下双主存活如下图:

  • 模拟故障,当其中一个节点关闭服务后,VIP变化(关闭lb02节点服务)


  • 可以发现,故障主机的VIP会漂向可用节点上继续工作,不影响业务,当故障节点恢复后进行重新选举后VIP会回到优先级高的节点上工作。

Keepalived配合其他如Nginx、LVS、haproxy等软件工作

这部分内容后续会单独写出相应的文章,到时候会把其他文章的链接放在这里形成一整套的内容集合,大家可以关注。

对于keepalived服务高可用部分的单独讲解就先到这了。

目录
相关文章
|
7月前
|
监控 负载均衡 Cloud Native
ZooKeeper分布式协调服务详解:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入剖析ZooKeeper分布式协调服务原理,涵盖核心概念如Server、Client、ZNode、ACL、Watcher,以及ZAB协议在一致性、会话管理、Leader选举中的作用。讨论ZooKeeper数据模型、操作、会话管理、集群部署与管理、性能调优和监控。同时,文章探讨了ZooKeeper在分布式锁、队列、服务注册与发现等场景的应用,并在面试方面分析了与其它服务的区别、实战挑战及解决方案。附带Java客户端实现分布式锁的代码示例,助力提升面试表现。
598 2
|
7月前
|
XML 分布式计算 监控
Oozie工作流管理系统设计与实践:面试经验与必备知识点解析
【4月更文挑战第9天】本文详述了Oozie工作流管理系统的核心概念,包括安装配置、Workflow XML、Action、Coordinator和Bundle XML定义。此外,讨论了工作流设计实践,如监控调试、自动化运维,并对比了Oozie与其他工作流工具的差异。文中还分享了面试经验及解决实际项目挑战的方法,同时展望了Oozie的未来发展趋势。通过学习,读者能提升Oozie技术能力,为面试做好充分准备。
152 0
|
7月前
|
机器学习/深度学习 数据采集 Python
Python机器学习面试:Scikit-learn基础与实践
【4月更文挑战第16天】本文探讨了Python机器学习面试中Scikit-learn的相关重点,包括数据预处理(特征缩放、缺失值处理、特征选择)、模型训练与评估、超参数调优(网格搜索、随机搜索)以及集成学习(Bagging、Boosting、Stacking)。同时,指出了常见错误及避免策略,如忽视数据预处理、盲目追求高精度、滥用集成学习等。掌握这些知识点和代码示例,能帮助你在面试中展现优秀的Scikit-learn技能。
99 5
|
2月前
|
消息中间件 存储 Kafka
面试题:Kafka如何保证高可用?有图有真相
面试题:Kafka如何保证高可用?有图有真相
|
4月前
|
负载均衡 监控 Java
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
|
4月前
|
运维 监控 容灾
[go 面试] 实现服务高可用的策略和实践
[go 面试] 实现服务高可用的策略和实践
|
4月前
|
Go API 数据库
[go 面试] 分布式事务框架选择与实践
[go 面试] 分布式事务框架选择与实践
|
4月前
|
人工智能 大数据 云计算
开启第二增长曲线!副业必备6000+课程、免费算力、编程实践助你飞速成长!
阿里云为高校学生提供全方位学习计划,含6000+免费精品课程与自测题,及免费在线编程练习。学生可免费获2.68亿小时算力,包括云服务器ECS、对象存储OSS等资源。同时,参与阿里云天池竞赛赢取高额奖金,并通过训练营获得实践经验和证书。借助这些资源,学生能紧跟信息化与AI潮流,为职业发展奠定坚实基础。
107 2
|
5月前
|
设计模式 存储 缓存
Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
61 0
|
5月前
|
存储 安全 Java
Java面试题:假设你正在开发一个Java后端服务,该服务需要处理高并发的用户请求,并且对内存使用效率有严格的要求,在多线程环境下,如何确保共享资源的线程安全?
Java面试题:假设你正在开发一个Java后端服务,该服务需要处理高并发的用户请求,并且对内存使用效率有严格的要求,在多线程环境下,如何确保共享资源的线程安全?
71 0