Ubuntu下Elasticsearch 2.1集群部署过程与遇到的问题及解决方法(开机自启动、root用户启动)

SEO:ES 2.0 2.1 Elastic Elasticsearch Linux Ubuntu root start stop 开机启动 开机自启动  安装 部署 使用 脑裂 无法 不能 发现 集群 节点

(本文适合有一定Linux基础的读者阅读。由于几乎是按流水账过程记录,而不是教程,建议操作之前读完一遍)

本人在部署ES2.1集群时,遇到了诸多问题,花了很大功夫,才解决,特在此记录解决过程及方法,希望帮到有需要的人。

据使用者的讨论,ES在2.0版本之后发生了很大变化,因此网上的一些资料已经不再适用,在查阅资料时需要根据版本判断,灵活变通方法。

操作系统:Ubuntu 14.04.1 64位

jdk:1.8.0_20 64位

Elasticsearch 2.1

ES部署步骤:
(1)下载目前(2015年12月18日)最新版的ES 2.1的tar.gz包,解压,放至wsn用户目录,修改config\elasticsearch.yml配置文件,添加(或对已有的但被注释掉的语句,取消注释并修改)以下语句:

cluster.name: groupname(设定的集群名称)
node.name: node_10.10.2.145(设定的当前节点名称)
network.host: 10.10.2.145(可以理解为监听/绑定的IP,本人设置为本机在局域网中的IP,尝试过如果设置127.0.0.1,之后在本机可以访问ES但在局域网中不能访问)
index.number_of_shards: 9(分片数量)
http.max_content_length: 2000mb(使用中发现,如果使用默认值,使用curl post插入300M以上的txt时会报错)
http.compression: true

【注意】每行语句前不能有空格,冒号后必须有一个空格,否则可能启动报错

【注意】可使用 bin/elasticsearch 启动,此时不是服务形式。root用户不能以此方式启动,否则会报错
其中node.name network.host需要根据每台机器的IP等修改(本人是在一台服务器部署好之后将该服务器复制为3台,复制后需要根据机器修改部分配置)

(2)(也可以不进行此步骤,详见下)将elasticsearch添加入系统服务service
/etc/init.d/ 下建立软连接,操作步骤为:

使用cd命令进入/etc/init.d/ ,然后

ln -s /home/wsn/wshare/es/elasticsearch-2.1.0/bin/elasticsearch elasticsearch
sudo update-rc.d elasticsearch defaults 95 10 //按照官方说法,这是适用于Ubuntu的方法,猜测为加入服务,参考Running as a Service on Linux https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-service.html#using-systemd

加入服务后,经过测试,仍然无法使用start stop等命令,报错(如下图):

需使用service elasticsearch 启动服务,与直接使用bin/elasticsearch效果相同。

因此,本人决定不使用将其加入服务的方法(加入服务除了启动时输命令方便,别的好像没什么卵用),采用手动配置启动脚本与开机自启动方式,因此加入服务部分的操作(2)可不进行。

(3)配置开机自启动

【2016-5-26更新:发现root用户也可以启动ElasticSearch,方法是在启动时添加Des.insecure.allow.root参数,如下:

