蛋疼的ElasticSearch(一)之安装ElasticSearch

Interesting things

本周的计划暂时这样子的: 1.学习Solr和ElasticSearch 2.深入学习SpringBoot 3.了解日志系统的实现

What did you do today

先入为主

ElasticSearch是什么?百度词条是这样解释的。

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。ElasticSearch是用java开发的,并作为Apache许可条款下的开发源码发布,是当前流行的企业级搜索引擎。设计用于云计算,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

我们建立一个网站或者应用程序,并要添加搜索功能,但是想要完成搜索工作的创建是非常困难的。我们希望搜索解决方案要运行速度快,我们希望能有一个零配置和一个完全免费的搜索模式,我们希望能简单的使用JSON通过HTTP来索引数据,我们希望我们的搜索服务器始终可用,我们希望能够从一台开始并扩展到数百台,我们要实时搜索,我们要简单的多租户,我们希望建立一个云的解决方案。因此我们利用ElasticSearch来解决所有这些问题以及可能出现的更多其他问题。

安装

  • 安装ES之前确保自己的机器配置过java 8环境。

[root@localhost software]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.1.1.zip

image.png

  • 好像还没有安装wget,那就安装吧

[root@localhost software]# yum install -y wget

  • 下载ES的.tar.gz安装包

[root@localhost software]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.1.1.tar.gz

image.png

  • 解压到/usr/local/fast/目录下。

[root@localhost software]# tar -zxvf elasticsearch-6.1.1.tar.gz -C /usr/local/fast/

  • 进入/usr/local/fast/elasticsearch-6.1.1/,启动elasticsearch后,发现报错了。问题所在是我虚拟机分配的内存太小了(256MB),我来修改为512MB。
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c5330000, 986513408, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 986513408 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /usr/local/fast/elasticsearch-6.1.1/hs_err_pid1795.log

image.png

image.png

  • 现在我再次启动发现“Cannot allocate memory”问题解决了,但是又抛出一个新的异常。
[2018-01-08T10:59:24,934][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
    at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:125) ~[elasticsearch-6.1.1.jar:6.1.1]
    at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:112) ~[elasticsearch-6.1.1.jar:6.1.1]
    at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[elasticsearch-6.1.1.jar:6.1.1]
    at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) ~[elasticsearch-cli-6.1.1.jar:6.1.1]
    at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-cli-6.1.1.jar:6.1.1]
    at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:92) ~[elasticsearch-6.1.1.jar:6.1.1]
    at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:85) ~[elasticsearch-6.1.1.jar:6.1.1]
Caused by: java.lang.RuntimeException: can not run elasticsearch as root
    at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:104) ~[elasticsearch-6.1.1.jar:6.1.1]
    at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:171) ~[elasticsearch-6.1.1.jar:6.1.1]
    at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:322) ~[elasticsearch-6.1.1.jar:6.1.1]
    at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:121) ~[elasticsearch-6.1.1.jar:6.1.1]
    ... 6 more
  • 新的版本安全级别 提高了,不允许采用root启动,我们需要添加一个新的用户。

1.创建elasticsearch用户组:[root@localhost /]# groupadd elasticsearch 2.创建elasticsearch用户:[root@localhost elasticsearch-6.1.1]# useradd elasticsearch -g elasticsearch -p elasticsearch 3.更改 elasticsearch-6.1.1文件夹下所有文件的所属用户和组分别为elasticsearch、elasticsearch。命令: chown -R elasticsearch.elasticsearch *(chown将指定文件的拥有者,-R代表处理指定目录以及子目录下的所有文件)

image.png

  • 切换到elasticsearch用户,然后启动elasticserach,发现还是抛出"Unable to access 'path.data' "异常。
Caused by: java.lang.IllegalStateException: Unable to access 'path.data' (/usr/local/fast/elasticsearch-6.1.1/data)
    at org.elasticsearch.bootstrap.FilePermissionUtils.addDirectoryPath(FilePermissionUtils.java:70) ~[elasticsearch-6.1.1.jar:6.1.1]
    at org.elasticsearch.bootstrap.Security.addFilePermissions(Security.java:287) ~[elasticsearch-6.1.1.jar:6.1.1]
    at org.elasticsearch.bootstrap.Security.createPermissions(Security.java:242) ~[elasticsearch-6.1.1.jar:6.1.1]
    at org.elasticsearch.bootstrap.Security.configure(Security.java:119) ~[elasticsearch-6.1.1.jar:6.1.1]
    at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:207) ~[elasticsearch-6.1.1.jar:6.1.1]
  • 我们还没有给elasticsearch用户分配读写“/usr/local/fast/elasticsearch-6.1.1/data”的权限。一般来说,普通用户只有在自己的主目录下有创建文件或者目录的权限,我们当前的用户是elasticsearch,它的主目录就应该是/home/elasticsearch.我们切换到root用户,改变elasticsearch-6.1.1这个文件的拥有者和群主。命令:chown -R elasticsearch:elasticsearch elasticsearch-6.1.1(命令格式:chown [选项]... [所有者][:[组]] 文件...)

