为了方便本节将使用docker部署Elasticsearch,以下简称es

1.基础理论部分

1.1.简单介绍一下es

Elasticsearch是一个开源的、分布式的、实时的搜索和分析引擎

可进行海量数据存储和集群管理,具有强大的数据搜索、数据分析能力

可用于网站搜索、日志管理、数据分析等应用

1.2.es的基本概念和相关术语

  • 集群(cluster):具有相同集群名称的节点会组成一个集群
  • 节点(node):用于存储集群的数据
  • 索引(index):索引是一个文档数据的集合
  • 类型(type):在索引中可存储不同类型的文档,新版本中一个索引对应一种类型
  • 文档(document):用json格式表示的一条数据
  • 分片(shard):创建索引时可指定分成多少分片存储
  • 复制(replication):一个分片可以有多个副本

使用关系型数据库比较:

2.elasticsearch安装部分

本次实验为docker部署

下载es镜像版本为7.17.20:

docker pull elasticsearch:7.17.20

在运行容器前,我们先根据官方指导进行一些配置优化:

  • 修改vm.max_map_count不低于262144,分别进行永久生效和临时生效,这个参数含义是限制一个进程可以拥有的最大内存映射区域数。
# grep vm.max_map_count /etc/sysctl.conf
vm.max_map_count=262144
# sysctl -w vm.max_map_count=262144
  • 创建一个用于存储es数据的目录并授权,因为es默认使用uid:gid为1000:1000来管理
mkdir /esdata/data -p
chown 1000:1000 /esdata/data
chmod 775 /esdata/data
  • 设置进程可以打开的最大文件描述符数量,运行容器的时候直接加上
--ulimit nofile=65535:65535
  • 关闭swap分区
swapoff -a
# 永久关闭则是修改/etc/fstab文件,讲涉及swap的行用#号注释
  • 设置堆大小,Xms为初始堆大小,Xmx为最大堆大小,设置大小根据自己资源设定
-e ES_JAVA_OPTS="-Xms1g -Xmx1g"

运行es容器:

docker run --ulimit nofile=65535:65535 -d --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms1g -Xmx1g" -v /esdata/data/:/usr/share/elasticsearch/data/ elasticsearch:7.17.20
  • discovery.type=single-node含义为单节点运行
  • 9200端口是HTTP RESTful接口端口,用于与Elasticsearch集群进行交互
  • 9300端口用于节点间通讯

如果需要还可以将配置文件映射到本地,方法为:
your_config_dir/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml

安装部分内容到此结束,接下来记录一下es的基数内容。

3.elasticsearch配置及建议

es使用elasticsearch.yml文件作为配置文件

es设置堆大小配置文件jvm.options

es日志参数配置log4j2.properties

  • 配置日志级别(如DEBUG、INFO、WARN、ERROR)。
  • 配置日志输出位置(如控制台、文件)。

配置建议:

  • 初始堆大小(Xms)和最大堆大小(Xmx)应相等
  • 堆大小不应超过物理内存的50%
  • 堆大小不应超过32GB
  • 1GB堆大小可处理48G-96G左右数据,可根据数据量配置
  • 单个分片的大小应控制在30G-50G之间

比如每个分片的大小为30GB,分片的数量为分片数量=数据总量/30GB

每个主分片都应该有副本,且存放在不同的节点,防止数据损坏。
比如有3个主分片,每个主分片有一个副本,可以这样写:

"number_of_shards": 3,  
"number_of_replicas": 1
04-11 00:53