从零掌握keepalived合集

news2024/9/20 14:26:40

文章目录

  • keepalived简介
  • keepalived部署
  • keepalived基础设置
    • 主配置文件修改
    • 独立子配置文件实现
    • 实现日志分离
  • 企业应用实例
    • 抢占式与非抢占式
      • 抢占式
      • 非抢占式
    • VIP单波配置
    • 消息通知脚本配置
  • 实现IPVS高可用
    • keepalived+lvs实现
    • keepalives+haproxy实现

keepalived简介

keepalived基于VRRP协议的软件实现,原生设计目的为了高可用 ipvs服务

ipvs,IP虚拟服务器(IP Virtual Server,简写为IPVS)。是运行在LVS下的提供负载均衡功能的一种技术。

keepalived的功能:

  • 基于vrrp协议完成地址流动

  • 为vip地址所在的节点生成ipvs规则(在配置文件中预先定义)

  • 为ipvs集群的各RS(后端的Real Server)做健康状态检测

  • 基于脚本调用接口完成脚本中定义的功能,进而影响集群事务,以此支持nginx、haproxy等服务

keepalived部署

image-20240812172714051

以上述拓扑为例进行部署和后续知识点执行

角色ipvip
KA1192.168.84.10192.168.84.100
KA2192.168.84.20192.168.84.100
RS1192.168.84.110-
RS2192.168.84.120-
1、关闭防火墙、selinux
2、RS1和RS2配置web服务方便后续成果展示
3、KA1和KA2配置keepalived
1、下载keepalived
yum install -y keepalived
2、启动
systemctl enable keepalived --now
systemctl start keepalived

keepalived基础设置

主配置文件修改

[root@la1 ~]# vim /etc/keepalived/keepalived.conf 

! Configuration File for keepalived
global_defs {
   notification_email {
       XXXXXXXXXX@qq.com #keepalived 发生故障切换时邮件发送的目标邮箱,可以按行区分写多个
   }
   notification_email_from keepalived@KA1.abc.org #发邮件的地址
   smtp_server 127.0.0.1 #邮件服务器地址
   smtp_connect_timeout 30 #邮件服务器连接timeout
   router_id KA1.XXXX.org #每个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 #绑定为当前虚拟路由器使用的物理接口,如:eth0,可以和VIP不在一个网卡
    
   virtual_router_id 51 #每个虚拟路由器惟一标识,范围:0-255,每个虚拟路由器此值必须唯一否则服务无法启动,同属一个虚拟路由器的多个keepalived节点必须相同,务必要确认在同一网络中此值必须唯一
    
   priority 100 #当前物理节点在此虚拟路由器的优先级,范围:1-254
   #值越大优先级越高,每个keepalived主机节点此值不同
   
   advert_int 1 #vrrp通告的时间间隔,默认1s
   authentication { #认证机制
       auth_type AH|PASS #AH为IPSEC认证(不推荐),PASS为简单密码(建议使用)示例:
        
       uth_pass 1111 #预共享密钥,仅前8位有效
       #同一个虚拟路由器的多个keepalived节点必须一样
   }
   virtual_ipaddress { #虚拟IP,生产环境可能指定上百个IP地址
        
       <IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>
       192.168.84.128.100 #指定VIP,不指定网卡,默认为eth0,注意:不指定/prefix,默认32
       172.25.254.102/24 dev eth2 label eth2:1
   }
}                                             
KA1设置:
! Configuration File for keepalived
global_defs { 
 #vrrp_strict 
 vrrp_mcast_group4 224.0.0.18 #指定组播IP地址范围:   
}

vrrp_instance VI_1 {
   state MASTER
   interface eth0
   virtual_router_id 100 
   priority 100 
   
   virtual_ipaddress { 
       172.25.254.100/24 dev eth0 label eth0:1
   }
}             
KA2设置
! Configuration File for keepalived
global_defs { 
 #vrrp_strict 
 vrrp_mcast_group4 224.0.0.18 #指定组播IP地址范围:   
}

vrrp_instance VI_1 {
   state BACKUP
   interface eth0
   virtual_router_id 100 
   priority 60		#降低优先级 
   
   virtual_ipaddress { 
       172.25.254.100/24 dev eth0 label eth0:1
   }
}  

测试:

[root@la1 ~]#  tcpdump -i eth0 -nn host 224.0.0.18
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
18:18:10.661295 IP 192.168.84.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20
18:18:11.662912 IP 192.168.84.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20

独立子配置文件实现

注:实现独立子配置文件,需将上述vrrp_instance VI_1 内容注释或删除
命令格式:
	include /path/file
