专栏首页JavaJourneyElasticsearch部署的这些问题,你遇到过吗?

Elasticsearch部署的这些问题,你遇到过吗?

Elasticsearch(简称ES) 是一个分布式、高扩展、高实时的搜索与数据分析引擎,它也是一个“存储库”。 它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用 ES 的水平伸缩性,能使数据在生产环境变得更有价值。

本文踏出使用ES的第一步-环境部署,这里把可能遇到的问题整理了一下,详见文章内容。

安装Elasticsearch 7.10

# 为Elasticsearch添加用户
useradd elastic
# 设置密码
passwd elastic

cd /home/elastic

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.2-darwin-x86_64.tar.gz

tar -zxvf elasticsearch-7.10.2-darwin-x86_64.tar.gz

cd elasticsearch-7.10.2/

这个home/elastic/elasticsearch-7.10.2目录就是ES的家目录,后面用$ES_HOME代替。

可以使用$ES_HOME/bin/elasticsearch直接启动了,但是会有一些问题,下面来总结一下。

CentOS 7环境下启动ES7遇到的问题

1. root用户下启动ES报错

如果没有配置ES环境变量,需要进入到$ES_HOMEbin目录下,执行elastisearch命令启动,每次这样启动感觉有点繁琐,我们来配置一下环境变量:

vi /etc/profile

# 添加
export ES_HOME=/home/elastic/elasticsearch-7.10.2
export PATH=$PATH:$JAVA_HOME/bin:$ES_HOME/bin

# 使之生效
source /etc/profile

然后在任何地方都可以直接敲elasticsearch命令来启动ES了。

but,你会收到这样的错误:

[2021-05-19T23:13:27,102][ERROR][o.e.b.ElasticsearchUncaughtExceptionHandler] [elk-standalone] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root

提示很明显了,就是不让用root用户启动ES,这个解决方法简单,切换到普通用户在启动就行了。

前面安装步骤中我已经提前机智的添加好elastic用户了,现在派上用场了。

切换到elastic用户,再直接用elasticsearch命令就不行了,因为还没有为这个elastic用户配置环境变量呢,现在来配置:

vi ~/.bash_profile

# 同样加上ES的家目录
export ES_HOME=/home/elastic/elasticsearch-7.10.2
export PATH=$PATH:$ES_HOME/bin

# 使之生效
source ~/.bash_profile

这样就可以和root用户一样爽了!

启动成功:

使用jps看一下:

2. 客户端连接问题

成功启动以后,我们用postman连一下试试,地址:http://192.168.242.120:9200

连接不上!

这个时候根据经验就要去看一下配置文件了,ES的配置文件在$ES_HOME/config目录下,瞅瞅:

打开elasticsearch.yml,修改其中的配置项:

# 将network.host修改为0.0.0.0,使客户端能连接
network.host: 0.0.0.0

重新启动之,应该就行了吧?

4. 启动报错

Ctrl-C直接关掉ES,

前面说的启动都是在前台启动ES,实际中我们不可能前台启动程序,一般都是后台启动,这里为了方便看日志和演示才前台启动。 后台启动时,直接在 elasticsearch -d就好了,停服务的时候,先找到ES的PID,然后kill掉。

重新输入elasticsearch启动,这次竟然报错了!

报错详细信息:

