# ElasticSearch7.x单机版安装 ## 1.前置准备 相关文档: * 官网:[传送门](https://www.elastic.co/) * 官网文档:[传送门](https://www.elastic.co/guide/index.html) * 中文手册:[传送门](https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html) * 中文社区:[传送门](https://elasticsearch.cn/) * Jave-Client :[传送门](https://www.elastic.co/guide/en/elasticsearch/client/java-rest/7.x/java-rest-high-create-index.html) ## 2.下载安装包 官方下载地址:[传送门](https://www.elastic.co/cn/downloads/elasticsearch) 历史版本下载:[传送门](https://www.elastic.co/cn/downloads/past-releases#elasticsearch) 本文以7.4.0为例:[7.4.0下载地址](https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-2-0) 命令下载 ~~~bash wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.4.0-linux-x86_64.tar.gz ~~~ ## 3.解压 ~~~perl #解压到自定义目录tar -zxvf elasticsearch-7.4.0-linux-x86_64.tar.gz -C /usr/local ~~~ ![](https://img.kancloud.cn/8e/c1/8ec1251a467c3da40140495605c77102_1108x544.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.创建数据存储目录与日志存储目录 ~~~bash # 创建数据存储目录mkdir -p /usr/local/elasticsearch-7.4.0/data# 创建日志存储目录mkdir -p /usr/local/elasticsearch-7.4.0/logs ~~~ ## 5.修改配置 进入到es安装目录下的config文件夹中,修改elasticsearch.yml 文件 ~~~bash #配置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都可以访问elasticsearchnetwork.host: 0.0.0.0 #对外提供服务的http端口,默认为9200http.port: 9200#设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点discovery.seed_hosts: ["127.0.0.1:9200"] #ES默认开启了内存地址锁定,为了避免内存交换提高性能。但是Centos6不支持SecComp功能,启动会报错,所以需要将其设置为falsebootstrap.memory_lock: false # 是否支持跨域http.cors.enabled: true # *表示支持所有域名http.cors.allow-origin: "*" ~~~ 修改启动内存(可选配置) 切换到 conf/ 打开 vim jvm.options ![](https://img.kancloud.cn/0e/48/0e487e86d00ca28b7d677beacde88b12_566x150.png) ## 6.启动与关闭 ### 启动 切换到 elasticsearch-7.4.0/bin/ 目录下 ~~~bash # -d参数表示以后台进程启动,默认情况下会在控制台输出日志。./elasticsearch -d ~~~ 注:启动时若出现报错,请到文末处,查看常见启动问题。 ### 关闭 ~~~perl # 查找ES进程ps -ef | grep elastic#杀掉ES进程kill -9 xxx(进程号) ~~~ 验证是否启动成功 除了查看进程外还可以在浏览器输入 IP:9210 可以看到返回了一个JSON信息 ![](https://img.kancloud.cn/57/e6/57e60fad16914a757bf65aedb26d1762_854x580.png) 重点几个关注下即可: name : 默认启动的时候指定了 ES 实例名称,name 为 BYSocketdeMacBook-Pro-2.local cluster\_name : 默认名为 elasticsearch version :版本信息 ## 7.设置开机自启 ### 7.1.创建启动脚本 在/etc/init.d目录下新建elastisearch启动脚本文件 ~~~csharp vim /etc/init.d/elasticsearch ~~~ 脚本加入如下内容 ~~~bash #!/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.0 function 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 ];then echo "$SERVER_NAME not exists" else ps -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 ];then echo "$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 1 echo "$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 ];then echo "$SERVER_NAME not exists" else echo "$SERVER_NAME stop begin ........." threads=$(ps -ef | grep "$SERVER_NAME" | grep -v "$0\|grep\|su $ES_USER" | awk '{print $2 }') for id in $threads do kill -9 $id echo "kill success $id " done echo "$SERVER_NAME stop success ........." fi} # 重启服务function restart(){ stop; sleep 1; start;} if [ "$1" == "" ]; then helpelif [ "$1" == "stop" ];then stopelif [ "$1" == "start" ];then startelif [ "$1" == "restart" ];then restartelif [ "$1" == "status" ];then statuselse helpfi ~~~ ### 7.2.修改脚本权限 ~~~bash # 为脚本赋可执行权限chmod 777 /etc/init.d/elasticsearch ~~~ ### 7.3.启动和关闭服务 ~~~javascript service elasticsearch status // 查看服务状态service elasticsearch start // 启动服务service elasticsearch stop // 关闭服务service elasticsearch restart // 重启服务 ~~~ ### 7.4添加到启动服务 ~~~csharp chkconfig --add elastisearch ~~~ ### 7.5服务启动方式配置 ~~~csharp chkconfig --list //显示服务列表 chkconfig elastisearch on // 设置开机启动chkconfig elastisearch off // 关闭开机启动 ~~~ ## 附录: 常见问题 ### 1.启动账户问题 注意:默认不允许使用root账户启动。 ![](https://img.kancloud.cn/24/8b/248b03fb5c7a0d6b1faed87f3f44f01f_1776x530.png) **解决方案:** 创建用户:elasticsearch ~~~undefined adduser elasticsearch ~~~ 设置用户密码,需要输入两次 ~~~undefined passwd elasticsearch ~~~ 将对应的文件夹权限赋给该用户 ~~~perl chown -R elasticsearch /usr/local/elasticsearch-7.4.0 ~~~ 切换至elasticsearch用户 ~~~undefined su elasticsearch ~~~ ~~~html 进入启动目录启动 ~~~ ~~~bash 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\] ![](https://img.kancloud.cn/9e/10/9e10f22b55d72913a3222ce0f08df4cc_2160x430.png) **解决方案:**切换到root用户修改配置sysctl.conf ~~~bash vi /etc/sysctl.conf ~~~ ~~~html 添加下面配置: ~~~ ~~~undefined vm.max_map_count=262144 ~~~ 保存退出,并执行命令: ~~~css sysctl -p ~~~ 然后,重新启动elasticsearch 2.2 max file descriptors \[4096\] for elasticsearch process likely too low, increase to at least \[65536\] **解决方案:** ~~~html #切换到root 用户修改 ~~~ ~~~bash vim /etc/security/limits.conf ~~~ ~~~r #在文件末尾添加如下内容:* 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目录下修改配置文件。 ~~~groovy vi /etc/security/limits.d/90-nproc.conf ~~~ 修改如下内容: ~~~bash * soft nproc 1024 ~~~ #修改为 ~~~bash soft nproc 2048 ~~~ ### 3.JDK问题 ![](https://img.kancloud.cn/0e/55/0e5503dbd5e3f83357938fddbf2fdee6_2056x196.png) 关于JDK elasticsearch需要JDK环境,7.x版本后自带JDK,可以使用以下命令查看版本 ~~~groovy /usr/local/elasticsearch-7.4.0/jdk/bin/java -version ~~~ 7.4.0自带的JDK版本是 openjdk 13 ![](https://img.kancloud.cn/4b/be/4bbe77146615e80a99089a00a66da137_1178x186.png) 4.启动后常见错误 ![](https://img.kancloud.cn/94/f0/94f0e82f8685ca5d681d3b78a5c4804e_1088x464.png) ![](https://img.kancloud.cn/94/f0/94f0e82f8685ca5d681d3b78a5c4804e_1088x464.png) 解决方案: 在每个配置文件指定初始节点: ~~~undefined cluster.initial_master_nodes: node-1 ~~~ ### 4.修改启动内存 官网也介绍了如何[**设置堆大小**](https://www.elastic.co/guide/en/elasticsearch/reference/current/jvm-options.html)。 默认情况,ES 告诉 JVM 使用一个最小和最大都为 1GB 的堆。但是到了生产环境,这个配置就比较重要了,确保 ES 有足够堆空间可用。 ES 使用`Xms(minimum heap size)`和`Xmx(maxmimum heap size)`设置堆大小。你应该将这两个值设为同样的大小。 **`Xms`和`Xmx`不能大于你物理机内存的 50%。** 设置的示例: 切换到 conf/ 打开 vim jvm.options ![](https://img.kancloud.cn/0e/48/0e487e86d00ca28b7d677beacde88b12_566x150.png)