Elasticsearch 部署以及报错解决
前言
Elasticsearch 是一个非常值得学习和使用的分布式存储
此次部署将采用 centos6.9
一、初步了解 ES
简谈概念
Elasticsearch 是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理 PB 级别的数据。
Elasticsearch 也使用 Java 开发并使用 Lucene 作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的 RESTful API 来隐藏 Lucene 的复杂性,从而让全文搜索变得简单。
运维角度个人理解
Lucene 是一个相当好的开源的搜索框架,但是其原理对于运维比较难于理解,ES 在 Lucene 基础上进行开发,降低了这类搜索引擎的操作难度,
运维需要做的就是部署,简易使用以及了解会有何种问题出现,并预防将会出现的问题。
二、安装 ES 前准备工作
同一系统以及内核版本
[root@web01 ~]# uname -r 2.6.32-696.el6.x86_64 [root@web01 ~]# cat /etc/redhat-release CentOS release 6.9 (Final)
提前准备所需 tar 包
1.下载 jdk8 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 2.下载新版 ES(到以下网址下载对应安装包) https://www.elastic.co/downloads/
安装 jdk
1.创建专属目录 mkdir -p /application/java 将 jdk 的 tar 包传入 2.解压 tar 包 tar -zxvf jdk-8u60-linux-x64.tar.gz 3.简化复杂目录 ln -s /application/java/jdk1.8.0_60/ /application/jdk 4.配置环境变量 vim /etc/profile 在文本的末尾添加如下内容: JAVA_HOME=/application/jdk CLASSPATH=JAVAHOME/lib/PATH=PATH:$JAVA_HOME/bin export PATH JAVA_HOME CLASSPATH 5.生效配置内容 source /etc/profile 6.查看安装情况 java -verison 看到此行说明成功:java version “1.8.0_60” 7.有可能出现的问题 bash: ./java: cannot execute binary file 问题原因:系统位数与安装 jdk 不同 uname -m 查看系统位数
三、开始安装 ES
同一目录并解压 tar 包
将下载好的 tar 包放到 /application 下 tar xf elasticsearch-6.4.0.tar.gz 解压完成后删掉原 tar 包
简化目录并直接运行 ES
ln -s /application/elasticsearch-6.4.0 /application/elasticsearch cd /application/elasticsearch/bin ./elasticsearch
四、运行过程中遇到的问题以及解决办法
问题一:can not run elasticsearch as root
ES 必须使用非 root 用户启动 原因:这是出于系统安全考虑设置的条件。由于 ElasticSearch 可以接收用户输入的脚本并且执行,为了系统安全考虑, 建议创建一个单独的用户用来运行 ElasticSearch 解决方法: groupadd elsearch #创建ES用户组 useradd elsearch -g elsearch -p elasticsearch #创建ES用户并归于ES用户组 chown -R elsearch:elsearch /application/elasticsearch #赋予其权限 su elsearch #切换账户 cd /application/elasticsearch/bin ./elasticsearch
问题二:ERROR: bootstrap checks failed(此问题解决中囊括多个类似问题,可以一步到位)
分别加大打开文件的最大数目和进程的最大数目 vim /etc/security/limits.conf 添加如下内容: * soft nofile 65536 * hard nofile 131072 * soft nproc 2048 * hard nproc 4096
问题三:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
elasticsearch 用户拥有的内存权限太小,至少需要262144(这里只是需要这些内存权限,但不会都用到,还是要看业务) vim /etc/sysctl.conf 在最后一行添加如下内容: vm.max_map_count=655360 执行命令使生效: sysctl -p
问题四:不能后台运行问题
ES 在执行后会夯住,我们需要将它调整至后台运行,一般采用&实现
ES 较特殊,这里使用 nohup 命令
nohup ..../bin/elasticsearch &
问题五:Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000e5330000, 449642496, 0) failed; error='Cannot allocate memory' (errno=12)
ES 内存分配不足 解决办法: 1、进入/application/elasticsearch-6.4.0/config 2、修改jvm.options 的配置 vim jvm.options 3、修改为 -Xms512m -Xmx512m
问题六:如何设置外网访问
使用 find 搜索 elasticsearch.yml vim elasticsearch.yml 将原来默认 ip 更换为0.0.0.0 network.host: 0.0.0.0 http.port: 9200 再次启动后即可外网访问