• 日志收集分析平台


    一.整体架构图

    在这里插入图片描述

    二、负载均衡

    1、负载均衡的作用:
    用来做流量分流
    
    • 1
    2、如何实现高可用:
    2.1 硬件层面:
    		网卡:bonding,物理层面绑定两块网卡,逻辑层面一块
    		磁盘:采用磁盘阵列,raid
    2.2 架构层面:
    		集群
    		异地多活
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    3、DNS负载均衡:
    可以解析成多个ip地址,一般来说会轮询方式取解析成各个ip。但是如果其中一个服务器挂了,DNS不会立马将这个ip地址去掉,还是会解析成挂掉的ip,可能会造成访问失败。虽然客户端有重试,但是还是会影响客户体验
    
    • 1
    4、DNS解析步骤:
    	1、找浏览器里面的缓存
    	2、本地hosts文件    --linux下在(/etc/hosts)里面
    	3、找本地域名服务器    --linux下在(/etc/resolv.conf)
    
    • 1
    • 2
    • 3
    5、代理机做负载均衡

    5.1、两种代理方式:

    1.正向代理:代理客户机(vpn)
    2.反向代理:代理服务器
    
    • 1
    • 2

    5.2、使用nginx反向代理机做负载均衡

    1.在应用web前面加反向代理,安全性也会高一点,负载均衡的控制也会容易很多
    2.反向代理机,使用keepalived双vip互为主备做高可用,提高资源的利用率。
    
    • 1
    • 2
    6、查看开机自启的服务命令
    ls /etc/systemd/system/multi-user.target.wants
    
    • 1

    三、kafka 2.12

    1、消息中间件:
    1.1、消息中间件:也可以称消息队列,是指用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。. 通过提供消息传递和消息队列模型,可以在分布式环境下扩展进程的通信。
    1.2、消息中间件的两种通信模式
    				点对点
    				发布订阅
    1.3、常见开源的消息中间件:ActiveMQ、RabbitMQ、RocketMQ、Kafka、ZeroMQ等,其中应用最为广泛的要数RabbitMQ、RocketMQ、Kafka 这三款。.
    1.4、kafka采取的通信模式就是发布订阅
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    2、kafka用途:
    2.1 日志收集
    2.2 业务解耦
    2.3 流量削峰
    
    • 1
    • 2
    • 3
    3、用kafka做日志统一收集的好处
    1.故障发生时方便定位问题
    2.日志的集中管理,后续需要日志的程序直接到kafka获取日志即可,尽可能减少日志处理对nginx的影响
    
    • 1
    • 2
    4、kafka里面常见的名词

    4.1、broker:kafka的节点
    4.2、topic:主题

    主题就是消息的分类,比如nginx,mysql日志给不同的主题,就是不同的类型,消费者订阅了那个主题,就可以消费主题里的资源
    
    • 1

    4.3、partition:分区

    提高吞吐量,提高并发
    
    • 1

    4.4、replica:副本 --》就是完整的分区备份
    4.5、broker数量如果和replica一致,则可以坏掉n-1台机器
    4.6、leader和follower

    生产者跟任何一台broker连接都可以,broker会返回当前请求副本的leader的信息,最后生产者再跟leader交互
    
    • 1
    5、kafka如何保证高可用:
    多个broker+多个partition+多个replica
    
    • 1
    6、ISR:列表集合–》需要同步的follower的集合
    1、根据ISR来,如果一个follower改了,那就从这个列表里删除了
    2、如果一个follower卡住了或者同步过慢,它也会从ISR里删除
    3、如果有一个机器宕机了,后续启动之后想要重新加入ISR,必循同步到HW才行,
    
    • 1
    • 2
    • 3
    7、如何保证数据的一致性?
    1、生产者(producer)可以通过request.required.acks设置
    	ack可以为01-1
    		ack为0,生产者不需要接受响应,发完就发下一条
    		ack为1,leader收到了就会给生产者发送响应,就会发送下一条
    		ack为-1,ISR列表中的每一个副本都接受到了,才给生产者响应,才会发送下一条
    2、消费者消费数据时,引入了High Water Mark 机制,只能消费ISR里偏移量最小的follower副本
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    8、filebeat(轻量级日志采集器):
    用来将nginx里面采集的日志送给kafka充当生产者
    
    • 1
    9、消费者:
    1、同一个消费组,里面的消费者同一时刻只能消费一个partition
    2、消费者怎么知道自己消费到哪里了,下次从哪里开始消费?
    	消费者消费的时候,会记录自己的消费偏移量,消费偏移量可以保存在本地,也可以保存在kafka里面,在kafka里面新建一个主题__consumer_offsets用来记录消费偏移量
    
    • 1
    • 2
    • 3
    10、kafka里的数据存储:
    1.文件夹:<topic_name>-<分区号>
    2.每一个partition的数据都是由很多个segment存储的,每一个segment由一个index和log文件组成;
    3.分出多个segment便于数据处理
    	kafka可以按照两个维度清理数据:
    		1、按大小
    		2、按时间
    		任意一个条件满足,都可以触发日志清理
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    四、zookeeper3.6.3

    1、zookeeper:
    分布式应用协调管理服务:配置管理,域名管理,分布式数据存储,集群管理
    我们此次用来对kafka进行管理
    
    • 1
    • 2
    2、选举:
    一致性算法,zab,少数服从多数,票数过半的当选为leader
    
    • 1
    3、连接:
    1、客户端连接任意一台zk都可以操作,但是数据新增修改等事务操作必须在leader上运行,客户端如果连接到follower上进行事务操作,follower会返回给leader的ip,最终客户端还是在leader上操作
    2、如果进行查询操作,可以直接连接follower进行查询操作
    
    • 1
    • 2
    4、leader和follower的作用
    follower:查询和选举
    leader:数据的写入、修改和同步
    
    • 1
    • 2
    5、数据的同步:
    1、只要过半的节点同步完成,就表示数据已经写入完成。
    2、zookeeper不是强一致性,它属于最终一致性
    
    • 1
    • 2
    6、zookeeper集群
    1、zk集群中,节点存活数必须要过半,集群才能正常使用
    2、zk集群的节点数,一般来说都设置成奇数
    
    • 1
    • 2
    7、zk在kafka里的作用
    1.保存kafka的元数据,topic,partiton,副本信息
    2.选举kafka里面的controller
    	通过抢占的方式来选出controller,选举出来的kafka controller来管理kafka里面副本的leader和follower,同步和选举
    
    • 1
    • 2
    • 3

    五、项目部分

    1、项目名称:日志收集分析平台
    2、项目环境:
    centos7,kafka2.12,nginx,filebeat,zookeeper,python3.6,mysql
    
    • 1
    3、项目描述:
    采用nginx集群搭建web服务,收集用户访问nginx集群产生的日志,通过filebeat统一存入kafka平台,采用zookeeper来管理kafka平台,最后对收集的nginx日志进行清洗,并且存入数据库,达到数据持久化的效果。
    
    • 1
    4、项目步骤:
    1、设计规划整个集群架构,使用nginx做负载均衡,采用keepalived实现高可用
    2、搭建nginx集群,为用户提供web服务,收集用户访问的日志信息
    3、搭建好filebeat,filebeat作为生产者将收集到的日志送给kafka
    4、搭建zookeeper和kafka,用zookeeper去管理kafka
    5、采用python编程语言,来编写消费者,进行日志的清洗
    6、最后将收集到的ip、带宽等等有价值的信息存入数据库,达到数据的持久化
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    5、项目心得:
    	通过整个项目更加熟悉了keepalived、zookeeper、kafka等开源组件的架构及相关技术;使用nginx做反向代理机,实现负载均衡,相比于传统的dns域名解析,有更高的安全性,并且容易控制,同时也提高了用户的体验性。通过搭建filebeat作为生产者和编写程序作为消费者,对kafka和zookeeper有了更深入的了解;自己的能力得到了提升,对linux架构有了进一步的了解
    
    • 1
  • 相关阅读:
    使用 http-proxy 代理 HTTP 请求时遇到的 the requested url is invalid 错误消息
    LeetCode_59_螺旋数组Ⅱ
    1075 PAT Judge
    Java中操作字符串有哪些类?他们之间有什么区别?
    赶紧换掉windows系统自带记事本
    【EMC专题】为什么说产品的EMC性能是设计赋予的?
    [附源码]Python计算机毕业设计SSM建筑工程管理系统(程序+LW)
    C语言协程
    前端三剑客:一文入门HTML
    Spring 声明式事务控制
  • 原文地址:https://blog.csdn.net/weixin_47661174/article/details/125881964