基础环境

hostnamectl set-hostname els01hostnamectl set-hostname els02hostnamectl set-hostname els03hostnamectl set-hostname kbased -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/configsystemctl stop firewalld & systemctl disable firewalld
# 安装jdkcd/usr/localtar -xvf jdk1.8.0_231.tar.gzvi /etc/profileexport JAVA_HOME=/usr/local/jdk1.8.0_231export PATH=$JAVA_HOME/bin:$PATHsource /etc/profile

elasticsearch

安装

# 创建用户与组groupadd -g 500 elsmkdir -p /opt/app/elsuseradd -d /opt/app/els -u 2000 -g els elsecho "els#123" | passwd --stdin elscp -r etc/skel/.bash* /opt/app/elscd /opt/appchown -R els:els /opt/app/elschmod -R 755 /opt/app/elssu - elstar -xvf elasticsearch-7.6.2-linux-x86_64.tar.gz -C /opt/app/elschown -R els:els /opt/app/els

更改用户可创建的线程数

vi /etc/security/limits.d/20-nproc.confels soft nproc 4096

否则报错:max number of threads [1024] for user [elsearch] likely too low, increase to at least [4096]

更改打开文件数与线程数

vi /etc/security/limits.confelssoftnofile65536elshardnofile131072elssoftnproc4096elshardnproc4096


否则报错:node validation exception bootstrap checks failed

更改系统控制文件

Elasticsearch 默认使用 mmapfs 目录存储索引,而 Linux 默认对 mmap 计数限制可能太低,会导致内存异常。系统控制文件是管理系统中的各种资源控制的配置文件,ES 需要开辟一个 65536 字节以上空间的虚拟内存,但 Linux 又不允许任何用户直接开辟虚拟内存,所以通过如下方式修改:

vi /etc/sysctl.confvm.max_map_count=655360sysctl -p


否则报错:max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]

环境变量

vi/opt/app/els/.bash_profileexport JAVA_HOME=/usr/local/jdk1.8.0_231export ES_HOME=$HOME/elasticsearch-7.6.2export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$ES_HOME/libexport PATH=$HOME/bin:$JAVA_HOME/bin:$ES_HOME/bin:$PATHvi/opt/app/elsearch/.bashrcES_HOME=/opt/app/elsearch/elasticsearch-7.6.2PATH=$PATH:$ES_HOME/binsource~/.bash_profile & source~/.bashrc
su - elsmkdir -p /opt/app/elsearch/data /opt/app/elsearch/logsvi elasticsearch-7.6.2/config/elasticsearch.yml#集群名称cluster.name: DR-ELK#默认情况下,Elasticsearch 将使用随机生成的 UUID 的前七个字符作为节点 ID,该节点名称一经生成后,即使重启服务亦不会变更node.name: els01path.data: /opt/app/elsearch/datapath.logs: /opt/app/elsearch/logs#默认情况下,此 elasticsearch 服务绑定到回环地址127.0.0.1。修改为节点ip在浏览器中访问不成功network.host: 0.0.0.0#集群中拥有被选举成 Master 节点资格的地址列表discovery.seed_hosts: ["ip1:9400","ip2:9400","ip3:9400"]#在一个新集群初始化时,符合 Master 节点资格的节点集cluster.initial_master_nodes: ["ip1:9400","ip2:9400","ip3:9400"]#为最多主节点个数discovery.zen.minimum_master_nodes: 1#为超时后生效节点数gateway.recover_after_nodes: 1#没有这两项配置7.6.2版本的kibana将无法调用ES# 文本最后追加http.cors.enabled: truehttp.cors.allow-origin: "*"

注释掉判断是否存在 JAVA_HOME变量的流程分支,直接使用操作系统的JDK

cd /opt/app/elsearch/elasticsearch-7.6.2/bin/cp elasticsearch-env elasticsearch-env.bakvi /opt/app/elsearch/elasticsearch-7.6.2/bin/elasticsearch-env

su - elscd /opt/app/elsearch/elasticsearch-7.6.2/bin#以守护进程模式运行./elasticsearch -d#停止ps -ef | grep Elasticsearch | grep -v grep | awk '{print $2}' | xargs kill -SIGTERM#查看状态cat /opt/app/elsearch/logs/集群名称.logcurl -X GET http://ip:9200

kibana

安装

groupadd -g 500 kbnmkdir -p /opt/app/kbnuseradd -d /opt/app/kibana -u 2000 -g kba kba/bin/echo "kba#123" | passwd --stdin kbacp -r /etc/skel/.bash* /opt/app/kbachown -R kbn:kbn /opt/app/kbachmod -R 755 /opt/app/kbasu - kbatar -xvf kibana-7.6.2-linux-x86_64.tar.gz -C /opt/app/kbachown -R kba:kba /opt/app/kibana

