ELK是elasticsearch、logstash、kibana的组合简称。其中elasticsearch主要用来存储检索数据和数据处理;logstash主要用来数据采集和过滤然后给es;kibana主要从es里面加载数据然后展示。
Elasticsearch 是一个开源的分布式搜索分析引擎,建立在一个全文搜索引擎库 Apache Lucene基础之上。Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎,它具有一般用于:信息检索、日志分析、业务数据分析、数据库加速、运维指标监控。具有如下特点:
一个分布式的实时文档存储,每个字段可以被索引与搜索;
一个分布式实时分析搜索引擎;
能胜任上百个服务节点的扩展,并支持 PB 级别(pb指petabyte,它是较高级的存储单位)的结构化或者非结构 化数据。
Elasticsearch的基础模块包括:
cluster: 管理集群状态,维护集群层面的配置信息;
alloction: 封装了分片分配相关的功能和策略;
discovery: 发现集群中的节点,以及选举主节点;
gateway: 对收到master广播下来的集群状态数据的持久化存储;
indices: 管理全局级的索引设置;
http: 允许通过JSON over HTTP的方式访问ES的API;
transport: 用于集群内节点之间的内部通信;
engine: 封装了对Lucene的操作及translog的调用。
官网:免费且开放的搜索:Elasticsearch、ELK 和 Kibana 的开发者 | Elastic
环境说明:使用三台机器做集群架构,每台2G内存(有锁定内存)
安装:Installing Elasticsearch | Elasticsearch Guide [8.4] | Elastic
软件包下载:下载中心 - Elastic 中文社区
- ##可以选择直接下载安装,也可以选择下载好安装包后安装---->我们选后者
- ##安装7.6版本-->该版本中含有jdk的软件包,不需要再次安装
- rpm -ivh elasticsearch-7.6.1-x86.rmp
-
- ##配置主配置文件:vim /etc/elasticsearch/elasticsearch.yml
- ----------------------------------------------------------
- cluster.name:myes --集群名字
- node.name: server1 --节点名字
- path.data: /var/lib/elasticsearch --数据目录;
- path.logs: /var/log/elasticsearch --日志目录
- network.host: 0.0.0.0.0 --监听本机所有接口
- http.port: 9200 --http的服务端口:9200
- discover.seed_hosts:["server1","server2","server3"] --设定集群中的主节点
- cluster.initial_master_nodes: ["server1"] --集群引导时的初始节点
- ----------------------------------------------------------
-
- ##vm.option是一些程序里边的java的配置参数的一个集合,jvm.options文件里面设定了锁定内存为1G
- -----------------------------------------------------------------
- -Xms1g
- -Xmx1g
- -----------------------------------------------------------------
-
- ##修改系统限制 vim /etc/security/limits.conf,设定最大打开文件数和进程数
- -----------------------------------------------------------------
- elasticsearch soft memlock unlimited
- elasticsearch hard memlock unlimited
- elasticsearch - nofile 65536
- elasticsearch - nproc 4096
- -----------------------------------------------------------------
[注]:max-file:表示系统级别的能够打开的文件句柄①的数量
文件句柄:在 Linux 环境中,任何事物都是用文件来表示,设备是文件,目录是文件,socket 也是文件。用来表示所处理对象的接口和唯一接口就是文件。应用程序在读/写一个文件时,首先需要打开这个文件,打开的过程其实质就是在进程与文件之间建立起连接,句柄的作用就是唯一标识此连接。此后对文件的读/写时,目标文件就由这个句柄作为代表。最后关闭文件其实就是释放这个句柄的过程,使得进程与文件之间的连接断开。
- ##查看系统本身的信息
- sysctl -a | grep file
-
- ##修改systemd启动文件vim /usr/lib/systemd/system/elasticsearch.service
- --------------------------------------------
- [service]
- LimitMEMLOCK=infinity
- --------------------------------------------
-
- ##刷新设置
- systemctl daemon-reload
-
- ##关闭交换分区:关闭所有配置文件的交换空间
- swapoff -a
-
- ##设置elasticsearch开机自己,
- systemctl enable --now elasticsearch.service
-
- ##网页访问:http://192.168.19.71:9200
在server2\3上分别操作
- ##安装软件包
- rpm -ivh elasticsearch-7.6.1-x86.rmp
-
- ##主配置文件修改
- scp /etc/elasticsearch/elasticsearch.yml server2:/etc/elasticsearch/elasticsearch.yml
- -------------------------------------------
- node.name: server2 --其他均不变
- -------------------------------------------
-
- ##修改server2、server3的系统安全限制 :/etc/security/limits.conf
- -----------------------------------------------------------------
- elasticsearch soft memlock unlimited
- elasticsearch hard memlock unlimited
- elasticsearch - nofile 65536
- elasticsearch - nproc 4096
- -----------------------------------------------------------------
- ##修改systemd启动文件vim /usr/lib/systemd/system/elasticsearch.service
- --------------------------------------------
- [service]
- LimitMEMLOCK=infinity
- --------------------------------------------
-
- ##刷新设置
- systemctl daemon-reload
-
- ##关闭交换分区:关闭所有配置文件的交换空间
- swapoff -a
-
- ##重启服务
- systemctl enable --now elasticsearch
-
- ##访问测试页:http://192.168.19.71:9200
cerebro是镜像,需要docker的引擎。但是红帽8自带podman,所以在真机导入镜像:podman run -d --name cerebro -p 9000:9000 lmenezes/cerebro(加-d有可能会出现问题)运行该镜像,默认开放9000端口。然后访问网页即可:http://192.168.19.71:9200
- ##通过压缩包进行配置
- wget https://github.com/lmenezes/cerebro/releases/download/v0.8.1/cerebro-0.8.1.tgz
- tar xzf cerebro-0.8.1.tgz
-
- ##启动
- cerebro-0.8.1/bin/cerebro
- [info] play.api.Play - Application started (Prod)
- [info] p.c.s.AkkaHttpServer - Listening for HTTP on /0:0:0:0:0:0:0:0:9000
-
- ##指定端口
- bin/cerebro -Dhttp.port=8080
-
- ##配置服务器--非必须:如果经常使用的话,可以先在conf/application.conf中配置好ElasticSearch服务器地址
- --------------------------------------------
- hosts = [
- {
- host = "http://192.168.19.71:9200"
- name = "Some Cluster"
- },
- # Example of host with authentication
- #{
- # host = "http://some-authenticated-host:9200"
- # name = "Secured Cluster"
- # auth = {
- # username = "username"
- # password = "secret-password"
- # }
- #}
- ]
- --------------------------------------------
-
- ##使用:浏览器打开连接http://192.168.58.101:9000
下载elasticsearch-head插件,官网点击,head插件本质上是一个nodejs的工程,因此需要安装nodejs,点击
- ##获取安装包,并安装
- wget https://github.com/mobz/elasticsearch-head/archive/master.zip
- wget https://mirrors.tuna.tsinghua.edu.cn/nodejs-release/v9.11.2/node-v9.11.2-linux-x64.tar.gz
-
- yum install -y unzip --解压master.zip
- unzip master.zip
- tar zxf node-v9.11.2-linux-x64.tar.gz
-
- ##安装elasticsearch的插件
- ##更换npm源安装--进入解压目录elasticsearch-head-master,由于npm慢,所以更换为cnpm源。查看版本号
- cd elasticsearch-head-master/
- npm install -g cnpm --registry=https://registry.nmp.taobao.org
- cnmp -v
-
- ##安装bzip2 -->cnmp的依赖
- yum install bzip2
- ##修改配置
- ##修改ES主机ip和端口: vim _site/app.js
- ------------------------------------------------------
- 修改主机的IP和端口:
- 192.168.19.71:9200
- ------------------------------------------------------
-
- ##启动head
- cnmp run start &
-
- ##通过网页可以访问:http://192.168.19.71:9100
-
- ##vim /etc/elasticsearch/elasticsearch.yml
- -------------------------------------------
- ##修改为跨域支持
- http.cors.enabled: true ----是否支持跨域
- http.cors.allow-origin: “*” ----表示支持所有域名
- -------------------------------------------
-
- ##重启服务
- systemctl restart elasticsearch.service
-
- ##网页再次访问:192.168.19.71:9100
- ##网页监控:192.168.19.71:9200
| 分类 | 作用 |
| Master | 主要负责集群中索引的创建、删除以及数据的Rebalance等操作。Master不负责数据的索引和检索,所以负载较轻。当Master节点失联或者挂掉的时候,ES集群会自动从其他Master节点选举出一个Leader |
| Data Node | 主要负责集群中数据的索引和检索,一般压力比较大 |
| coordinating Node | 原来的Client node的,主要功能是来分发请求和合并结果的。所有节点默认就是Coordinating node,且不能关闭该属性 |
| Ingest Node | 专门对索引的文档做预处理 |
在生产环境中,如果不修改elasticsearch节点的角色信息,在高数据量,高并发的场景下集群容易出现脑裂等问题。默认情况下,elasticsearch集群中每个节点都有成为主节点的资格,也都存储数据,还可以提供查询服务。
角色属性的控制:--默认情况下这些属性的值都是true
node.master:这个属性表示节点是否具有成为主节点的资格(注意:此属性的值为true,并不意味着这个节点就是主节点,只意味着有成为主节点的资格。因为真正的主节点,是由多个具有主节点资格的节点进行选举产生的);
node.data:这个属性表示节点是否存储数据;
node.ingest: 是否对文档进行预处理;
search.remote.connect: 是否禁用跨集群查询;
- ##配置server1只做master节点
- ##vim /etc/elasticsearch/elasticsearch.yml
- ------------------------------------------------
- noda.data: false
- ------------------------------------------------
-
- ##因为之前启动过,所以节点上有数据,此时还需要清理数据:cat /var/log/elasticsearch/my.es.log
- ##查看Elasticsearch安装目录
- rpm -ql elasticsearch
-
- ##清理 ---之前的数据会同步到其他节点
- cd /usr/share/elasticsearch/bin
- ./elasticsearch-node repurpose
-
- ##启动elasticsearch服务
- systemctl restart elasticsearch.service