当前位置: 代码迷 >> 综合 >> ElasticSearch7.x单机版安装
  详细解决方案

ElasticSearch7.x单机版安装

热度:19   发布时间:2023-12-03 19:37:29.0

程序员小强总结的 ElasticSearch专题超全总结篇在这里:传送门
结合官网资料,做了更详细的实际使用总结。
从单机版安装到集群高可用生产环境搭建、基本概念(索引,分片,节点,倒排索引…)、DSL语法实践、分词器(内置+中文)、SpringBoot整合实战、仿京东商品搜索实战实现。

1.前置准备

相关文档:

  • 官网:传送门
  • 官网文档:传送门
  • 中文手册:传送门
  • 中文社区:传送门
  • Jave-Client : 传送门

2.下载安装包

官方下载地址:传送门

历史版本下载:传送门

本文以7.4.0为例: 7.4.0下载地址

命令下载

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.4.0-linux-x86_64.tar.gz

3.解压

#解压到自定义目录
tar -zxvf elasticsearch-7.4.0-linux-x86_64.tar.gz  -C /usr/local
image.png
标题

 

Elasticsearch 7.x 目录结构如下:

  • bin :脚本文件,包括 ES 启动 & 安装插件等等
  • config : elasticsearch.yml(ES 配置文件)、jvm.options(JVM 配置文件)、日志配置文件等等
  • JDK : 内置的 JDK,JAVA_VERSION="13"
  • lib : 类库
  • logs : 日志文件
  • modules : ES 所有模块,包括 X-pack 等
  • plugins : ES 已经安装的插件。默认没有插件

4.创建数据存储目录与日志存储目录

# 创建数据存储目录
mkdir -p /usr/local/elasticsearch-7.4.0/data
# 创建日志存储目录
mkdir  -p /usr/local/elasticsearch-7.4.0/logs

5.修改配置

进入到es安装目录下的config文件夹中,修改elasticsearch.yml 文件


#配置es的集群名称,同一个集群中的多个节点使用相同的标识(单机版可不配置)
#如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群。
cluster.name: my-es#节点名称
node.name: node-1#初始化,master节点名
cluster.initial_master_nodes: node-1#数据存储路径
path.data: /usr/local/elasticsearch-7.4.0/data
#日志存储路径
path.logs: /usr/local/elasticsearch-7.4.0/logs#节点所绑定的IP地址,并且该节点会被通知到集群中的其他节点
#通过指定相同网段的其他节点会加入该集群中 0.0.0.0任意IP都可以访问elasticsearch
network.host: 0.0.0.0#对外提供服务的http端口,默认为9200
http.port: 9200
#设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点
discovery.seed_hosts: ["127.0.0.1:9200"]#ES默认开启了内存地址锁定,为了避免内存交换提高性能。但是Centos6不支持SecComp功能,启动会报错,所以需要将其设置为false
bootstrap.memory_lock: false# 是否支持跨域
http.cors.enabled: true# *表示支持所有域名
http.cors.allow-origin: "*"

修改启动内存(可选配置)

切换到 conf/

打开 vim jvm.options

image.png

 

6.启动与关闭

启动

切换到 elasticsearch-7.4.0/bin/ 目录下

# -d参数表示以后台进程启动,默认情况下会在控制台输出日志。
./elasticsearch -d

注:启动时若出现报错,请到文末处,查看常见启动问题。

关闭

# 查找ES进程
ps -ef | grep elastic
#杀掉ES进程
kill -9 xxx(进程号)

验证是否启动成功

除了查看进程外还可以在浏览器输入 IP:9210

可以看到返回了一个JSON信息

image.png

重点几个关注下即可:

name : 默认启动的时候指定了 ES 实例名称,name 为 BYSocketdeMacBook-Pro-2.local

cluster_name : 默认名为 elasticsearch

version :版本信息

 

7.设置开机自启

7.1.创建启动脚本

在/etc/init.d目录下新建elastisearch启动脚本文件

vim /etc/init.d/elasticsearch

脚本加入如下内容

