Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 733|回复: 0

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

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-4-27 14:49:13 | 显示全部楼层 |阅读模式

    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用户启动) - 张冬 - 博客园

    http://www.cnblogs.com/zhangdong92/p/5056344.html

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-16 06:38 , Processed in 0.061270 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表