当前位置: 首页 > news >正文

Keepalived(一)

高可用集群

High Availability Cluster,简称HA Cluste。以减少服务中断时间为目的的服务器集群技术。它通过保护用户的业务程序对外不间断提供的服务,把因软件、硬件、人为造成的故障对业务的影响降低导最低

衡量可用性:在线时间/(在线时间+故障时间)

1年 = 365天 = 8760小时

99% 即一年内有 8760 * 1% = 87.6小时故障

99.9% 即一年内有 8760 * 0.1% = 8.76小时故障

99.99% 即一年内有 8760 * 0.01% = 52.6分钟故障

99.999% 即一年内有 8760 * 0.001% = 5.26分钟故障

99.9999% 即一年内有 8760 * 0.0001% = 31秒故障

自动侦测

主机上的软件通过“心跳线”(连接工作机与备份机的网线),经由复杂的监听程序,逻辑判断,来相互侦测对方运行的情况。

常用的方法是:集群各节点间通过心跳信息判断节点是否出现故障。

故障转移

当活动的服务或应用意外终止时,快速启用冗余或备用的服务器、系统、硬件或者网络接替它们工作。故障转移通常是自动完成的。

在服务器级别,自动故障转移通常使用一个心跳线连接两台服务器。只要主服务器与备用服务器间“心跳”没有中断,备用服务器就不会启用。

脑裂

在高可用(HA)系统中,当联系两个节点的“心跳线”断开时,本来为一整体、动作协调的HA系统,就分裂成为2个独立的个体。由于相互失去了联系,都以为是对方出了故障。两个节点上的HA软件像“裂脑人”一样,争抢“共享资源”、争起“应用服务”,就会发生严重后果——或者共享资源被瓜分、两边“服务”都起不来了;或者两边“服务”都起来了,但同时读写“共享存储”,导致数据损坏(常见如数据库轮询着的联机日志出错)。

产生原因

  • 因心跳线坏了(包括断了,老化)。
  • 因网卡及相关驱动坏了,ip配置及冲突问题(网卡直连)。
  • 因心跳线间连接的设备故障(网卡及交换机)。
  • 因仲裁的机器出问题(采用仲裁的方案)。
  • 高可用服务器上开启了 iptables防火墙阻挡了心跳消息传输。
  • 高可用服务器上心跳网卡地址等信息配置不正确,导致发送心跳失败。
  • 其他服务配置不当等原因,如心跳方式不同,心跳广插冲突、软件Bug等。

解决方案

  • 添加冗余“心跳线”

减少脑裂发生几率。

  • 启用磁盘锁

正在服务一方锁住共享磁盘,“裂脑”发生时,让对方完全“抢不走”共享磁盘资源。但使用锁磁盘也会有一个不小的问题,如果占用共享盘的一方不主动“解锁”,另一方就永远得不到共享磁盘。现实中假如服务节点突然死机或崩溃,就不可能执行解锁命令。后备节点也就接管不了共享资源和应用服务。于是有人在HA中设计了“智能”锁。即:正在服务的一方只在发现心跳线全部断开(察觉不到对端)时才启用磁盘锁,平时就不上锁了。

  • 设置仲裁机制

例如设置参考IP(如网关IP或某一个服务器),当心跳线完全断开时,2个节点都各自ping一下参考IP,不通则表明断点就出在本端。不仅“心跳”、还兼对外“服务”的本端网络链路断了,即使启动(或继续)应用服务也没有用了,那就主动放弃竞争,让能够ping通参考IP的一端去起服务。更保险一些,ping不通参考IP的一方干脆就自我重启,以彻底释放有可能还占用着的那些共享资源。

  • 监控报警

邮箱、短信、值班,在问题发生时第一时间人为介入,降低损失

简介

keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。

keepalived的故障转移是基于VRRP(虚拟路由器冗余协议)协议实现的。

keepalived工作在TCP/IP参考模型的第三、四和第五层,即网络层、传输层和应用层。

工作原理

将N台提供相同功能的服务器组成一个服务器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该服务器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕机,这时就需要根据VRRP的优先级来选举一个backup当master。

keepalived程序是vrrp协议在linux主机上以守护进程方式的实现,能够根据配置文件生成IPVS规则 ,并对各real server的健康做检测,以及Loadbalance主机和backup主机之间failover的实现。

模块

Keepalived采用是模块化设计,不同模块实现不同的功能,主要有三个模块:

  • core:负责主进程的启动,维护和全局配置文件的加载
  • check:负责健康检查
  • vrrp:用来实现vrrp协议

配置文件

/etc/keepalived/keepalived.conf