具体操作:
1、主配置文件
include /etc/keepalived/conf.d/*.conf

2、设立子配置文件目录和内容
[root@la1 ~]# mkdir -p /etc/keepalived/conf.d
[root@la1 ~]# touch /etc/keepalived/conf.d/192.168.84.100.conf
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.84.100/24 dev eth0 label eth0:1
    }
}

3、重启服务测试
[root@la1 ~]# systemctl restart keepalived.service

实现日志分离

1、keepalived配置文件中设置日志类型
[root@la1 ~]# vim /etc/sysconfig/keepalived 
KEEPALIVED_OPTIONS="-D -S 6"

2、日志配置文件中添加
[root@la1 ~]# vim /etc/rsyslog.conf
local6.*                                                /var/log/keepalived.log

3、重启服务
[root@la1 ~]# systemctl restart keepalived.service 
[root@la1 ~]# systemctl restart rsyslog.service 


[root@la1 ~]# ls -l /var/log/keepalived.log 
-rw------- 1 root root 3906 8月  12 18:28 /var/log/keepalived.log

企业应用实例

抢占式与非抢占式

系统默认为抢占式
抢占式:例如LA1为主,但LA1突然down掉,此时LA2作为备份代替主,当LA1好了之后,VIP又回到LA1上
非抢占式:同上述,LA1活了之后,IPV还在LA2上,LA1变相的成为了LA2的备份
nopreempt #非抢占模式
注:若为非抢占模式则LA1、LA2都需为BACKUP

preempt_delay #     #指定抢占延迟时间为#s,默认延迟300s

抢占式

将LA1关掉
[root@la1 ~]# systemctl stop keepalived.service 

image-20240812183704196

image-20240812183902715

打开LA1
[root@la1 ~]# systemctl start keepalived.service 

image-20240812184028145

非抢占式

LA1配置文件
vrrp_instance VI_1 {
    state BACKUP	#更改模式
    nopreempt		#非抢占模式

LA2配置文件
vrrp_instance VI_1 {
    state BACKUP
    nopreempt

image-20240812184615623

VIP单波配置

#在所有节点vrrp_instance语句块中设置对方主机的IP,建议设置为专用于对应心跳线网络的地址,而非使用业务网络
unicast_src_ip <IPADDR>  #指定发送单播的源IP
unicast_peer {
   <IPADDR>     #指定接收单播的对方目标主机IP
   ......
}
LA1、LA2操作相同,只需调换源IP和备份机IP地址位置

image-20240812185042104

image-20240812185705885

消息通知脚本配置

1、节点配置脚本
[root@la1 ~]# vim /etc/keepalived/mail.sh
#!/bin/bash
mail_dest='自身qq号'
mail_send()
{
   mail_subj="$HOSTNAME to be $1 vip 转移"
   mail_mess="`date +%F\ %T`: vrrp 转移,$HOSTNAME 变为 $1"
   echo "$mail_mess" | mail -s "$mail_subj" $mail_dest
}
case $1 in
   master)
   mail_send master
   ;;
   backup)
   mail_send backup
   ;;
   fault)
   mail_send fault
   ;;
   *)
   exit 1
   ;;
esac

2、给脚本执行权限
chmod +x /etc/keepalived/mail.sh

3、配置主文件(脚本调用)
   notify_master "/etc/keepalived/mail.sh master"
   notify_backup "/etc/keepalived/mail.sh backup"
   notify_fault "/etc/keepalived/mail.sh fault"

3、邮件配置
[root@la2 ~]# dnf install mailx -y
[root@la1 ~]# vim /etc/mail.rc
set from=XXXXXXXX@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=XXXXXXX@qq.com
set smtp-auth-password=QQ的smtp授权码
set smtp-auth=login
set ssl-verify=ignore

实现IPVS高可用

keepalived+lvs实现

原理:
Keepalived 主要用于监控服务器的状态,并通过虚拟 IP 地址(VIP)实现故障转移。LVS 负责进行负载均衡。当主 LVS 服务器出现故障时,Keepalived 会检测到并将 VIP 切换到备用的 LVS 服务器上,从而实现高可用性。

步骤:
1. 安装和配置 LVS :
    - 安装 LVS 相关软件包。
    - 配置 LVS 的负载均衡策略,例如选择 NAT、DR 或 TUN 模式,并设置后端服务器列表。
2. 安装 Keepalived :
    - 在主、备 LVS 服务器上安装 Keepalived 软件包。
3. 配置 Keepalived :
    - 配置主、备服务器的优先级,通常主服务器的优先级高于备用服务器。
    - 定义虚拟 IP 地址(VIP),这是客户端实际访问的 IP 地址。
    - 设置健康检查机制,例如通过 Ping 或者检测特定端口来确定 LVS 服务是否正常。
4. 启动服务 :
    - 启动 LVS 和 Keepalived 服务。

通过这样的组合配置,可以有效地提高 LVS 负载均衡服务的可用性和可靠性,保障业务的连续性。 
KA1配置keepalived
[root@ka1 ~]# vim /etc/keepalived/conf.d/192.168.84.100.conf 
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
	192.168.84.100/24 dev eth0 label eth0:1
    }
}


virtual_server 192.168.84.100 80 {
    delay_loop 6
    lb_algo wrr		#加权轮询模式
    lb_kind DR		#DR模式(直连)
    persistence_timeout 0
    protocol TCP

    real_server 192.168.84.110 80 {
        weight 1
        HTTP_GET {		#指定服务协议为HTTP
            url {
              path /
	          status_code 200		#判断健康状态
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.84.120 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            } 
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }   
    }   

}
KA2配置
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 100
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
	192.168.84.100/24 dev eth0 label eth0:1
    }
}



virtual_server 192.168.84.100 80 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    persistence_timeout 0
    protocol TCP

    real_server 192.168.84.110 80 {
        weight 1
        HTTP_GET {
            url {
              path /
	      status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.84.120 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            } 
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }   
    }   

}

image-20240813193956515

keepalived可以动态检测后端真实服务器的状态,当主服务器不可用时会将VIP转到备用服务器上

keepalives+haproxy实现

1、安装haproxy

2、开启内核参数(使得IP不在本主机也能监听)
[root@ka1 ~]# vim /etc/sysctl.conf 
net.ipv4.ip_nonlocal_bind = 1
[root@ka1 ~]# sysctl --system

3、编辑haproxy配置文件

listen webserver
   bind 192.168.84.200:80
   mode http
   balance roundrobin
   server web1 192.168.84.110:80 check inter 3 fall 2 rise 4
   server web2 192.168.84.120:80 check inter 3 fall 2 rise 4

4、编写检测haproxy状态shell脚本
#!/bin/bash
[ ! -f killall -0 haproxy ]

5、编辑keepalived配置文件

vrrp_script check_haproxy {
   script "/etc/keepalived/scripts/haproxy.sh"  #脚本位置
   interval 1
   weight -30
   fall 2
   rise 2
   timeout 2
}

vrrp_instance web {
   track_script {
       check_haproxy
   }
}

.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2049191.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GAMES104:07游戏中渲染管线、后处理和其他的一切-学习笔记

文章目录 前言一&#xff0c;Ambient Occlusion环境光遮蔽1.1 Precomputed AO1.2 Screen Space Ambient Occlusion(SSAO)1.3 Horizon-based Ambient Occlusion(HBAO)1.4 Ground Truth-based Ambient Occlusion(GTAO)1.5 Rat-Tracing Ambient Occlusion 二&#xff0c;雾效2.1 D…

Java MessagePack序列化工具(适配Unity)

Java MessagePack序列化工具&#xff08;适配Unity&#xff09; 前言项目代码编写 结 前言 前后端统一用MessagePack&#xff0c;结果序列化的结果不一样&#xff0c;发现C#侧需要给每个类增加描述字段数量的Head&#xff0c;而Java却不用&#xff0c;所以在Java侧封装一下序列…

51系列LY-51S出现下载失败·的解法

1.他的下载电路是特殊设计的 一般连接1&#xff0c;2&#xff0c;另外的接口2&#xff0c;3一般不接&#xff0c;而且2&#xff0c;3的功能是用来diy自动下载电路的&#xff0c;你接上2&#xff0c;3又没独特的下载电路会一直复位

进程池详解

目录 进程池 1、什么是进程池&#xff1f; 2、实现进程池 &#xff08;1&#xff09;相关函数&#xff1a; pipe函数&#xff1a; write函数 read函数 waitpid函数 &#xff08;2&#xff09;代码实现面向过程进程池 Task.hpp processPool.cc 3、注意事项 进程池 …

坚鹏讲人才第12期:引领数字化未来—数字化人才与导师共赢之路

坚鹏讲人才第12期&#xff1a;引领数字化未来—数字化人才与导师共赢之路 ——抢占名额先机 成为坚鹏弟子 加速数字化转型 数字化浪潮汹涌而至&#xff0c;你是否感到迷茫、困惑、焦虑&#xff1f;想不想一脚油门冲进未来&#xff0c;和我一同探寻数字化人才的奥秘&#xf…

【迅为电子】RK3568驱动指南|第十七篇 串口-第202章 串口编程

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

计算机毕业设计选什么题目好?基于vue的音乐播放系统

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…

LangGraph Studio:首款智能体(agent)IDE

0 前言 LangGraph Studio 提供了一个专门的智能体IDE&#xff0c;用于可视化、交互和调试复杂的智能体应用程序。本文来了解如何在桌面使用。 LLM为新型智能体应用程序的发展铺平了道路——随这些应用程序演进&#xff0c;开发它们所需工具也必须不断改进。今天推出的 LangG…

C++(10)类语法分析(1)

C(10)之类语法分析(1) Author: Once Day Date: 2024年8月17日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可参考专栏: 源码分析_Once-Day的博客-CSDN博客 …

JavaFX布局-DialogPane

JavaFX布局-DialogPane 常用属性标题区域headerTextheader 内容区域contentTextcontent graphic按钮设置expandableContent 实现方式Java实现 一个特殊的布局容器&#xff0c;常用于弹出框&#xff0c;与Dialog配合一起使用包含标题区&#xff0c;内容区域&#xff0c;扩展区域…

Merkle树(Merkle Tree):高效地验证某个数据块是否包含在数据集中

目录 Merkle树(Merkle Tree) 一、基本结构 二、构建过程 三、主要作用 四、应用领域 Merkle树(Merkle Tree) Merkle树(Merkle Tree),也被称为默克尔树或Merkle哈希树,是一种基于哈希的数据结构,主要用于验证大规模数据集的完整性和一致性。它的名字来源于其发明…

【Unity教程】使用 Animation Rigging实现IK制作程序化的动画

在 Unity 开发中&#xff0c;为角色创建逼真且自适应的动画是提升游戏体验的关键。在本教程中&#xff0c;我们将结合 Animation Rigging 工具和 IK&#xff08;Inverse Kinematics&#xff0c;反向运动学&#xff09;插件来实现程序化的动画。 视频教程可以参考b战大佬的视频 …

不只是翻译,更是智慧碰撞!有道翻译与3大强敌的全方位较量

现在的科技牛得不行&#xff0c;翻译软件早就成了咱们学习、工作、生活里少不了的帮手。它们不光是把语言的墙给推倒了&#xff0c;还让咱们说话交流快多了。今儿个&#xff0c;咱们就一块儿瞧瞧2024年的翻译软件圈子&#xff0c;瞅瞅那几个最火的翻译工具&#xff0c;它们怎么…

生信软件30 - 快速单倍型分析工具merlin

Merlin可用于连锁分析或关联分析、IBD和亲缘关系估计、单倍型分析、错误检测和模拟。 1. merlin下载 下载地址&#xff1a; http://csg.sph.umich.edu/abecasis/merlin/download/ # linux版本 wget http://csg.sph.umich.edu/abecasis/merlin/download/Linux-merlin.tar.gz …

如何在本地和远程删除 Git 分支?

如何在本地和远程删除 Git 分支&#xff1f; 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;武汉城市开发者社区主理人 擅长.n…

创新赛场的制胜法宝:如何让你的商业计划书脱颖而出

创新赛场的制胜法宝&#xff1a;如何让你的商业计划书脱颖而出 前言明确产品或服务的核心功能突出创新性用户需求和市场痛点具体示例和场景详细描述产品和服务的方法实例化产品与服务视觉辅助工具未来展望结语 前言 作为一名资深的项目负责人&#xff0c;我有幸参与了无数次创新…

React + Vite项目别名配置

Node版本&#xff1a;v20.16.0Vite版本&#xff1a;5.4.1 安装 types/node 依赖包 pnpm i types/node -D pnpm ls types/node配置 vite.config.js 文件: resolve: {alias: {"": join(__dirname, "./src/"),}, },使用配置好的别名 &#xff1a; 由上图我们…

考试:操作系统知识(02)

进程同步和互斥 临界资源&#xff1a;各进程间需要以互斥方式对其进行访问的资源。 临界区&#xff1a;指进程中对临界资源实施操作的那段程序。本质是一段程序代码。 ◆互斥&#xff1a;某资源(即临界资源) 在同一时间内只能由一个任务单独使用&#xff0c;使用时需要加锁&…

kafka连接图形化工具(Offset Explorer和CMAK)

kafka连接图形化工具 1、Offset Explorer1.1、下载Offset Explorer1.2、安装Offset Explorer1.3、配置Offset Explorer连接kafka 2、CMAK&#xff08;kafka的web管理后台&#xff09;2.1、下载2.2、解压安装2.3、配置2.4、启动2.5、CMAK访问 1、Offset Explorer Offset Explor…

【数据结构】二叉树链式结构(c语言)(附源码)

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;数据结构 目录 前言 一、节点的定义 二、创建一棵二叉树 1. 创建新节点 2. 手动创建二叉树 三、方法的声明 四、方法的实现 1. 前、中、后序遍历 1.1 前…