为了方便本节将使用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