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

keepalived高可用集群

简介

        Keepalived是一款开源的高可用性(HA)软件,它主要用于实现服务器的故障隔离和负载均衡器之间的故障切换,以此提高系统的可用性。Keepalived最初是为Linux虚拟服务器(LVS)设计的,它通过虚拟路由冗余协议(VRRP)来实现高可用性,确保即使在主服务器出现故障时,服务也能无缝地继续提供。此外,Keepalived还提供了多种健康检查机制,如ICMP Ping、TCP端口检测和HTTP GET等,以监测服务器的运行状态。

VRRP介绍

        VRRP(Virtual Router Redundancy Protocol)是一种网络协议,它允许一组路由器(称为VRRP组)共享一个虚拟IP地址,以便在主路由器出现故障时,备份路由器能够接管虚拟IP地址,从而维持网络通信的连续性和可靠性。VRRP协议通常用于实现网络设备的高可用性解决方案,特别是在网络路由方面。

        在VRRP配置中,每个路由器都会被分配一个虚拟路由器标识符(VRID),该标识符用于唯一标识VRRP组中的路由器。VRRP组中的路由器会选举出一个主路由器(Master),该路由器负责对外提供服务,并定期发送VRRP组播包以表明其活跃状态。如果主路由器失效,备份路由器中优先级最高的将成为新的主路由器,接管虚拟IP地址,并继续提供服务。

        相关术语

        虚拟路由器:Virtual Router

        虚拟路由器标识:VRID(0-255)

        虚拟IP:Virtual IP,VIP

        VMAC:Virtual MAC

        主设备:master

        备份设备:backup

        优先级:priority 

 keepalived核心组件

         

  • VRRP Stack:负责VRRP消息的通告和处理。

  • Checkers:负责监测后端服务器的健康状态。

  • System Call:实现VRRP协议状态转换时调用脚本的功能。

  • SMTP:邮件组件,用于发送故障转移通知。

  • IPVS Wrapper:生成IPVS规则,用于负载均衡。

  • Netlink Reflector:网络接口相关的操作。

  • WatchDog:监控进程状态,确保Keepalived服务的稳定运行。

  • 控制组件:提供keepalived.conf的解析器。

  • IO复用器:用于 优化网络通信。

  • 内存管理组件:为通用的内存管理功能提供 访问权限。

 keepalived实验

实验准备

        四台RHEL 7.9虚拟机(关闭防火墙、SELinux):ka1、ka2为keepalived节点,web1、web2为后端真实服务器,关闭VMware中NAT模式下的DHCP

IP地址
Virtual IP192.168.0.100/24
ka1192.168.0.10/24
ka2192.168.0.20/24
web1192.168.0.110/24
web2192.168.0.120/24

配置文件内容

全局配置

