一、ELK简介
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
官网:免费且开放的搜索: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
三、搭建elasticsearch集群
在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
四、elasticsearch的图形化界面
4.1 cerebro
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
4.2 header
下载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
五、elasticsearch的节点角色
分类 | 作用 |
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