原文:https://blog.csdn.net/an88411980/article/details/83150380

概述
    公司最近在做全文检索的项目,发现elasticsearch踩了不少坑,百度点进去又是坑,在此记录一下自己的踩坑历程。

本文旨在单机版的elasticsearch环境搭建踩坑记录,后续会把整个全文检索涉及到的项目和技术分享出来.

上一篇博文记录了elasticsearch安装方式  ,RPM安装简单,坑点少,但自由度低,本人生产使用的tar包安装方式,本文主要记录tar包踩坑记

如有错误或者更好的方案,欢迎批评指正

环境准备
全新最小化安装的centos 7.5
elasticsearch 6.4.0
elasticsearch配置
    elasticsearch安装方式 中tar包安装方式配置文件在 /opt/apps/elasticsearch-6.4.0/config/ 下

elasticsearch配置文件主要是 es配置文件elasticsearch.yml 和 es jvm配置文件jvm.options两个

jvm.options
内存大小配置
    jvm.options配置文件首先是内存大小内存,es默认内存大小配置为1G,此配置需要根据实际数据大小进行配置,建议最大分配内存为机器可用内存大小的一半,最大不超过32G,因为es自身有个压缩功能在32G以内会启用,修改此配置项操作如下:

vim /opt/apps/elasticsearch-6.4.0/config/jvm.options

将以上默认配置项修改为4G,本人机器内存9G,数据大小为1.8G

GC配置

gc配置如下图: 每行最前面的数字是指jdk的版本,8代表jdk1.8,本人这里使用了默认配置不变

elasticsearch.yml

elasticsearch.yml配置文件主要包含集群配置,节点配置,数据以及日志路径配置,启动内存配置,网络配置

集群相关配置

vim /opt/apps/elasticsearch-6.4.0/config/elasticsearch.yml

cluster.name: test-cluster
node.name: node-1 network.host: 172.16.0.1
http.port: 9200 discovery.zen.ping.unicast.hosts: ["172.16.0.100", "172.16.0.101","172.16.0.102"]
discovery.zen.minimum_master_nodes: 2

配置详解:

cluster.name: es集群的名称
node.name: 当前es节点名称,主要区分集群中哪个节点

network.host:  当前节点(服务器)的IP地址,此项必须配置,否则其他服务器无法访问到es
http.port: es服务的端口,默认就是9200

discovery.zen.ping.unicast.hosts:  集群每个节点的IP地址,同样可以配置可解析的域名,单机环境可以忽略此配置

discovery.zen.minimum_master_nodes: 集群节点存活最少数,建议配置为集群机器数/2+1 ,单机环境可以忽略

路径配置
    为了规避对es打包到其他机器继续使用时把数据和日志也打包进去,建议将数据和日志保存到非es安装目录的其他目录下,

如果改变数据和日志路径需要提前创建好存放目录,本文存放目录如下:

mkdir -p /data/es/data

mkdir -p /var/log/es

vim /opt/apps/elasticsearch-6.4.0/config/elasticsearch.yml

path.data: /data/es/data

path.logs: /var/log/es

配置详解:

path.data: es数据存放路径
path.logs: es日志存放路径

启动踩坑记

es后台启动命令如下:

/opt/apps/elasticsearch-6.4.0/bin/elasticsearch -d -p pid

root用户启动失败

本人使用root用户执行启动命令后,发现没有es进程,开始查看es日志:

tail -fn 500 /var/log/es/elasticsearch.log

很幸运的看到了错误提示: Caused by: java.lang.RuntimeException: can not run elasticsearch as root

提示的很明显,es不能使用root用户启动,此刻本人的内心在呐喊:"瓦特?",呐喊完毕后,还是要屈服于它,开始创建es启动用户elasticsearch:

# groupadd elasticsearch

# useradd -g elasticsearch -d /usr/local/elasticsearch -m -n elasticsearch

# ./elasticsearch

再次启动将会遇到各种账号权限问题,此时需要给用户elasticsearch分配es的权限:

切换到root账号执行以下命令,需要切换到具有管理员权限的用户下,当然也可以分配用户elasticsearch为管理员以及免密码等配置(具体配置自行百度)

# chown -R elasticsearch:elasticsearch /opt/apps/elasticsearch-6.4.0
# chown -R elasticsearch:elasticsearch /var/log/es
# chown -R elasticsearch:elasticsearch /data/es/data
# chown -R elasticsearch:elasticsearch /usr/local/elasticsearch

权限分配完毕后,切换到elasticsearch用户下继续执行启动命令,查看es日志,就会发现新的错误提示:  max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

此错误意思也很明显es启动进程要求文件描述符最小为65536, 但是目前系统配置的最大为4096,继续填坑

切换到root用户,修改elasticsearch文件描述符,第一列的elasticsearch是指的启动es的用户

#  vim /etc/security/limits.conf

在文件末尾添加:
elasticsearch hard nofile 65536
elasticsearch soft nofile 65536

切换到用户elasticsearch继续启动,查看es日志会发现新的错误: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

错误的意思是es启动内存权限最低 262144,继续填坑, 切换到root用户,修改配置:

# vim /etc/sysctl.conf

在最后一行添加如下内容:
vm.max_map_count=262144 # sysctl -p
可以查看到如下内容:
vm.max_map_count=262144

ok,切换到elasticsearch用户,继续执行启动命令,查看es日志,就可以如下内容:

以上日志无任何错误,通过浏览器访问: http://172.16.0.1:9200 ,可以看到下图内容:

再次就说明es正式启动完成,可以正常使用了,如果url无法访问需要检查服务器防火墙端口是否已经开放

centos7 防火墙使用的firewall,基于本文开放端口方式为,切换到root用户,执行以下命令:

# firewall-cmd --zone=public --add-port=9200/tcp --permanent
# firewall-cmd --zone=public --add-port=9300/tcp --permanent
# firewall-cmd --reload

centos 7( linux )下搭建elasticsearch踩坑记的更多相关文章

  1. CentOS 7.4 下搭建 Elasticsearch 6.3 搜索群集

    上个月 13 号,Elasticsearch 6.3 如约而至,该版本和以往版本相比,新增了很多新功能,其中最令人瞩目的莫过于集成了 X-Pack 模块.而在最新的 X-Pack 中 Elastics ...

  2. linux下安装node踩坑总结

    1.在node官网下载linux二进制文件(确定文件的类型)本文以二进制文件为例 2.放入linux的对应目录下之后: tar -xvf node-v10.15.3-linux-x64.tar.xz ...

  3. Linux下pcstat安装踩坑教程

    首先安装golang 1.进入官方链接下载对应自己系统版本的Golang安装包:https://dl.google.com/go/go1.13.4.linux-amd64.tar.gz root@ub ...

  4. Linux系统搭建GitLab---阿里云Centos7搭建Gitlab踩坑

    一.简介 GitLab,是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目安装. 它拥有与GitHub类似的功能,能 ...

  5. MongoDB学习笔记—Linux下搭建MongoDB环境

    1.MongoDB简单说明 a MongoDB是由C++语言编写的一个基于分布式文件存储的开源数据库系统,它的目的在于为WEB应用提供可扩展的高性能数据存储解决方案. b MongoDB是一个介于关系 ...

  6. Linux下搭建个人网站

    前不久在阿里买了一个服务器,然后开始第一次尝试搭建自己的个人网站.前端采用了bootstrap框架,后端采用的是PHP,数据库使用的是Mysql.新手第一次在linux下搭建遇见很多问题,在这里分享一 ...

  7. 记录Linux下安装elasticSearch时遇到的一些错误

    记录Linux下安装elasticSearch时遇到的一些错误 http://blog.sina.com.cn/s/blog_c90ce4e001032f7w.html (2016-11-02 22: ...

  8. CentOS 6.2下搭建Web服务器

    1Centos 6.2下搭建web服务器 如今,Linux在Web应用越来越广,许多企业都采用Linux来搭建Web服务器,这样即节省了购买正版软件的费用,而且还能够提高服务器的安全性. 之前我们介绍 ...

  9. ubuntu 下安装docker 踩坑记录

    ubuntu 下安装docker 踩坑记录 # Setp : 移除旧版本Docker sudo apt-get remove docker docker-engine docker.io # Step ...

随机推荐

  1. easyMock本地化搭建

    为了更快捷的定义接口且mock接口数据,减轻前后端对接时的工作量,可以使用easyMock平台. 1. 使用 git clone 下载easy-mock项目 https://github.com/ea ...

  2. springboot自定义页面拦截

    项目结构图 页面拦截代码 @Configuration public class WebConfig implements WebMvcConfigurer { @Override public vo ...

  3. Java并发之多线程下竞态条件概念的理解

    一.简述 竞态条件(Race Condition):计算的正确性取决于多个线程的交替执行时序时,就会发生竞态条件. 二.常见竞态条件分析 最常见的竞态条件为 1.先检测后执行 执行依赖于检测的结果,而 ...

  4. [JS]截取字符,中英文都可以

    //截取字符,中英文都可以,hasDot=true 返回值的最后还可以添加3个点 function subString(str, len, hasDot) { var newLength = 0; v ...

  5. AQS1---走向稳定态

    AQS的思想(稳定思想):即使确定了正常节点,这个节点也可能下一秒异常,即使找到了正常节点,这个节点可能只是异常status=0/-1的节点,这些都不要紧,都只是在自己旋转‘生命周期’里面和自己所看到 ...

  6. AKKA事件机制

    AKKA Event Bus 事件机制就用于当前运行环境,与集群环境不同,详细见AKKA 集群中的发布与订阅Distributed Publish Subscribe in Cluster 简单实现示 ...

  7. Lab_1:练习2——使用qemu执行并调试lab1中的软件

    一.实验内容 为了熟悉使用qemu和gdb进行的调试工作,我们进行如下的小练习: (一)从CPU加电后执行的第一条指令开始,单步跟踪BIOS的执行. (二)在初始化位置0x7c00设置实地址断点,测试 ...

  8. 责任链(ChainOfResponsibility)模式

    在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出请求的客户端并不知道链上的哪一个对象,这使得系统可以在不影响客户端的 ...

  9. 关于Java单例模式中双重校验锁的实现目的及原理

    开始复习设计模式,一开始理解单例模式中的双重校验锁卡住了,想通了后就自己做了段思维导图来帮助自己理解. 其实理解下来并不难,但还是记录下来帮助自己回忆和借机试试养成写博客的习惯~ public cla ...

  10. C语言注释风格

    注释风格 一.前言 注释是源码程序中非常重要的一部分,一般情况下,源程序有效注释量必须在20%以上. 注释的原则是有助于对程序的阅读理解,所以注释语言必须准确.易懂.简洁,注释不宜太多也不能太少,注释 ...