本文大纲
安装环境
安装配置
下载ElasticSearch
Windows下安装
启动ES
Linux下安装
ES安装文件上传
运行 Elasticsearch
添加用户
修改核心配置文件elasticearch.yml
配置内存设置文件jvm.options
开启防火墙的访问端口
1、新版本要求至少jdk1.8以上。
从Elasticsearch 5开始需要 Java 8 以上版本;
Elasticsearch 6.5 开始支持 Java 11;
Elasticsearch 7.0 开始,内置了 Java 环境,因此安装 7.0+ 版本会方便很多。
2、支持tar、zip、rpm等多种安装方式。在windows下开发建议使用ZIP解压方式安装,Linux下推荐使用tar.gz解压方式安装。
3、同时也支持docker方式安装。详情参见官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/install-elasticsearch.html
最新版本需要访问 ElasticSearch 官网下载:https://www.elastic.co/cn/downloads/elasticsearch,
其他版本见Elastic 中文社区,地址:https://elasticsearch.cn/download
我这里下载的是:ElasticSearch-7.4.2,分别有Linux和Windows版本
Windows:elasticsearch-7.4.2-windows-x86_64.zip
Linux:elasticsearch-7.4.2-linux-x86_64.tar.gz
官网下载可能有些慢,因此一般采用国内镜像或者是其他人下载好上传到网盘的版本,这里将我使用的挂出来。
链接:https://pan.baidu.com/s/1hKglTrPPTFga2nfJNWED5A 提取码:sm42
将下载elasticsearch的Windows版,指定位置解压缩。会得到如下所示文件和文件夹目录结构。
bin:脚本目录,包括:启动、停止等可执行脚本
config:配置文件目录
data:索引目录,存放索引文件的地方
jdk:内置的jdk
lib:依赖的jar,类库
logs:日志目录
modules:模块目录,包括了es的功能模块
plugins:插件目录,es支持插件机制(用于扩展,常见的有集成分词器ik等)
在bin目录下找到elasticsearch.bat,双击运行。
启动成功,界面输出默认访问的端口号,分别是http访问的9200端口和java程序通信的tcp访问端口:9300如示。
浏览器验证,地址栏输入:http://127.0.0.1:9200,显示如下内容表示ES安装完成。
1、首先选择下服务器的上传目录,例如在/var/huaxing/(此目录为我这里放置es的目录),使用ftp工具上传文件包(例如我这里使用的是Xftp,他和Xshell一般用于连接服务器)。
2、解压压缩包,命令行:tar -zxvf elasticsearch-7.4.2-linux-x86_64.tar.gz
目录树如下所示。
前台启动命令:bin/elasticsearch
启动可能的错误:
future versions of Elasticsearch will require Java 11; your Java version from [/usr/apps/java/jdk1.8.0_221/jre] does not meet this requirement
[2020-09-12T22:52:06,657][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [192.168.235.129] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
信息如示。
原因:
1、说明这个版本对应的jdk应该是java11。但是我们服务器安装环境中jdk是java8。而新版的es是自带jdk的,于是和机器环境变量的冲突了(但是这个不是主因,因为他使用的是自带的jdk)。
2、错误的真正原因是:es在Linux下启动时不能使用root用户,因此需要额外添加用户解决这个问题
由于Elasticsearch5.0之后,不能使用root账户启动,因此需要创建一个es用户。
添加命令:
useradd es
赋权命令:
chown -R es:es /var/huaxing/elasticsearch-7.4.2
此处需要注意的是执行赋权命令时要使用root账号进行赋权,不然会赋权失败。运行es时会报以下错误
[es@izwz9hudtjguhbu663uwhez bin]$ ./elasticsearch
Exception in thread "main" java.nio.file.AccessDeniedException: /var/huaxing/elasticsearch-7.4.2/config/jvm.options
at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:90)
at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:116)
at java.base/sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:219)
at java.base/java.nio.file.Files.newByteChannel(Files.java:374)
at java.base/java.nio.file.Files.newByteChannel(Files.java:425)
at java.base/java.nio.file.spi.FileSystemProvider.newInputStream(FileSystemProvider.java:420)
at java.base/java.nio.file.Files.newInputStream(Files.java:159)
at org.elasticsearch.tools.launchers.JvmOptionsParser.main(JvmOptionsParser.java:61)
切换root账号后再次启动(前台启动命令):
bin/elasticsearch
结果信息显示有“Security is disabled”表示启动完成,如下图所示。
推荐使用后台启动的方式。命令:
bin/elasticsearch -d
验证启动,命令:curl 'http://127.0.0.1:9200',显示信息如示。表示可以正常使用
elasticearch.yml文件中主要定义以下内容:
1、集群名称;
2、当前的es节点名称;
3、data数据保存地址和日志数据保存地址;
4、绑定es网络ip;
5、集群节点修改为之前的节点名称
第一步、添加集群名称和节点名称(ES支持进行集群搭建,它自身对集群自定义实现,可以快速搭建),若是仅使用单机版(此步骤可不用设置)
第二步、添加es的 data数据保存地址和日志数据保存地址
(可能需要创建对应位置的data目录,手动创建的目录需要添加到es用户所属)
第三步、添加es的映射外部访问的ip和端口号
注意配置:network.host: 0.0.0.0表示根据机器的网络自动绑定(某些云可能无法绑定公网,例如阿里云,这里就可使用此方式)
PS:阿里云服务器使用0.0.0.0外网会访问不了,必须还需要配置安全组策略,开放对应的端口。
第四步、设置节点名称和主节点数据(单机版主节点设置为1,节点名称采用易于记忆的名称,如:记录在Node位置配置名称)
第五步、设置是否可以通过正则或者_all删除或者关闭索引库,默认true表示必须需要显式指定索引库名称
第六步、设置跨域访问(可视化连接时配置)
## 开启跨域访问(配置文件末尾添加即可)
http.cors.enabled: true
http.cors.allow-origin: "*"
elasticsearch.yml的其它可配置信息:
属性名 |
说明 |
cluster.name |
配置elasticsearch的集群名称,默认是elasticsearch。建议修改成一个有意义的名称。 |
node.name |
节点名,es会默认随机指定一个名字,建议指定一个有意义的名称,方便管理 |
path.conf |
设置配置文件的存储路径,tar或zip包安装默认在es根目录下的config文件夹,rpm安装默认在/etc/ elasticsearch |
path.data |
设置索引数据的存储路径,默认是es根目录下的data文件夹,可以设置多个存储路径,用逗号隔开 |
path.logs |
设置日志文件的存储路径,默认是es根目录下的logs文件夹 |
path.plugins |
设置插件的存放路径,默认是es根目录下的plugins文件夹 |
bootstrap.memory_lock |
设置为true可以锁住ES使用的内存,避免内存进行swap |
network.host |
设置bind_host和publish_host,设置为0.0.0.0允许外网访问 |
http.port |
设置对外服务的http端口,默认为9200。 |
transport.tcp.port |
集群结点之间通信端口 |
discovery.zen.ping.timeout |
设置ES自动发现节点连接超时的时间,默认为3秒,如果网络延迟高可设置大些 |
discovery.zen.minimum_master_nodes |
主结点数量的最少值 ,此值的公式为:(master_eligible_nodes / 2) + 1 ,比如:有3个符合要求的主结点,那么这里要设置为2 |
重新使用后台的方式启动es。
若报错
maybe these locations are not writable or multiple nodes were started without increasing [node.max_local_storage_nodes] (was [1])?
则需要把对应的es使用 kill -9 xxx 命令杀掉对应进程。
3.5. 配置内存设置文件jvm.options
文件路径:/var/huaxing/elasticsearch-7.4.2/config
内存容量较小时修改默认配置:-Xms1g -Xmx1g为-Xms512m -Xmx512m。
备注:配置好内存大小以及es所需各项参数后。启动报错:
[2021-11-14T13:36:28,468][INFO ][o.e.b.BootstrapChecks ] [node-1] bound or publishing to a non-loopback address, enforcing bootstrap checks
[2021-11-14T13:36:28,473][ERROR][o.e.b.Bootstrap ] [node-1] node validation exception
[1] bootstrap checks failed
[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解决方法:需要切换到root用户修改配置。
1、修改/etc/security/limits.conf 文件
vi /etc/security/limits.conf
添加内容如下所示。
* soft nofile 65536
* hard nofile 131072
* soft nproc 4096
* hard nproc 4096
2、修改 /etc/sysctl.conf 文件。增加
vm.max_map_count=262145
修改完成使用命令:sysctl -p 刷新使用
注意点:
1、机器内存可能不够,就需要修改 JVM 参数,配置文件路径为 config/jvm.options,ES V7.1 版本之后默认为 1g, 老版本为2g,可自行修改。
2、Xmx 和Xms 数值请设置相同;
3、Xmx 不要超过机器内存的 50%;
4、内存总量不要超过 30GB, 参见官方文档 https://www.elastic.co/cn/blog/a-heap-of-trouble;
1、添加端口:
firewall-cmd --zone=public --add-port=9200/tcp --permanent
firewall-cmd --zone=public --add-port=9300/tcp --permanent
2、重启防火墙:
firewall-cmd --reload
3、查看开放端口:
firewall-cmd --list-port
4、外部访问地址(ip+端口),例如:192.168.235.129:9200
1)查看前台方式(bin/elasticsearch)启动结果
外部访问看到信息:
2)后台启动结果(bin/elasticsearch -d或者到bin目录下执行./elasticsearch -d)
查看日志信息,命令:cat logs/huaxing.log(其中:huaxing表示配置的集群名称)
最后的结果如下:
5、Linux访问地址(curl ip+端口),例如:curl '172.18.243.43:6688'
以上单机版安装就此结束,已经可以正常使用es了。