首页 > 代码库 > ELK之ES2.4.1双实例平滑升级至5.2.1踩坑并supervisor管理记

ELK之ES2.4.1双实例平滑升级至5.2.1踩坑并supervisor管理记

  ES老集群用的2.4.1版本,跑的比较好就一直没动,最近看资料ES5.X已经稳定,并且性能有较大提升,心里就发痒了,但由于业务要保持高可以用的属性,就得想一个平滑升级的方案,最后想到了多实例过度的办法,5.X版本网上介绍配置变化较大,也做好了踩坑准备,确定好要升级后,立刻动手。

一、对应升级改造方案

  使用端口9220和9330 安装并配置好新的ES5.2.1实例——>关掉logstash并将ES2.4.1实例堆栈调小重启(kafka保留3个小时日志所以不会丢失)——>启动ES5.2.1并将logstash开启指向ES5.2.1——>安装新版kibana实例做好指向,老数据用http://host/old访问——>ES5.2.1配置调优。

 

二、升级后统一用supervisord-monitor管理

github:https://github.com/mlazarov/supervisord-monitor 

技术分享


三、周末跑了一天ES的cpu、IO和thread_pool的监控数据如下(无search)

技术分享

 

技术分享

 

从监控数据看最高的活跃进程数还是bulk的批量处理操作,如果不调优,直接会block。

四、升级过程——编写了ES5.2.1的安装脚本如下

#/bin/sh
id elasticsearch || useradd elasticsearch -s /sbin/nologin   #添加用户
grep "* - nofile 512000" /etc/security/limits.conf || echo  "* - nofile 512000"  >> /etc/security/limits.conf  #修改文件描述符数量
grep "elasticsearch - nproc unlimited" /etc/security/limits.conf || echo "elasticsearch - nproc unlimited"   >> /etc/security/limits.conf  #修改最大打开进程数数量
grep "fs.file-max = 1024000" /etc/sysctl.conf || echo "fs.file-max = 1024000"  >> /etc/sysctl.conf  #修改系统文件描述符
grep "vm.max_map_count = 262144" /etc/sysctl.conf || echo "vm.max_map_count = 262144"  >>  /etc/sysctl.conf  #修改程序最大管理的vm
sysctl -p
cd /usr/local/src
[ ! -f /usr/local/src/elasticsearch-5.2.1.zip ] && wget 
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.2.1.zip
[ ! -d /usr/local/src/elasticsearch-5.2.1 ] && unzip elasticsearch-5.2.1.zip
mv elasticsearch-5.2.1 /usr/local/
chown -R elasticsearch:elasticsearch /usr/local/elasticsearch-5.2.1  #修改拥有者所有组
sed -i ‘s/-XX:+UseConcMarkSweepGC/-XX:+UseG1GC/‘ /usr/local/elasticsearch-5.2.1/config/jvm.options    #GC方式修改为G1
sed -i ‘s/-XX:CMSInitiatingOccupancyFraction=75/-XX:MaxGCPauseMillis=200/‘ /usr/local/elasticsearch-5.2.1/config/jvm.options
sed -i ‘s/-XX:+UseCMSInitiatingOccupancyOnly/#-XX:+UseCMSInitiatingOccupancyOnly/‘ /usr/local/elasticsearch-5.2.1/config/jvm.options

五、升级过程——配置文件的更新调优

   升级期间着实踩了不少坑,老版ES索引配置可以直接写到配置文件里,新版是不行的,必须使用api去设置,另外ES2.X版本的进程数调优,在ES5.X我发现调整与否没有影响。配置文件如下:

cluster.name: yz-5search
path.data:  /data1/LogData5/
path.logs:  /data1/LogData5/logs
bootstrap.memory_lock: false   #centos6内核不支持,必须要关闭
bootstrap.system_call_filter: false
network.host: 10.39.40.94
http.port: 9220
transport.tcp.port: 9330
discovery.zen.ping.unicast.hosts: ["10.39.40.94:9330","10.39.40.95:9330","10.39.40.96:9330","10.39.40.97:9330"]
discovery.zen.minimum_master_nodes: 2
http.cors.enabled: true
http.cors.allow-origin: "*"

   为了加快索引效率,对下面的参数写进了计划任务,并且1个小时运行一次,着重是索引刷新、副本数量、translog的数据平衡优化:

#!/bin/bash
DATE=`date +%Y.%m.%d.%I`
DATA2=`date +%Y.%m.%d -d‘-15 day‘`
curl -XDELETE "http://10.39.40.97:9220/logstash-*-${DATA2}*?pretty"
curl -XPUT ‘http://10.39.40.97:9220/_all/_settings?pretty‘ -d ‘{
  "index.refresh_interval" : "60s",    #刷新时间调整
  "index.number_of_replicas" : "0",    #复制分片数调整
  "index.translog.flush_threshold_size" : "1024m",     #translog调整的阀值设置为1024m
  "index.store.throttle.max_bytes_per_sec" : "500m"   #store的阀值设置为500m
}‘


   由于单个索引达到了35G甚至40G以上,于是在logstash层面对建索引数量进行修改,把每天12个索引修改为每天24个索引:

技术分享

logstash的修改如下:

index => "logstash-cms-front-nginx-%{+YYYY.MM.dd.hh}"  修改为
index => "logstash-cms-front-nginx-%{+YYYY.MM.dd.HH}"

备注:supervisor的安装

easy_install meld3
eays_install pip
easy_install supervisor


本文出自 “奔跑的linux” 博客,请务必保留此出处http://benpaozhe.blog.51cto.com/10239098/1901692

ELK之ES2.4.1双实例平滑升级至5.2.1踩坑并supervisor管理记