为了方便本节将使用docker部署Elasticsearch,以下简称es。
Elasticsearch
1.基础理论部分
1.1.简单介绍一下es
Elasticsearch是一个开源的、分布式的、实时的搜索和分析引擎
可进行海量数据存储和集群管理,具有强大的数据搜索、数据分析能力
可用于网站搜索、日志管理、数据分析等应用
1.2.es的基本概念和相关术语
- 集群(cluster):具有相同集群名称的节点会组成一个集群
 - 节点(node):用于存储集群的数据
 - 索引(index):索引是一个文档数据的集合
 - 类型(type):在索引中可存储不同类型的文档,新版本中一个索引对应一种类型
 - 文档(document):用json格式表示的一条数据
 - 分片(shard):创建索引时可指定分成多少分片存储
 - 复制(replication):一个分片可以有多个副本
 
使用关系型数据库比较:
| 关系型数据库 | elasticsearch | 
|---|---|
| 数据库 | 索引 | 
| 表 | 类型(废弃) | 
| 行 | 文档 | 
| 列 | 字段 | 
| 表结构 | 映射 | 
2.elasticsearch安装部分
本次实验为docker部署
下载es镜像版本为7.17.20:
            
            
              yaml
              
              
            
          
          docker pull elasticsearch:7.17.20
        在运行容器前,我们先根据官方指导进行一些配置优化:
- 修改
vm.max_map_count不低于262144,分别进行永久生效和临时生效,这个参数含义是限制一个进程可以拥有的最大内存映射区域数。 
            
            
              bash
              
              
            
          
          # 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来管理
 
            
            
              yaml
              
              
            
          
          mkdir /esdata/data -p
chown 1000:1000 /esdata/data
chmod 775 /esdata/data
        - 设置进程可以打开的最大文件描述符数量,运行容器的时候直接加上
 
            
            
              yaml
              
              
            
          
          --ulimit nofile=65535:65535
        - 关闭swap分区
 
            
            
              yaml
              
              
            
          
          swapoff -a
# 永久关闭则是修改/etc/fstab文件,讲涉及swap的行用#号注释
        - 设置堆大小,Xms为初始堆大小,Xmx为最大堆大小,设置大小根据自己资源设定
 
            
            
              yaml
              
              
            
          
          -e ES_JAVA_OPTS="-Xms1g -Xmx1g"
        运行es容器:
            
            
              bash
              
              
            
          
          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文件作为配置文件
| 参数 | 功能 | 
|---|---|
| 集群相关参数 | |
| cluster.name | 集群名称 | 
| discovery.seed_hosts | 指定集群节点用于节点发现 | 
| cluster.initial_master_nodes | 定义初始主节点名称列表 | 
| 节点相关参数 | |
| node.name | 节点名称 | 
| node.master | 是否允许节点成为主节点 | 
| node.data | 是否允许该节点存储数据 | 
| 路径参数 | |
| path.data | 数据存储路径 | 
| path.logs | 日志存储路径 | 
| 网络参数 | |
| network.host | 节点监听的IP地址 | 
es设置堆大小配置文件jvm.options
| 参数 | 功能 | 
|---|---|
| -Xms | 初始堆大小 | 
| -Xmx | 最大堆大小 | 
es日志参数配置log4j2.properties
- 配置日志级别(如DEBUG、INFO、WARN、ERROR)。
 - 配置日志输出位置(如控制台、文件)。
 
配置建议:
- 初始堆大小(Xms)和最大堆大小(Xmx)应相等
 - 堆大小不应超过物理内存的50%
 - 堆大小不应超过32GB
 - 1GB堆大小可处理48G-96G左右数据,可根据数据量配置
 - 单个分片的大小应控制在30G-50G之间
 
比如每个分片的大小为30GB,分片的数量为分片数量=数据总量/30GB
每个主分片都应该有副本,且存放在不同的节点,防止数据损坏。
比如有3个主分片,每个主分片有一个副本,可以这样写:
            
            
              json
              
              
            
          
          "number_of_shards": 3,  
"number_of_replicas": 1