基于gossip流言算法实现alertmanager高可用

news/2024/11/15 0:08:14/文章来源:https://www.cnblogs.com/yinzhengjie/p/18547183

目录
  • 一.alertmanager高可用架构设计
    • 1 Gossip流言算法协议原理分析
    • 2 Gossip的优劣势
    • 3 Gossip中通信模式
  • 二.搭建alertmanager高可用架构实战
    • 1.搭建alertmanager高可用架构
    • 2..测试高可用

一.alertmanager高可用架构设计

1 Gossip流言算法协议原理分析

如上图所示,我们可以发现alertmanager存在单点的故障,这一点官方也考虑到了,因此采用了gossip实现alertmanager集群模式。gossip流言算法协议原理分析:- 1.前提设定: Gossip时周期性的散播消息,把周期限定为1秒;- 2.被感染节点随机选择K个临近节点(fan-out)散播消息,这里把fan-out设置为3,每次最多往3个节点散播;- 3.每次散播消息都选择尚未发送过的节点进行散播;- 4.收到消息的节点不再往发送节点散播,比如A发送给B,那么B进行散播的时候,不在发送A;- 5.Gossip过程是异步的,这就是说发消息的节点不会关注对方是否收到,即不等待响应,不管对方有没有收到,它都会每隔1秒向周围节点发消息,异步是它的优点,而消息冗余是它的弱点;

2 Gossip的优劣势

优点:- 扩展性:网络可以允许节点的任意增加和减少,新增加的节点状态最终会与其他节点一致。- 容错:网络中任何节点的宕机和重启都不会影响Gossip消息的传播,Gossip协议具有天然的分布式系统容错特性。- 去中心化:Gossip协议不要求任何中心节点,所有节点都可以是对等的,任何一个节点无需知道整个网络状况,只要网络是连通的。换句话说,任意一个节点就可以把消息散播到全网。- 一致性收敛:Gossip协议中的消息会以一传十,十传百一样的指数速级速度在网络中快速传播,因此系统状态不一致可以在很快的时间内收敛到一致。换句话说,消息传播速度达到了logN。- 简单:Gossip协议的过程及其简单,实现起来几乎没有太多复杂性。缺点:分布式网络中,没有一种完美的解决方案,Gossip协议和其他协议一样,也有一些不可避免的缺陷,主要有是在数据延迟和冗余。- 消息的延迟:由于Gossip协议中,节点指挥随机向少数几个节点发送消息,消息最终是通过多个轮次的散播而到达全网的。因此使用Gossip协议会造成不可避免的消息延迟,不适合用在实时性要求较高的场景下。- 消息冗余:Gossip协议规定,节点会定期随机选择周围节点发送消息,而收到消息的节点也会重复该步骤,因此就不可避免存在消息重复发送给同一节点的情况。造成了消息的冗余,同时也增加收到消息的节点处理的压力,而且由于定期发送,即使收到了消息的节点还会反复收到重复消息,加重了消息的冗余。

3 Gossip中通信模式

在Gossip协议下,网络中两个节点之间有三种通信模式: "PUSH","PULL"和"PUSH/PULL"。- PUSH:节点A将数据(key,value,version)及对应的版本号推送给B节点,B节点更新A中比自己新的数据。- PULL:A仅将数据key,vaerion推送给B,B将本地比A新的数据Key,value,version推送给A,A更新本地。- PUSH/PULL:与PULL类似,只是多了一步,A再将本地比B新的数据推送给B,B则更新本地。如果把两个节点数据同步一次定义为一个周期,则在一个周期内,PUSH需通信1次,PULL需通信2次,PULL/PUSH则需要三次。虽然消息数增加了,但从效果来讲,PUSH/PULL最好,理论上一个周期可以使两个节点完全一致,直观上PUSH/PULL的收敛速度也是最快的。

二.搭建alertmanager高可用架构实战

1.搭建alertmanager高可用架构

	1.一个节点("10.0.0.31")正常启动alertmanger
略,此过程参考之前的笔记。[root@prometheus-server31 ~]# ss -ntl | egrep "9093|9094"
LISTEN 0      4096               *:9093             *:*          
LISTEN 0      4096               *:9094             *:*          
[root@prometheus-server31 ~]# 2.另外一个节点("10.0.0.42")启动alertmanger时需要使用"--cluster.peer"参数指定已经存在的alertmanager地址
[root@node-exporter42 alertmanager-0.27.0.linux-amd64]# ./alertmanager --cluster.peer=10.0.0.31:9094

2..测试高可用

