美文网首页ELK stackelasticsearchELK集锦
记录 Elastic Stack 的升级过程(一)

记录 Elastic Stack 的升级过程(一)

作者: 宅楠军 | 来源:发表于2018-02-13 13:42 被阅读63次

    一、背景

    公司生产环境的ELK集群上线于2016年10月,当时使用的稳定版本如下:

    Elasticsearch  2.3.4
    Logstash 2.3.4-1 
    Filebeat 2.3.4
    Kibana 4.5.3-1
    

    可以看到,上面虽然都同属于Elastic公司的开源产品,但版本号较为混乱。于是Elastic公司在主版本2之后,统一了Elastic Stack所有的产品版本号,直接跳到5。并且,5版本相较于2版本,有了较大幅度的优化和更新。

    截止本文完成时,Elastic Stack的最新稳定版本刚刚更新至6.2.1。考虑到产品稳定性和升级难度,我们决定将整个ELK集群统一升级至次新版本5.6.7,该版本是5版本的最新稳定版本。

    本次升级首先在开发环境的ELK集群上操作。在升级的过程中,主要参考了Elastic Stack的官方文档,但是也踩到了很多文档中没有提到的坑。因此 ,我决定将这次的升级过程较为完整的记录下来,以备升级生产环境时使用。

    本次升级按照如下顺序:

    Elasticsearch
    Kibana 
    Logstash 
    Filebeat
    

    二、Elasticsearch

    Elasticsearch 升级主要参考:https://www.elastic.co/guide/en/elasticsearch/reference/5.6/rolling-upgrades.html#upgrade-node

    1. JDK版本要求

    Elasticsearch 5.6.7 要求JDK版本最低为1.8,而当前为1.7,故需要先升级JDK,步骤:

    下载JDK 1.8
    地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

    卸载旧JDK
    rpm -e jdk

    安装新JDK
    rpm -ivh XX.rpm

    修改环境变量
    修改/etc/profile中的路径为1.8的路径:

    image.png
    重启或执行source /etc/profile使之生效

    2. 升级前准备

    具体步骤如下:

    停止Logstash
    升级Elasticsearch前,先停止Logstash服务,对外不再接受Filebeat的日志(Filebeat服务无需关闭)。

    禁用集群的分片自动分配功能

    curl -XPUT http://IP:9200/_cluster/settings -d' 
    { 
    "transient" : { 
    "cluster.routing.allocation.enable" : "none" 
    } 
    }' 
    

    同步数据
    curl -XPOST http://IP:9200/_flush/synced

    关闭所有节点的服务
    service elasticsearch stop

    升级Elasticsearch

    注意,这里使用rpm安装时,不要使用-Uvh选项升级,而是先卸载旧的版本,再使用-ivh安装。另外,旧的配置文件不建议继续使用,而是将所配置内容替换到新版的配置文件中,除了个别配置外大部分仍然兼容。

    对每一个Elasticsearch节点, 我们都要执行如下操作:
    卸载旧版本
    rpm -e elasticsearch
    注意,卸载后,旧的配置文件会以rpmsave后缀保留。

    安装新版本
    rpm -ivh XX.rpm

    卸载所有插件
    进入/usr/share/elasticsearch目录,执行bin/elasticsearch-plugin list列出所有插件,然后执行 bin/elasticsearch-plugin remove xxx 卸载对应的插件即可。

    禁用ES_HEAP_SIZE配置
    Elasticsearch 2.4中的内存调优参数ES_HEAP_SIZE现已不再支持,即配置文件/etc/sysconfig/elasticsearch中的ES_HEAP_SIZE配置,已经挪至/etc/sysconfig/jvm.options中。具体请参考:
    https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html
    https://www.elastic.co/guide/en/elasticsearch/reference/current/jvm-options.html

    删除配置bootstrap.mlockall
    配置文件/etc/elasticsearch/elasticsearch.yml中,配置bootstrap.mlockall : true在新版中已不再被支持,需要删除,否则会出现如下错误:

    image.png

    启动Elasticsearch
    service elasticsearch start

    开启集群的分片自动分配功能

    curl -XPUT http://IP:9200/_cluster/settings -d' 
    { 
    "transient" : { 
    "cluster.routing.allocation.enable" : "all" 
    } 
    }' 
    

    等待集群恢复完毕
    恢复完毕后,执行curl 'IP:9200/_cat/health?v',如果显示状态为green,表示恢复正常,升级成功:

    image.png

    启动Elasticsearch时遇到的问题

    升级Elasticsearch后,启动时可能会出现一些问题,包括:

    node.lock错误

    启动失败,日志中出现如下错误:


    image.png

    该错误是由于elasticsearch使用到的相关路径的权限有问题,执行:chown -R elasticsearch:root path,将日志路径、数据文件路径、配置路径都进行权限设置。

    bootstrap checks错误

    启动失败,执行service elasticsearch status出现elasticsearch dead but subsys locked, 并且日志中出现如下错误:

    image.png 或
    image.png

    上面的错误,是因为有些必要的配置没有通过Elasticsearch的检查,我们首先保证启用如下配置:

    max file descriptors
    修改/etc/security/limits.conf,如下:

    image.png

    max number of threads
    修改/etc/security/limits.d/90-nproc.conf* soft nproc 1024* soft nproc 2048

    memory locking
    /etc/elasticseach/elasticsearch.yml中,添加配置 bootstrap.system_call_filter=false
    最后,确保/etc/sysconfig/elasticsearch中启用如下三个配置:

    image.png

    三、Kibana

    Kibana5 已不再兼容Elasticsearch 2。因此,升级Elasticsearch 后,必须也要升级Kibana。

    升级Kibana

    具体步骤如下:

    • 停止Kibana
      service kibana stop

    • 卸载旧版本
      rpm -e kibana

    • 安装新版本
      rpm -ivh XX.rpm

    • 升级配置
      手动将旧的配置文件中的配置,替换到新版配置文件中的对应条目中,但注意要确定这些配置在新版本中能否兼容。

    • 启动Kibana
      service kibana start

    注意事项

    升级过程中,有如下几点需要注意:

    [root@elk kibana]# adduser kibana
    [root@elk kibana]# chown -R kibana:kibana /opt/kibana/optimize
    [root@elk kibana]# service kibana start
    

    启动Kibana时遇到的问题

    依次升级完Elasticsearch和Kibana后,查看Kibana,可能会出现如下错误:


    image.png

    解决办法可以参考https://github.com/elastic/kibana/issues/9888,执行curl -XDELETE http://ip:port/.kibana删除以前创建的Kibana索引,然后重启Kibana。

    四、Logstash

    Logstash的升级主要参考:https://www.elastic.co/guide/en/logstash/5.6/upgrading-logstash-5.0.html

    升级Logstash

    开发环境部署了两套Logstash作为负载均衡,我们需要依次进行升级:

    • 升级JDK至1.8
      同Elasticsearch,Logstash也需要JDK1.8,升级方法参考Elasticsearch。

    • 卸载旧版本
      rpm -e logstash

    • 安装新版本
      rpm -ivh XX.rpm

    配置Logstash

    安装完毕后,可以发现,Logstash的配置目录中有些变化,多了jvm.optionslog4j2.propertieslogstash.ymlstartip.options

    image.png

    我们可以按需修改logstash.yml中的日志和数据路径:

    image.png
    image.png

    注意,这些路径需要提前建立好,并执行chown -R logstash:root path授予logstash:root权限。

    启动Logstash

    一定要注意,新版的Logstash不再支持service启动方式,需要使用sudo initctl start logstash,具体参考:https://www.elastic.co/guide/en/logstash/6.2/running-logstash.html

    另外,新版Logstash的conf配置中,也不再支持workers这个参数设置,需要删掉,否则会出现如下错误:

    image.png

    Logstash成功启动后,若Filebeat上传了新的日志,就可以在新版的Kibana中查询到。

    五、Filebeat

    由于某些原因,Filebeat 在2017已经由2.3.4升级到了的5.0.0。因此,本次属于次版本升级,较为方便。Filebeat的升级主要参考:https://www.elastic.co/guide/en/beats/libbeat/5.6/upgrading-minor-versions.html

    运行rpm -Uvh XX.rpm进行升级,然后重启Filebeat即可。另外,由于Filebeat服务部署在了很多节点上,一个个升级非常麻烦,所以可以利用Fabric或Ansible等工具进行远程批量的升级。

    六、总结

    除了上面提到的一些问题,可能还有很多坑暂时没有发现,需要一步一步填。另外,ELK集群的4个重要组件升级完毕后,还有一些辅助的组件或插件也需要升级,如Elasticsearch的管理工具Curator、Kopf等,我将在下一篇文章中进行阐述。

    欢迎关注本人微信公众号:


    爱你之心.jpg

    相关文章

      网友评论

        本文标题:记录 Elastic Stack 的升级过程(一)

        本文链接:https://www.haomeiwen.com/subject/vkhjtftx.html