bound or publishing to a non-loopback address, enforcing bootstrap checks
ERROR: [4] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
[2]: max number of threads [3795] for user [elastic] is too low, increase to at least [4096]
[3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
[4]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
ERROR: Elasticsearch did not exit normally - check the logs at /home/elastic/elasticsearch-7.10.2/logs/elasticsearch.log

有四项错误:

[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]

[2]: max number of threads [3795] for user [elastic] is too low, increase to at least [4096]

这两项的意思就是elasticsearch进程的最大文件描述符[4096]太低,至少增加到[65535];用户elastic的最大线程数[3795]太低,至少增加到[4096]。

那么我们就来按照它的指示增加一下:

# 在root用户下操作
vim /etc/security/limits.conf
# 修改最大进程数和最大线程数
# 在文件末尾添加
elastic hard nofile 65536
elastic soft nofile 65536
elastic hard nproc 4096
elastic soft nproc 4096

其中elastic为运行ES程序的用户。

再来看下一个问题:

[3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

这个提示是要让我们改一下vm.max_map_count,这个参数在/etc/sysctl.conf这个文件里添加:

# 在root用户下操作
vi /etc/sysctl.conf

# 在文件末尾添加
vm.max_map_count = 655360

# 保存退出
# 使之生效
sysctl -p

第四个问题:

[4]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured

意思是默认的配置不适合生产使用,必须至少配置discovery.seed_hostsdiscovery.seed_providerscluster.initial_master_nodes中的一个,这就需要我们再改下config/elasticsearch.yml文件了:

# config/elasticsearch.yml文件
node.name: node-1
cluster.initial_master_nodes: ["node-1"]

OK,保存,再次用elastic用户重启,见证奇迹:

启动成功!

再用postman验证一下:

完美解决!

最后

Elasticsearch,

“You Know, for Search”

文章分享自微信公众号:
行百里er

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

作者:行百里er
原始发表时间:2021-05-20
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • threadlocal变量透传,这些问题你都遇到过吗?

    值在线程之间的透传,你可以认为是一个bug,这些问题一般会比较隐蔽,但问题暴露的时候脾气却比较火爆,让人手忙脚乱,怀疑人生。

    Bug开发工程师
  • 外圆磨床这些常见问题,你遇到过吗?

    产生原因:纵向进给量和磨削深度过大;在修整砂轮时,砂轮表面有凹凸不平;磨床头架和尾座刚度不好,在磨削力作用下产生变形,引起工件轴线偏斜;工作台导轨润滑油膜太厚,...

    lrglu
  • 深度学习这些坑你都遇到过吗?

    原文地址:My Neural Network isn't working! What should I do? 如果你的神经网络不工作,该怎么办?本文作者列举...

    MachineLP
  • Dubbo面试20问!这些题你都遇到过吗?

    https://deanwang1943.github.io/bugs/2018/10/05/面试/饿了么/dubbo 面试题/

    Java技术栈
  • Python这些问题你都会吗?

    距离Python圣诞学习狂欢夜 还有4天 点击进入详细了解 final作用域的代码一定会被执行吗? 正常的情况下,finally作用域的代码一定会被执行的,不管...

    企鹅号小编
  • Z社区 |Zabbix实施中你可能也遇到过这些问题

    #本周Z社区#人美心善的小秘给大家整理一个【zabbix实施常遇到的问题】专题,希望对大家有所帮助

    Zabbix
  • [静电答疑时间] 这些Sketch使用问题,你知道怎么解决吗?

    静电说:最近攒了不少小伙伴的Sketch使用问题(也有设计上的问题),各式各样的,大部分我都在SketchChina.com中国社区做了解答。那么这篇文章,咱们...

    用户5009027
  • Python中的这几种报错你遇到过吗?

    我新开了一个系列,叫做『读者分享系列』,这个系列主要用来发布一些我书的读者写的一些读书笔记和学习笔记的。

    张俊红
  • 你的Elasticsearch在裸奔吗?

    安全隐患划重点: 1、印度:没有设置Elasticsearch集群安全权限; 2、婚庆网站:Elasticsearch服务器暴露到公网。 3、群友:9200端口...

    铭毅天下
  • 这个Maven依赖的问题,你敢说你没遇到过

    Maven 依赖没处理好的话经常会导致发生一些问题,非常烦。今天给大家分享一个依赖相关的问题,说不定你之前就遇到过。

    猿天地
  • 服务器租用这些问题你注意过吗?

    根据目前的情况来看,服务器租用越来越受到企业用户的青睐。其关键也在于服务器租用价格低的同时,安全性同等。其中服务器租用的用户可以独享服务器资源,可以自己选择足够...

    企商在线
  • DDD(领域驱动设计)的这些问题,你都知道吗?

    本文中的问题精选自上期【你问我答】——DDD(领域驱动设计)专题中读者的提问。【你问我答】是由美团点评技术团队推出的线上问答服务,你在工作学习中遇到的各种技术问...

    美团技术团队
  • C++初始化的坑你也遇到过吗?

    谈及C++的初始化,我们都知道要在变量定义的时候给它赋初值。确实,在每次定义的时候就初始化不仅可以避免脏数据产生,还能增加代码的可读性。但是,你知道这其中有多少...

    DeROy
  • Python中一些糟糕的语法!你遇到过吗

    其有非常多的优点,但是也并不是完美的,除了大家都知道的执行速度不够快,Python2和Python3的兼容问题,以及GIL锁,在其语法上也有一些特点(是否是缺点...

    py3study
  • 深度学习的这些坑你都遇到过吗?神经网络 11 大常见陷阱及应对方法

    【新智元导读】如果你的神经网络不工作,该怎么办?本文作者列举了搭建神经网络时可能遇到的11个常见问题,包括预处理数据、正则化、学习率、激活函数、网络权重设置等,...

    新智元
  • 深度学习的这些坑你都遇到过吗?神经网络11大常见陷阱及应对方法

    如果你的神经网络不工作,该怎么办?本文作者列举了搭建神经网络时可能遇到的11个常见问题,包括预处理数据、正则化、学习率、激活函数、网络权重设置等,并提供解决方法...

    企鹅号小编
  • 你的简历写了 “熟悉” zookeeper ?那这些你会吗?

    Zookeeper 它作为Hadoop项目中的一个开源子项目,是一个经典的分布式数据一致性解决方案,致力于为分布式应用提供一个高性能、高可用,且具有严格顺序访问...

    程序员小富
  • 24个经典的MySQL索引问题,你都遇到过哪些?

    索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。

    程序员追风

扫码关注腾讯云开发者

领取腾讯云代金券