测试gossip方法1:- 在一个10.0.0.31节点创建静默;- 在10.0.0.42页面上能看到静默的记录;测试gossip方法2:- 将两个alertmanaager配置一致,提前将alertmanager的webhook配置为无法访问的地址;- 分别向两个alertmanager发送告警,分别查看两个alertmanager的日志发现仅有一个alertmanager触发报警超时的日志信息;

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iman——冲刺日志(第二天)

半成品 团队成员分工与进度 📝👥组别 成员 完成的任务 完成任务所用时间 (小时) 剩余时间 (小时)前端 阿依娜孜 完成每日行程展示页面,初步实现按钮切换功能。 3 2前端 郭剑敏 优化“账单管理”页面设计,编写路线编辑功能的前端代码。 3 1前端 王梓铭 完成主页和导航栏布…

先天软工圣体队——冲刺日记(第二天)

1. 每位团队成员的分工与进度成员 完成的任务 完成的任务时长 剩余时间何愉心、邱雨涵 对冲刺计划以及日常开发进行记录与剪辑 10小时 5小时陈思雨,郑奇键 “资料库”模块进一步完善 6小时 4小时陈尚冰 美化上传历年卷的前端页面 12小时 3小时柯鸿毅 API接口功能初步完成 15小…

攻防世界pwn-level0栈对齐

ret地址学习 NewStarCTFweek2-ez_game中出现了栈对齐相关知识点,所以特地前来学习,本篇主要为调试记录,由于远程非常轻易就可打通,故重点关注于本地打通 使用 ret_addr = hex(next(elf.search(asm(ret))))寻找汇编指令ret(n)的地址 ┌──(root㉿kali)-[~/Desktop/Adworl…

深度学习面试的时候,如何回答1x1卷积的作用

11月了,秋招已经开始了。不知最近有没有同学在投简历面试呢? 回想起几年前我面试某大厂的时候,被问到了很多深度学习相关的知识,那时的我懂的不多,可以说是被面试官360度无死角蹂躏。 那次面试,印象最深的是问了很多与卷积相关的问题,导致我后来工作一段时间看到卷积就时…

day4-Scrum

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/作业要求 需求&原型改进、系统设计、Alpha任务分配计划、测试计划团队项目仓库 https://github.com/bitpurleclude/GDUT-Goofish/issues团队成员 李嘉锐 车峤锐 于海洋 林进光 黄健 钟启…

GPU编程

来源:https://worktile.com/kb/p/2155928gpu编程有什么用? 图形处理单元(GPU)编程具有多种用途,主要包括:1、加速大规模计算任务、2、图形和视频渲染、3、深度学习和机器学习。GPU编程在深度学习和机器学习领域尤为重要。它允许数据科学家和研究人员利用GPU的并行处理能力…

Objects

概述 Objects 是一个工具类, 提供了一些方法去完成一些功能. Objects 类中的常见的成员方法:图1 Objects 类中的常见的成员方法equals 方法 程序示例: Javabean 类: public class Student {private String name;private int age;public Student() {}public Student(String name…

项目冲刺-3

一、昨日已完成的任务 学习有关springboot,vue等前后端知识,明确要开发的功能,初步搭好底层框架,做完了登录注册功能。 今日计划完成的任务 完善数据库和底层框架,学习有关知识,继续尝试做功能接口。 工作中遇到的困难 成员的前后端基础较差,需要花大量时间入门,目前做…

BigInteger

对象一旦创建, 内部记录的值是不能发生改变的.程序示例: public class demo1 {public static void main(String[] args) {/** public BigInteger(int num, Random rnd) 获取随机大整数, 范围: [0~ 2 的 num 次方 -1]* public BigInteger(String val) 获取指定的大整数* public …

Cuda 驱动安装

Cuda 驱动的安装方法。Author: ACatSmiling Since: 2024-11-13CUDA(Compute Unified Device Architecture):是 NVIDIA 推出的一种并行计算平台和编程模型,它允许开发者利用 NVIDIA GPU(图形处理器)的强大计算能力进行通用计算,而不仅仅局限于图形处理。简单来说,CUDA 提…

[RoarCTF 2019]Easy Java 1

[RoarCTF 2019]Easy Java 1 打开实例发现登录框,尝试万能密码admin or 1=1#后无果注意到登录框下有个help,点击发现文件读取显示文件notfound,文件未找到,怀疑是请求方法问题,尝试POST请求发现能成功下载,确定这道题为任意文件下载 打开help.docx,显示看来文件不在这里,…

【linux日志】web日志分析

WEB正确日志格式分析#日志统计举例[root@master ~]# cat /etc/httpd/logs/access_log |awk {print $1}#对IP排序[root@master ~]# cat /etc/httpd/logs/access_log |awk {print $1}|sort#打印每一个重复出现IP的次数,[root@master ~]# cat /etc/httpd/logs/access_log |awk {p…