环境变量

vi/opt/app/kba/.bashrc# 注意jdk相关变量export KIBANA_HOME=/opt/app/kibana/kibana-7.6.2-linux-x86_64export PATH=$PATH:$KIBANA_HOME/binsource~/.bashrc


su - kbavi kibana-7.6.2-linux-x86_64/config/kibana.yml# 端口server.port: 5601# 服务主机名server.host: "0.0.0.0"# 指定ES服务,可以指定多个elasticsearch.hosts: ["http://ip1:9200","http://ip2:9200","http://ip3:9200"]# 进程文件pid.file: /opt/app/kibana/kibana.pid# 日志路径logging.dest: /opt/app/kibana/logs/kibana.log# 汉化i18n.locale: "zh-CN"
mkdir -p /opt/app/kibana/logs/su - kbacd/opt/app/kibana/kibana-7.6.2-linux-x86_64/bin#后台运行./kibana &#停止ps -ef | grep kibana | grep -v grep | awk '{print $2}' | xargs kill -SIGTERM#查看cat /opt/app/kibana/logs/kibana.logs#浏览器访问http://ip:5601/

es核心概念

节点分类

节点是一个独立的服务器实例或进程,用于存储数据并参与集群的索引和搜索功能。每个节点都有自己的名称、角色和职责。

master node:负责管理集群的整体状态和执行一些关键的集群级别的操作。主节点负责将分片存储到数据节点、维护集群的状态信息、决定哪些节点是集群的一部分等。本身不负责存储实际的数据。

data node:数据节点负责存储实际的数据。管理索引的分片,并处理与数据相关的操作,如搜索、索引和删除。数据节点存储索引的一部分,并通过将数据分布在多个节点上来实现水平扩展。

coordinating node:协调节点是可选的节点类型,主要用于处理搜索请求的协调工作。不存储实际的数据,而是负责接收来自客户端的搜索请求,并将这些请求转发给数据节点。协调节点有助于分散搜索请求的负载,特别是在大规模集群中。

ingest node:预处理节点,负责数据的预处理,如数据的转换和附加处理。这允许在将数据索引到es之前对数据进行修改或过滤。该节点通常用于日志处理和数据管道中。

machine learning node:用于执行与机器学习相关的任务,如异常检测或趋势分析。

remote-eligible node:远程合格节点,拥有远程集群客户端角色,可以充当远程客户端。默认情况下,集群内任意节点都可以作为跨集群的客户端连接到远程集群。

transform节点:用于执行数据转换操作,例如从一个索引中提取数据并将其转换为另一个索引,以便在数据仓库和分析方面进行使用。

index

索引是一个逻辑存储,类似关系型数据库中的表,用来存储管理相关数据,数据以JSON格式存储在索引的基本单元-文档Document。

shard

一条索引的数据往往会被分为多个分片进行存储,每个分片是一个独立的存储单元,底层为一个Lucene索引,可以在集群中的不同节点上分布,以提供高可用性和负载均衡。

分片的目的

允许索引水平分割和分布存储,实现数据和负载的分布。

分片的数量

在索引创建后不能被更改。通常,每个主分片的大小应该适中,以便在集群中的各个节点上均匀分布负载,也有利于数据的快速查询。

主分片

每个索引都可以被分为一个或多个主分片。主分片存储索引的一部分数据,并负责处理搜索和查询操作。主分片的数量设置在索引创建时便被定义,无法进行动态修改。

Replica

副本是指索引的一个复制,每个索引可以被配置为具有零个或多个副本。副本可以提高集群的可用性和容错性,以及提高搜索性能。

每个索引被划分为一个或多个主分片。主分片负责存储索引的一部分数据,以及处理搜索和写入请求。为了提高可用性和容错性,每个主分片可以有零个或多个副本。

每个索引的副本数量是可以配置的。在创建索引时,可以指定副本的数量。副本数量的选择取决于对可用性和性能的需求。

maping

映射是索引中文档的规范,定义了结构和字段属性,描述了文档中的每个字段的数据类型、分词器、是否索引等信息。类似于关系型数据库中的Schema。

示例

index的名称为example_index

title是一个文本字段,使用标准分词器
author是一个关键字字段,通常用于精确匹配
publish_date是一个日期字段,用于存储日期信息
views是一个整数字段,用于存储整数值
tags是一个关键字字段,用于存储标签信息