global_defs {
   notification_email {        #keepalived发生故障切换时通知的邮箱,可以按行区分多个邮箱
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc        #发件人
   smtp_server 192.168.200.1        #邮件服务器地址
   smtp_connect_timeout 30        #邮件服务器超时连接时间
   router_id LVS_DEVEL        #keepalived主机唯一标识
   vrrp_skip_check_adv_addr        #检查所有通告报文,性能较差;启用此配置后,若收到                                                            的报文通告与上一个报文为同一台,则跳过检查,默认                                                            为全检查

   vrrp_strict        #遵循VRRP协议,启用此项后一下情况将无法启动服务:
                            1、无VIP地址;2、配置了单播邻居3、VRRP版本2中有IPV6地址

   vrrp_garp_interval 0        #报文发送延迟,0为不延迟
   vrrp_gna_interval 0        #消息发送延迟

   vrrp_mcast_group4 224.0.0.18        #指定组播IP地址范围
}

虚拟路由器配置

 vrrp_instance VI_1 {
    state MASTER        #身份指定
    interface eth0        #指定虚拟路由器使用的物理接口,可以和VIP不在一个网卡
    virtual_router_id 51        #每个虚拟路由器唯一标识(0-255),同属一个虚拟路由器的                                                   多个keepalived节点的唯一标识需要一致
    priority 100        #当前节点在虚拟路由器中的优先级,范围1-254,优先级越高,值越大
    advert_int 1        #VRRP通告时间间隔,默认1s
    authentication {        #认证机制
        auth_type AH | PASS        #AH为IPSEC认证(不推荐),PASS为简单密码(建议使用)
        auth_pass 1111        #预共享密钥,仅前八位有效,同一虚拟路由器的密钥必须一致
    }
    virtual_ipaddress {        #虚拟IP
        192.168.200.16        #绑定VIp,不指定网卡,默认为eth0;注意:不指定掩码默认为32
        192.168.254.101/24 dev eth1
        192.168.254.102/24 dev eth2 label eth2:1        #label:标记多VIP在同一网卡上的位置
    }
}

启用keepalived日志功能 

vim /etc/sysconfig/keepalived

独立子配置文件 

        当生产环境复杂时,主配置文件内容过多,不易管理,可以使用子配置文件划分内容

vim /etc/keepalived/keepalived.conf

        在对应路径下配置响应后缀的文件即可 

 单主架构(抢占模式)

MASTER配置

yum install -y keepalived
vim /etc/keepalived/keepalived.conf

systemctl restart keepalived.service

BACKUP配置

yum install -y keepalived推送完成后编辑
vim /etc/keepalived/keepalived.conf
[root@ka1 ~]# scp /etc/keepalived/keepalived.conf root@192.168.0.20:/etc/keepalived/keepalived.conf
#将配置文件推送至KA2

systemctl restart keepalived.service

测试

tcpdump -i eth0 -nn host 224.0.0.18

非抢占模式

        抢占模式(preempt)为默认模式,当优先级高的主机回复上线后,会抢占优先级低的主机的MASTER角色,这会使VIP在主机之间切换,造成网络波动。

        非抢占模式(nopreempt)在优先级高的主机上线后,不会抢占低优先级主机的MASTER角色,只有当低优先级主机下线后,VIP才会切换至高优先级主机,在非抢占模式下,各节点的角色都为BACKUP

KA1

         配置完成后重启服务

KA2

        配置完成后重启服务 

测试

        KA1

        KA1停止keepalived,查看KA2

systemctl stop keepalived.service

        开启KA1的leepalived查看VIP是否切换

systemctl start keepalived.service

延迟抢占模式 

        当高优先级的主机上线后,不立即切换VIP,而是延迟一段时间(默认300s)再切换

        延迟抢占命令:preempt——delay        #默认单位为s

        注意:延迟抢占模式需要各节点身份为BACKUP,并且不启用vrrp_strict

KA1

        修改配置文件,并重启服务 

 KA2

        修改配置文件,并重启服务

测试

        关闭KA1的keepalived服务,10s后重新启动,等待10s查看VIP是否切换到KA1上

 VIP单播

        默认keepalived节点之间使用组播相互通告信息,容易造成网络环境复杂,可以将其替换为单播,减少网络流量

        注意:在开启vrrp_strict时,无法启用单播

KA1

        配置完成后,重启服务

KA2 

        配置完成后,重启服务 

 测试

tcpdump -i eth0 -nn src host 192.168.0.10 and dst 192.168.0.20
#在没有VIP的节点上查看;src为拥有VIP的节点,dst为没有VIP的节点

双主架构

        配置方式与单主架构相同,其keepalived节点之间互相为主备

        KA1为VIP1的MASTER,KA2为BACKUP

        KA1为VIP2的BACKUP,KA2为MASTER

通知脚本配置

        当keepalived的状态发生变化时,通知脚本命令可以自动触发脚本执行,发送邮件通知管理员

        默认以用户keepalived_script身份执行脚本

        可以使用以下命令指定执行脚本的用户

global_defs {

        script_user

}

通知类型

        当前节点获得VIP

 notify_master "<path> master"

        当前节点转换为备用节点

 notify_backup "<path> backup"

        当前节点失效

 notify_fault "<path> fault"

        当前节点停止VRRP

 notify_stop "<path> stop"

        通用格式

notify "<path>"

 创建通知脚本

        KA1、KA2配置步骤相同

vim /etc/keepalived/mail.sh

chmod +x /etc/keepalived/mail.sh    #提供可执行权限

安装邮件发送工具

yum install -y mailx

        在收件邮箱中开启SMTP服务,获得授权密码(163、QQ邮箱均可)

 

        添加mailx配置

vim /etc/mail.rc

echo test | mail -s test 123456@test.com    #发送测试邮件

 添加自动运行脚本命令

vim /etc/keepalived/keepalived.conf

        配置完成后重启服务生效 

scp /etc/mail.rc root@192.168.0.20:/etc/mail.rc
scp /etc/keepalived/mail.sh root@192.168.0.20:/etc/keepalived/mail.sh

        配置后,重启生效

测试

        停止、启动keepalived服务,查看邮箱是否收到邮件 

keepalived+lvs高可用负载均衡集群 

http://t.csdnimg.cn/VdtU4icon-default.png?t=N7T8http://t.csdnimg.cn/VdtU4

keepalived+haproxy高可用负载均衡集群

http://t.csdnimg.cn/NunYHicon-default.png?t=N7T8http://t.csdnimg.cn/NunYH

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Pytorch实用教程】Pytorch中加载数据推荐实用:Dataset类
  • 【C++语言】list的构造函数与迭代器
  • 使用flask遇到的问题及解决方法
  • 软考又变了!4大科目同时换教材,备考如何适应?
  • Scratch跑酷引擎1.0! Scratch教程3
  • LabVIEW光纤管道泄漏检测系统
  • 6.7分不降反升的IEEE trans:“江湖地位”超稳的1区,离TOP还有多远?
  • 线上研讨会 | CATIA助力AI提升汽车造型设计
  • Install pytorch 使用 torch 的例子
  • javaFx程序找不到加载Thread线程类的解决方法
  • Linux:进程控制
  • 100V-50mA超高压低压差线性稳压器具有电流保护功能
  • 计算机学生高效记录并整理编程学习笔记的方法
  • 超详细!!!electron-vite-vue开发桌面应用之引入UI组件库element-plus(四)
  • QT界面设计开发(Visual Studio 2019)—学习记录一
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • 【node学习】协程
  • django开发-定时任务的使用
  • go append函数以及写入
  • java中的hashCode
  • JS笔记四:作用域、变量(函数)提升
  • Python利用正则抓取网页内容保存到本地
  • Python中eval与exec的使用及区别
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • Vue.js源码(2):初探List Rendering
  • vue脚手架vue-cli
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • raise 与 raise ... from 的区别
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (1)svelte 教程:hello world
  • (十) 初识 Docker file
  • (十八)三元表达式和列表解析
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)Sql Server 保留几位小数的两种做法
  • (转)创业的注意事项
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • //TODO 注释的作用
  • @angular/cli项目构建--http(2)
  • @Builder用法
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • @EventListener注解使用说明
  • @KafkaListener注解详解(一)| 常用参数详解
  • [20190416]完善shared latch测试脚本2.txt
  • [AIGC codze] Kafka 的 rebalance 机制
  • [Android]Android开发入门之HelloWorld
  • [C/C++随笔] char与unsigned char区别
  • [CISCN 2019华东南]Web11
  • [Day 63] 區塊鏈與人工智能的聯動應用:理論、技術與實踐