#!/bin/bash
#chkconfig: 2345 80 90
#description: elasticsearch
#processname: elasticsearch-7.4.0#服务名称
export SERVER_NAME=elasticsearch
#ES启动用户名
export ES_USER=elasticsearch
#ES目录
export ES_HOME=/usr/local/elasticsearch-7.4.0function help() {echo "$0 |start|stop|restart|status|"
}#查看服务状态
function status(){count=`ps -ef | grep "$SERVER_NAME" | grep -v "$0\|grep\|su $ES_USER" | awk '{print $2}' | wc -l`if [ 0 == $count ];thenecho "$SERVER_NAME not exists"elseps -ef | grep "$SERVER_NAME"  | grep -v "$0\|grep\|su $ES_USER"fi
}#启动服务
function start(){#检查服务是否已经存在count=`ps -ef | grep "$SERVER_NAME" | grep -v "$0\|grep\|su $ES_USER" | awk '{print $2}' | wc -l`if [ $count \> 0 ];thenecho "$SERVER_NAME exists run restart"stop;fi;cd "$ES_HOME"echo "ES HOME IN $ES_HOME"echo "$SERVER_NAME start begin ........."su - $ES_USER -c "$ES_HOME/bin/elasticsearch -d"sleep 1echo "$SERVER_NAME start end ......... home in $ES_HOME"
}# 停止服务
function stop(){count=`ps -ef | grep "$SERVER_NAME" | grep -v "$0\|grep\|su $ES_USER" | awk '{print $2}' | wc -l`if [ 0 == $count ];thenecho "$SERVER_NAME not exists"elseecho "$SERVER_NAME stop begin ........."threads=$(ps -ef | grep "$SERVER_NAME" | grep -v "$0\|grep\|su $ES_USER" | awk '{print $2 }')for id in $threadsdokill -9 $idecho "kill success $id "doneecho "$SERVER_NAME stop success ........."fi
}# 重启服务
function restart(){stop;sleep 1;start;
}if [ "$1" == "" ]; thenhelp
elif [ "$1" == "stop" ];thenstop
elif [ "$1" == "start" ];thenstart
elif [ "$1" == "restart" ];thenrestart
elif [ "$1" == "status" ];thenstatus
elsehelp
fi

 

7.2.修改脚本权限

# 为脚本赋可执行权限
chmod 777 /etc/init.d/elasticsearch

7.3.启动和关闭服务

service elasticsearch status   // 查看服务状态
service elasticsearch start    // 启动服务
service elasticsearch stop     // 关闭服务
service elasticsearch restart  // 重启服务

7.4添加到启动服务

chkconfig --add elastisearch

7.5服务启动方式配置

chkconfig --list //显示服务列表chkconfig elastisearch on  // 设置开机启动
chkconfig elastisearch off // 关闭开机启动

附录: 常见问题

1.启动账户问题

注意:默认不允许使用root账户启动。

image.png

解决方案:

创建用户:elasticsearch

adduser elasticsearch

设置用户密码,需要输入两次

passwd elasticsearch

将对应的文件夹权限赋给该用户

chown -R elasticsearch /usr/local/elasticsearch-7.4.0

切换至elasticsearch用户

su elasticsearch
进入启动目录启动
cd /usr/local/elasticsearch-7.4.0/bin./elasticsearch# 后台启动
# ./elasticsearch -d

2.内存与进程相关

2.1 max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]

image.png

解决方案:切换到root用户修改配置sysctl.conf

vi /etc/sysctl.conf 
添加下面配置:
vm.max_map_count=262144

保存退出,并执行命令:

sysctl -p

然后,重新启动elasticsearch

2.2 max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]

解决方案:

#切换到root 用户修改
vim /etc/security/limits.conf

#在文件末尾添加如下内容:
*                soft    nofile          65536
*                hard    nofile          65536

 

2.3max number of threads [1024] for user [lish] likely too low, increase to at least [2048]

解决方案:切换到root用户,进入limits.d目录下修改配置文件。

vi /etc/security/limits.d/90-nproc.conf 

修改如下内容:

* soft nproc 1024

#修改为

soft nproc 2048

 

3.JDK问题image.png

关于JDK

elasticsearch需要JDK环境,7.x版本后自带JDK,可以使用以下命令查看版本

/usr/local/elasticsearch-7.4.0/jdk/bin/java -version

7.4.0自带的JDK版本是 openjdk 13

image.png

 

4.启动后常见错误

http://IP:9200/_cat/nodes?pretty

image.png

解决方案:

在每个配置文件指定初始节点:

cluster.initial_master_nodes: node-1

4.修改启动内存

官网也介绍了如何设置堆大小

默认情况,ES 告诉 JVM 使用一个最小和最大都为 1GB 的堆。但是到了生产环境,这个配置就比较重要了,确保 ES 有足够堆空间可用。

ES 使用 Xms(minimum heap size)Xmx(maxmimum heap size) 设置堆大小。你应该将这两个值设为同样的大小。

XmsXmx 不能大于你物理机内存的 50%。

 

设置的示例:

切换到 conf/

打开 vim jvm.options

 

关注程序员小强公众号更多编程趣事,知识心得与您分享
?关注“程序员小强”发送关键字“elasticSearch”到公众号获取相关篇