! Configuration File for keepalivedglobal_defs {    #全局配置notification_email {    #定义邮件发送目标acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.loc    #定义邮件发送者smtp_server 192.168.200.1    #指定smtp服务器地址smtp_connect_timeout 30    #指定smtp连接超时时间router_id LVS_DEVEL    #标识keepalived,唯一。数字、英文都可以vrrp_skip_check_adv_addr    #对所有通告报文都检查,会比较消耗性能,启用此配置后,如果收到的通告报文和上一个报文是同一个路由器,则跳过检查,默认值为全检查vrrp_strict    #严格遵守VRRP协议,启用此项后以下状况将无法启动服务:1.无VIP地址 2.配置了单播邻居 3.在VRRP版本2中有IPv6地址,开启动此项并且没有配置vrrp_iptables时会自动开启iptables防火墙规则,默认导致VIP无法访问,建议不加此项配置vrrp_garp_interval 0    #在一个接口发送的两个arp之间的延迟,可以是毫秒级。单位秒vrrp_gna_interval 0    #消息发送延迟时间,可以是毫秒级
}#定义VRRP实例,一个配置文件可以有多例,不同主机之间互为主备,实例名称应该一致
vrrp_instance VI_1 {state MASTER    #定义Keepalived角色,MASTER为主,BACKUP为备interface eth0    #指定检测的网络接口virtual_router_id 51    #虚拟路由标识,数字形式。在同一个vrrp实例中,master和backup保持一致priority 100    #节点优先级,数字越大优先级越高。在同一个vrrp实例中,master优先级必须必backup高,不然会切换角色advert_int 1    #心跳时间,单位为秒。指定MASTER与BACKUP之间同步检查的时间间隔authentication {    #认证方式同一个实例中keepalived主备必须一致,通过此认证才能加入此群组auth_type PASSauth_pass 1111}virtual_ipaddress {    #设置VIP,主备相同,可以使用dev选项来指定接口192.168.200.16192.168.200.17192.168.200.18}
}
#虚拟服务
virtual_server 192.168.200.100 443 {     #虚拟服务器地址(VIP)和端口空格隔开delay_loop 6    #健康检查间隔lb_algo rr    #定义负载均衡调度算法lb_kind NAT    #定义lvs工作模式persistence_timeout 50    #持久会话保持时间protocol TCP    #监控服务的协议类型#定义rs部分real_server 192.168.201.100 443 {weight 1    #lvs权重SSL_GET {    #监控检查的方式,常见的有HTTP_GET/SSL_GET/TCP_CHECK/MISC_CHECKurl {path /    #指定ssl——get健康检查路径digest ff20ad2481f97b1754ef3e12ecd3a9cc}url {path /mrtg/digest 9b3a0c85a887a256d6939da88aabd8cd}connect_timeout 3    #real server若3s不响应就超时,就判断为realserver不健康,需要重新连接nb_get_retry 3    ##标识重试3次,防误伤delay_before_retry 3    #重试间隔3s}    ##总共12s才能判断故障节点,可以改小点}
}
http://www.lryc.cn/news/140101.html

相关文章:

  • cs231n assignment3 q5 Self-Supervised Learning for Image Classification
  • 电商首屏设计
  • SpringBoot集成Redis
  • qt 的基础学习计划列表
  • CSS中如何改变鼠标指针样式(cursor)?
  • SpringMVC-2-Spring MVC拦截器详解:从入门到精通
  • 探索AIGC人工智能(Midjourney篇)(一)
  • 【IMX6ULL驱动开发学习】11.Linux之SPI驱动
  • 什么是网络中的服务质量 (QoS),其相关技术和关键指标有哪些?
  • Django(4)-Django 管理页面
  • js的使用之时间如何定义,窗口加载事件
  • 会声会影2023全新中文专业版下载安装教程
  • excel处理公式获得最终值--------------gxl
  • 变量函数及销毁函数中的变量-PHP8知识详解
  • Unity Alembic闪烁问题
  • 结构型模式-适配器模式
  • 数据结构:线性表之-顺序表
  • 请你说说json 序列化功能
  • Wireshark流量分析
  • spring cloud整合spring boot,整合nacos、gateway、open-feign等组件
  • 大数据和人工智能之间如何的相互促进
  • 基于互联网会计信息系统的内部控制
  • 网络编程——套接字和字节序
  • 【网络安全】防火墙知识点全面图解(三)
  • 飞天使-k8s基础组件分析-配置和密钥管理
  • QT使用QXlsx实现对Excel单元格和字体样式的相关操作 QT基础入门【Excel的操作】
  • 酷炫JavaScript 技巧
  • 【FAQ】H.265视频无插件流媒体播放器EasyPlayer.js播放webrtc断流重连的异常修复
  • java八股文面试[JVM]——垃圾回收器
  • redis持久化机制 事务详解