程序员小强总结的 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
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
6.启动与关闭
启动
切换到 elasticsearch-7.4.0/bin/ 目录下
# -d参数表示以后台进程启动,默认情况下会在控制台输出日志。
./elasticsearch -d
注:启动时若出现报错,请到文末处,查看常见启动问题。
关闭
# 查找ES进程
ps -ef | grep elastic
#杀掉ES进程
kill -9 xxx(进程号)
验证是否启动成功
除了查看进程外还可以在浏览器输入 IP:9210
可以看到返回了一个JSON信息
重点几个关注下即可:
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账户启动。
解决方案:
创建用户: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]
解决方案:切换到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问题
关于JDK
elasticsearch需要JDK环境,7.x版本后自带JDK,可以使用以下命令查看版本
/usr/local/elasticsearch-7.4.0/jdk/bin/java -version
7.4.0自带的JDK版本是 openjdk 13
4.启动后常见错误
http://IP:9200/_cat/nodes?pretty
解决方案:
在每个配置文件指定初始节点:
cluster.initial_master_nodes: node-1
4.修改启动内存
官网也介绍了如何设置堆大小。
默认情况,ES 告诉 JVM 使用一个最小和最大都为 1GB 的堆。但是到了生产环境,这个配置就比较重要了,确保 ES 有足够堆空间可用。
ES 使用 Xms(minimum heap size)
和 Xmx(maxmimum heap size)
设置堆大小。你应该将这两个值设为同样的大小。
Xms
和 Xmx
不能大于你物理机内存的 50%。
设置的示例:
切换到 conf/
打开 vim jvm.options
关注程序员小强公众号更多编程趣事,知识心得与您分享
?关注“程序员小强”发送关键字“elasticSearch”到公众号获取相关篇