基于kafka的分布式日志收集与实时监控平台(原理,框架)
首先得准备2台windows机器,一台作为客户机,一台作为代理机(也作为路由器),3台虚拟机(作为后端服务器),3台虚拟机部署在代理机里面,本实验选取centos7.9版本系统
这个实验里用的消息中间件用的就是kafka,作用是业务解耦,因为这整个流程的核心部分是客户端注册然后将注册信息写入数据库,数据再返回客户端,而发邮件其实是次要的,可有可无,那么既然如此就不能让其对流程的核心部分产生影响,因此需要一个消息中间件,前半部分(核心部分)将要发送的邮件信息存入kafka里,然后发邮件程序自己来取,这样的好处是它们互不影响,降低耦合性,方便扩充。这是典型的生产者-消费者模式
如下图:
kafka还有其他作用:流量削峰,业务解耦,日志收集,流处理
日志:记录程序运行过程中发生的事情 1.追踪错误、代码调试;2.通过日志分析行为
用户通过访问nginx代理集群访问后端真实服务器
这里的nginx用到了反向代理
什么是反向代理?这里说一下正向代理和反向代理:
正向代理,代理的是客户端,我们平时无法访问国外网站,如果想访问,那就得使用VPN技术,那这个技术的原理是什么呢,就是正向代理。
比如中国想访问美国,不能直接访问,需要先从中国访问到香港的服务器,再从香港的服务器访问到美国的服务器,然后同样的路径将数据返回到中国用户这里来,这就是正向代理。
那什么是反向代理,其实和正向代理挺像的,代理的是服务端。客户端访问到代理集群,然后再从代理集群访问到真实服务器,代理集群和真实服务器都是公司提供的服务
为什么需要这样做呢?有两点原因:
首先我们要知道一些计网的知识,公网ip是要钱的
如果将服务器直接用公网ip,光是买一个公网ip就不少钱了,更何况我们用的是服务端,这都是按流量计费的,价格会非常昂贵,所以出于成本考虑,公司选择采取反向代理的办法
第二点原因是处于安全性考虑,如果直接让真实服务器暴露在公网ip,很容易受到来自不同ip的攻击,服务器不稳定,所以不得不采取反向代理。代理集群用公网ip没关系,毕竟上面又不跑服务,攻击了也没用。
使用反向代理还有一个好处是可以实现:负载均衡和高可用。负载均衡是代理多个服务器实现了流量削峰,多个服务器同时运行不容易发生服务崩溃不可用的情况,实现了高可用。
这里的代理集群有两个网卡,一个连接外网,一个连接内网
为了保证服务的高可用,不止服务器需要有多个,nginx代理服务器也需要有多个(如果一个挂了整个程序就没了,那...这个项目就有点拉了),nginx实现高可用要用到keepalived高可用技术
用户发送数据到nginx反向代理集群,然后反向代理集群生成日志发送到后端服务器,并送到kafka消息中间件中收集,这里需要一个filebeat来作为生产者实时生成日志,为什么要实时呢,因为如果是以文件的形式发送日志到后端服务器和kafka,那总会漏掉一部分日志,因为日志也是实时生成的。
然后这里的话,前面只是收集了日志,后面就是如何处理这些日志了,这里需要写一个消费者程序(使用python)然后需要使用到pykafka,用来连接前面的kafka,然后还需要使用到pymysql,用来连接后面的mysql,这个消费者程序的作用就算清洗数据,并不是所有的数据都是需要的,所以需要清洗。
然后后面mysql是需要被监控的,如果说它一分钟内发生的流量特别大或特别小,超过了阈值,我就会发送邮件告警。
===================
关于kafka
3.0之前的版本,必须依赖zookeeper,
3.0之后的版本,无须zookeeper 引入kraft协议
kafka3.6.1
kafka --存储数据、日志存储、管理集群(元数据)
kafka的两种处理:
监听器
监听客户端(生产者,消费者)
控制器
管理集群、leader选举、副本同步
raft协议:数据一致性 算法
用户直接跟leader沟通,leader拿到数据就同步个其他follower
一个leader,多个follower,投票选举leader,每个人手里有一票,票数过半当选为leader(内部算法复杂)
收集日志部分也有一个leader,跟这里的管理集群的leader不是同一个leader
所以整个项目会有两个leader
================
环境搭建:
这里环境搭建出了点问题,第二台机器没法用了,所以现在将后台服务器从3台缩减为2台,问题不大,达到实验目的即可。
环境搭建就看前三个文章写的吧,之前搭建过(三台机器)
这篇文章上面是写项目逻辑思路的
下面是关于项目输出结果的
kafka原理:
生产者与leader交互
三个节点的元数据是同步的,都保存了leader信息,所以生产者无论和哪个交互,都可以从节点的元数据中得到leader的信息,从而找到leader并与其进行交互(如何找到leader)
元数据保存了哪些数据:topic,分区,controller信息
controller不同于leader,它是管理集群的,管理谁当选leader
controller:管理集群,副本leader的选举,副本的数据同步,拉取zk元数据,同步到其他节点