日志分析系统ELK(上)之elasticsearch
ELK是elasticsearch、logstash、kibana的组合建成,安装时,三个软件的版本需要匹配。
1、什么是elasticsearch?
Elasticsearch 是一个开源的分布式搜索分析引擎,建立在一个全文搜索引擎库 Apache Lucene基础之上。Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎,它具有如下特点:
- 一个分布式的实时文档存储,每个字段可以被索引与搜索
- 一个分布式实时分析搜索引擎
- 能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据
基础模块 | 作用 |
---|
cluster | 管理集群状态,维护集群层面的配置信息 | alloction | 封装了分片分配相关的功能和策略 | discovery | 发现集群中的节点,以及选举主节点 | gateway | 对收到master广播下来的集群状态数据的持久化存储 | indices | 管理全局级的索引设置 | http | 允许通过JSON over HTTP的方式访问ES的API | transport | 用于集群内节点之间的内部通信 | engine | 封装了对Lucene的操作及translog的调用 |
Elasticsearch的官网是https://www.elastic.co/cn/ Elasticsearch的功能强大,常用的应用场景有:
- 信息检索
- 日志分析
- 业务数据分析
- 数据库加速
- 运维指标监控
2、单节点elasticsearch安装
实验准备三台新虚拟机server3、server4、server5,三个虚拟机分别给了2G内存,先建立单节点,后面创建集群。 准备elasticsearch的安装包,官网下载https://elasticsearch.cn/download/ 我这里用了之前的server3和server4,server5是新创的。所以先清理server3环境 清理server4环境 安装软件 进入/etc/elasticsearch/,编辑主配置文件 设置集群名称为my-es,节点名称为server3 任何主机都可以访问,http端口为9200 发现的主机有server3、server4、server5,初始化节点为server3 开启elasticsearch,并设置开机自启,查看开启了9200端口 真机网页访问http://172.25.77.3:9200 ,测试成功 由于修改了集群名字,现在查看日志用cat /var/log/elasticsearch/my-es.log,此处可以禁用swap分区,实验效果更加流畅,不禁用swap也没问题
3、搭建elasticsearch集群
接下来给server4和server5配置 server3把rpm给server4和server5发一份,server4安装elasticsearch server5安装elasticsearch 由于主配置文件基本一致,所以server3把elasticsearch.yml给server4和server5发一份,再改 server4进入/etc/elasticsearch/目录,编辑主配置文件elasticsearch.yml,把节点名称改为server4,其他都不变 类似的,server5进入/etc/elasticsearch/目录,编辑主配置文件elasticsearch.yml,把节点名称改为server5,其他都不变 server4开启elasticsearch,设置开机自启 server5开启elasticsearch,设置开机自启 测试,网页访问http://172.25.77.4:9200 ,测试成功 测试,网页访问http://172.25.77.5:9200 ,测试成功
4、elasticsearch可视化方法1——cerebro插件
由于elasticsearch看着很不舒服,看不懂,所以想要图形化的界面,引入了cerebro
cerebro是镜像,正好真机是8.2的红帽系统,自带podman,所以在真机导入镜像,podman run -d --name cerebro -p 9000:9000 lmenezes/cerebro 运行该镜像,默认开放9000端口 网页访问http://172.25.77.250:9000 ,进入,需要输入监听的地址,http://172.25.77.3:9200 成功进入cerebro,点击nodes,可以看到集群中三个节点都在
5、elasticsearch可视化方法2——elasticsearch-head插件
elasticsearch-head是elasticsearch自带插件
下载elasticsearch-head插件,官网https://github.com/mobz/elasticsearch-head/archive/master.zip;head插件本质上是一个nodejs的工程,因此需要安装nodejs,https://mirrors.tuna.tsinghua.edu.cn/nodesource/rpm_9.x/el/7/x86_64/nodejs-9.11.2-1nodesource.x86_64.rpm
先安装nodejs,由于master.zip需要解压工具,所以安装unzip 解压master.zip 进入解压目录elasticsearch-head-master,由于npm慢,所以更换为cnpm源。查看版本号 安装bzip2,(安装cnpm需要用到) 安装cnpm 进入_site/ 子目录,查看app.js文件 可以看到监控的是9200端口 server3后台运行head插件,他的端口是9100 开启端口为9100 进入/etc/elasticsearch 目录,修改主配置文件elasticsearch.yml 允许跨域,*表示支持所有域名 重启elasticsearch 网页访问http://172.25.77.3:9100 ,监控http://172.25.77.3:9200 的elasticsearch,可以看到集群的三个节点。* 代表master节点
6、elasticsearch节点角色
节点角色 | 功能 |
---|
Master | 主要负责集群中索引的创建、删除以及数据的Rebalance等操作。Master不负责数据的索引和检索,所以负载较轻。当Master节点失联或者挂掉的时候,ES集群会自动从其他Master节点选举出一个Leader | Data Node | 主要负责集群中数据的索引和检索,一般压力比较大 | Coordinating Node | 原来的Client node的,主要功能是来分发请求和合并结果的。所有节点默认就是Coordinating node,且不能关闭该属性 | Ingest Node | 专门对索引的文档做预处理 |
在生产环境下,如果不修改elasticsearch节点的角色信息,在高数据量,高并发的场景下集群容易出现脑裂等问题。默认情况下,elasticsearch集群中每个节点都有成为主节点的资格,也都存储数据,还可以提供查询服务。
节点角色是由以下属性控制
- node.master: 这个属性表示节点是否具有成为主节点的资格(注意:此属性的值为true,并不意味着这个节点就是主节点,只意味着有成为主节点的资格。因为真正的主节点,是由多个具有主节点资格的节点进行选举产生的)
- node.data: 这个属性表示节点是否存储数据
- node.ingest: 是否对文档进行预处理
- search.remote.connect: 是否禁用跨集群查询
默认情况下这些属性的值都是true
生产集群中可以对这些节点的职责进行划分,专人负责专事 (1)建议集群中设置3台以上的节点作为master节点,这些节点只负责成为主节点,维护整个集群的状态。 (2)再根据数据量设置一批data节点,这些节点只负责存储数据,后期提供建立索引和查询索引的服务,这样的话如果用户请求比较频繁,这些节点的压力也会比较大。 (3)在集群中建议再设置一批协调节点,这些节点只负责处理用户请求,实现请求转发,负载均衡等功能。
下面简单测试, server4编辑主编配置文件/etc/elasticsearch/elasticsearch.yml ,添加node.data: false语句,表示该主机不存放数据 重启elasticsearch服务 可以看到server4现在没有data角色 而server3有data角色 其他的角色都可以测试,本文不再赘述
|