image.png

  • 嘻嘻,我们再次启动elasticsearch,发现它又启动失败了!

image.png

  • 通过观看log输出,我们发现抛出了3个error。

1.[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536],修改/etc/security/limits.conf,添加如下内容,如果不成功的话可以尝试ulimit -n 65536。

image.png

2.[2]: max number of threads [794] for user [elasticsearch] is too low, increase to at least [4096]修改/etc/security/limits.d/20-nproc.conf,具体如下:

image.png

接着修改/etc/security/limits.conf,具体如下:

image.png

3.[3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144],修改/etc/sysctl.conf文件,具体如下。修改完成后,输入sysctl -a 命令。

image.png

  • 由于elasticsearch默认分配jvm空间大小为1g,我在这里修改jvm空间分配为512MB

image.png

  • 修改config目录下的elasticsearch.yml配置文件,具体如下:
# Use a descriptive name for your cluster:
#
cluster.name: es_cmazxiaoma
#
# ------------------------------------ Node ------------------------------------
#
# Use a descriptive name for the node:
#
node.name: node-1
#

# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: 192.168.12.6
#
# Set a custom port for HTTP:
#
http.port: 9200
#
  • 防火墙添加9200端口策略。

image.png

  • 我们再次启动elasticsearch,发现已经成功!,如果需要后台启动的话,命令:./bin/elasticsearch -d

image.png

  • 访问192.168.12.6:9200,历经坎坷终于成功了!

image.png

Summary

下一篇讲ElasticSearch Head插件。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏aoho求索

微服务网关Zuul迁移到Spring Cloud Gateway

在之前的文章中,我们介绍过微服务网关Spring Cloud Netflix Zuul,前段时间有两篇文章专门介绍了Spring Cloud的全新项目Sprin...

44030
来自专栏Android开发实战

Android启动过程分析(图+文)

①点击桌面App图标,Launcher进程采用Binder IPC向system_server进程发起startActivity请求;

42440
来自专栏青青天空树

springboot整合websocket(1)

  我们都知道http协议只能浏览器单方面向服务器发起请求获得响应,服务器不能主动向浏览器推送消息。想要实现浏览器的主动推送有两种主流实现方式:

14820
来自专栏PHP在线

重磅资料!Github上的PHP资源汇总大全

依赖管理 ——用于依赖管理的包和框架 Composer/Packagist : 一个包和依赖管理器 Composer Installers: 一个多框架Com...

32540
来自专栏weixuqin 的专栏

springMVC 学习笔记(一):spring 入门

springMVC 是 spring 框架的一个模块,springMVC 和 spring 无需通过中间整合层进行整合。springMVC 是一个基于 mvc ...

14720
来自专栏青青天空树

springboot配置读写分离

  近日工作任务较轻,有空学习学习技术,遂来研究如果实现读写分离。这里用博客记录下过程,一方面可备日后查看,同时也能分享给大家(网上的资料真的大都是抄来抄去,,...

29130
来自专栏张戈的专栏

修改Apache的超时设置,解决长连接请求超时问题

某日,组内后台开发找到我,问我们的 WEB 服务器超时设置是多少。他反馈的问题是,有一个 VLAN 切换任务 cgi 接口经常返回 504 网关超时错误,要我分...

1.2K80
来自专栏小二的折腾日记

服务器-Nginx-一个简单的例子

直接贴一个几经磨难的简单的例子吧,虽然简单,但是有些不理解的地方,就出了很多错,但是因为这些错误,在对nginx理解稍微深刻了那么一点点的同时,对Linux的操...

12810
来自专栏三杯水

ELKB5.2.2集群环境部署配置优化终极文档

3,logstash filter 加入urldecode支持url、reffer、agent中文显示

37020
来自专栏battcn

一起来学SpringBoot | 第三篇:SpringBoot日志配置

SpringBoot 内部采用的是 CommonsLogging进行日志记录,但在底层为 JavaUtilLogging、 Log4J2、 Logback 等日...

14230

扫码关注云+社区

领取腾讯云代金券