bin/elasticsearch -Des.insecure.allow.root=true(参考 How to run Elasticsearch 2.1.1 as root user in Linux machine - Stack Overflow http://stackoverflow.com/questions/34920801/how-to-run-elasticsearch-2-1-1-as-root-user-in-linux-machine)】

本人使用的Ubuntu中,语句放入/etc/init.d/rc.local文件中,即可在开机时运行。
/etc/init.d/rc.local 文件,最后一行后加入:

sh /home/wsn/wshare/auto_start.sh

便能够开机启动auto_start.sh

在/home/wsn/wshare/auto_start.sh中写入:

sh /home/wsn/wshare/es/elasticsearch-2.1.0/start_es.sh

便能够开机时执行start_es.sh。

start_es.sh是启动Elasticsearch并后台运行的脚本,内容为:

su -c “/home/wsn/wshare/es/elasticsearch-2.1.0/bin/elasticsearch &” – wsn
# ↑ 临时切换为wsn用户执行-c后的命令,执行后切换为原用户

(wsn用户是Ubuntu系统中建立的另一个用户)

即临时切换为wsn用户并执行”-c”后的命令语句,因此root用户可使用此脚本启动ES(注意第一行后可能需要添加空格,否则有报错)。

通过以上操作,部署ES和开机自启动便完成了。同时,root用户也可使用如上的start_es.sh脚本启动ES,一定程度地避免了root不能直接启动ES带来的不便。

停止ES使用查找进程并kill的方法(ps -ef|grep elastic),尚未找到更好的方法。但使用kill进程方法停止时,ES能感知到并写入ES关闭的日志,因此推测kill进程时ES可以正常退出而非被强制结束。

(4)其它注意事项
①期间遇到的问题:开机启动无法成功,并且看不到脚本执行过程的输出,因此将输出重定向到/tmp/debug3.log(tmp目录下不易产生权限问题),即/etc/init.d/rc.local中加入的语句改为

sh /home/wsn/wshare/auto_start.sh < /tmp/debug3.log

之后,如果开机时执行上述命令有报错,便可以在/tmp/debug3.log文件中看到运行过程的输出。

②另外,jdk配置需要位于/etc/profile文件中,对所有用户都生效。配置方法为,在/etc/profile文件末尾添加

export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_20
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

(具体的JAVA_HOME路径需要按实际情况填写)

如果配置jdk的方法是将上述语句添加到针对某个用户的~/.bashrc(使用vim ~/.bashrc编辑添加),则ES无法开机启动,错误为启动时没有JAVA环境变量。

③ES启动时有关于log4j的日志文件权限报错,因此将logs文件夹及其子目录权限设置为777(chmod -R 777 logs 针对所有人都可读可写可执行,是个懒方法),启动时不再有报错。

④一定程度地防止脑裂(无法发现部分节点)问题,因此ES配置文件中加入:

discovery.zen.minimum_master_nodes: 2
discovery.zen.ping_timeout: 10s

即最少需要2个节点才会选举master节点(即产生集群)。在配置文件的注释中看到官方的建议是,数字设置为【节点个数/2+1】,向上取整,本人的是3个节点,因此设置为2;

发现集群的超时时间为10s。

配置启用多播discovery.zen.ping.multicast.enabled: true,但无效,无法发现节点,因此使用单播,添加配置

discovery.zen.ping.unicast.hosts: [“10.10.2.143″, “10.10.2.144”, “10.10.2.145”, “10.10.2.10”]

如此配置之后,该节点便会访问列表中的几个IP,找到这几个IP的机器中的节点,组成集群。

(后查证为ES2.0之后版本已删除了多播功能,如果使用需要安装multicast插件)

本人使用ES也是新手,只是总结了一些自己的经验,文中如有错误、不准确、遗漏之处,希望各位不吝赐教指出,或者解答本人遇到的一些疑虑,以及共同讨论探讨,谢谢!

转载时请注明出处:

Ubuntu下Elasticsearch 2.1集群部署过程与遇到的问题及解决方法(开机自启动、root用户启动) - 张冬 - 博客园

elasticsearch2.1部署相关推荐

  1. elasticsearch2.3安装以及集群部署

    摘要: elasticsearch安装以及集群部署 一.下载 1.1安装elasticsearch-2.3.3要求是安装官方新版的Java,必须是JDK 1.7以上,1.7以下执行的时候会报以下错误. ...

  2. ElasticSearch2.4.6的安装部署以及集群部署、ElasticSearch-head等插件的安装

    2019独角兽企业重金招聘Python工程师标准>>> 一.安装 在安装之前,请先设置jdk环境,到oracle官网下载相应的jdk版本,我这边使用的是jdk1.7的版本 vim / ...

  3. 日志分析平台ELK部署初学

    1)ELK介绍 ELK官方网站:https://www.elastic.co/products elk-docker 官网:http://elk-docker.readthedocs.org/#ins ...

  4. ELK实时日志分析平台环境部署--完整记录

    在日常运维工作中,对于系统和业务日志的处理尤为重要.今天,在这里分享一下自己部署的ELK(+Redis)-开源实时日志分析平台的记录过程(仅依据本人的实际操作为例说明,如有误述,敬请指出)~ ==== ...

  5. Docker部署Elasticsearch集群

    来源:https://www.cnblogs.com/lixuebin/p/10814052.html 参考文档: https://hub.docker.com/r/library/elasticse ...

  6. ELKstack-Elasticsearch各类安装部署方法

    手动安装部署Elasticsearch 开篇 开篇闲话,如果是新人在接触ELKstack什么都不懂的情况下,可以先看看各位前人写的关于ELKstack的博客,如何对ELKstack部署安装及使用,但是 ...

  7. elasticsearch 部署

    环境 ubuntu 12.04 64位 桌面版 jdk 1.7 elasticsearch 2.3.4 伪集群部署 elasticsearch 主目录在 /home/sdbadmin/es-clute ...

  8. Logstash+Kibana+多ElasticSearch集群部署

    ELK原理与介绍   ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件.新增了一个FileBeat,它是一个轻量级的日志收集 ...

  9. K linux 部署手机 centos6.5

    参考文献:https://my.oschina.net/itblog/blog/547250#OSC_h4_3 ELK平台搭建 系统环境 System: Centos release 6.7 (Fin ...

最新文章

  1. [转载]Android开发常用调试技术记录
  2. python装饰器作用-Python 装饰器的作用
  3. linux zip打包_还在百度Linux命令?推荐一套我用起来特顺手的命令!(JAVA)
  4. 华为升级鸿蒙体验,华为鸿蒙 HarmonyOS 2.0 发布,教你如何升级体验
  5. python导入自定义文件_python引入导入自定义模块和外部文件的实例
  6. python中的元组操作
  7. 互联网晚报 | 2月28日 星期一 |​工信部:最大限度降低缺芯影响;​工信部:今年新建5G基建60万个...
  8. 关于pchunter1.57x64过期使用
  9. 赛锐信息:SAP ABAP 常量和字面量
  10. apimodel 可以重复吗_Web API是否需要有ViewModels层类?
  11. 半年全球网络安全入侵事件近千起,超19亿数据受影响
  12. SAP系统的模块分类
  13. 多播报文的发送和接收
  14. 使用Cron和PHP检测网页是否被篡改
  15. QTreeView 详解 并设置样式表
  16. Android混淆配置(含androidx、kotlin)
  17. 对时间序列做分段相关性分析(matlab代码)
  18. Android实现电子邮箱客户端
  19. UI设计必掌握的软件之一:Axure!
  20. deepin系统维护(系统扩容)deepin live

热门文章

  1. FastReport资讯:Blazor中的报告和PDF文档
  2. 如何优雅的用Axure绘制高保真原型心得分享
  3. 外网内网同时使用--设置如下
  4. linux查看服务器带宽
  5. 计算机图形学消隐的概念
  6. 小程序短视频项目———视频展示页面开发
  7. 量子计算为算法指数加速:Shor‘s algorithm
  8. 【中科院】分子生物学-朱玉贤第四版-笔记-第7-8讲 翻译
  9. ArrayList 和 Vector 的区别
  10. 计算机毕业设计ssm儿童成长记录与分享系统cc35g系统+程序+源码+lw+远程部署