| 
 日志分析系统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角色
 
  其他的角色都可以测试,本文不再赘述
 |