阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

ELK之ES2.4.1双实例平滑升级至5.2.1问题解决及supervisor管理记

137次阅读
没有评论

共计 3917 个字符,预计需要花费 10 分钟才能阅读完成。

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 

ELK 之 ES2.4.1 双实例平滑升级至 5.2.1 问题解决及 supervisor 管理记

 

三、优化前后 ES 的 cpu、IO 和 thread_pool 的监控数据如下

优化前:

ELK 之 ES2.4.1 双实例平滑升级至 5.2.1 问题解决及 supervisor 管理记

 

ELK 之 ES2.4.1 双实例平滑升级至 5.2.1 问题解决及 supervisor 管理记

 

优化后:

ELK 之 ES2.4.1 双实例平滑升级至 5.2.1 问题解决及 supervisor 管理记

 

ELK 之 ES2.4.1 双实例平滑升级至 5.2.1 问题解决及 supervisor 管理记

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

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

  之前用的 rpm 包,后考虑直接使用 tar 包安装,对于需要系统做的调优操作,直接编写自动化安装脚本,一键将所有系统参数配置后,将环境搭建好。

#/bin/sh
#writer:gaolixu
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: "*"

为了加快索引效率,编写 index 的模板配置(index 配置不允许写到配置文件了),将参数 put 到 es 的里,当然模板也可以通过前端 logstash 指定(要改 logtash 觉得麻烦),template 脚本如下:

#/bin/sh
#writer:gaolixu
#index template
curl -XPUT 'http://10.39.40.94:9220/_template/cms_logs?pretty' -d '{
     "order": 6,                                    # 优先级
      "template""logstash-cms*",                  # 正则匹配索引
      "settings": {
             "index.refresh_interval" "60s"# 索引刷新时间
             "index.number_of_replicas" "0"# 副本数设置为 0
             "index.number_of_shards" "8",    # 分片数设置为 8,共 4 台服务器
             "index.translog.flush_threshold_size" "768m"#translog 触发 flush 的阀值
             "index.store.throttle.max_bytes_per_sec" "500m"# 存储的阀值
             "index.translog.durability""async",              # 设置 translog 异步刷新到硬盘,更注重性能
             "index.merge.policy.segments_per_tier""25"# 每一轮 merge 的 segment 的允许数量, 默认是 10
             "index.merge.policy.floor_segment""100mb"# 小于这个值的 segment 会四舍五入,防止很小的 segment 的频繁 flush
             "index.merge.scheduler.max_thread_count""1",     # 机械盘设置为 1
             "index.routing.allocation.total_shards_per_node""2"  # 每个节点上两个分片
      }
}'

备:如果是更改,将 PUT 改为 POST

日志保留 7 天,清除的脚本如下,写入计划任务:

#!/bin/bash
#writer:gaolixu
DATE=`date +%Y.%m.%d.%I`
DATA2=`date +%Y.%m.%d -d'-7 day'`
curl -XDELETE http://10.39.40.97:9220/logstash-*-${DATA2}*?pretty

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

ELK 之 ES2.4.1 双实例平滑升级至 5.2.1 问题解决及 supervisor 管理记

logstash 的修改如下:

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

备注:supervisor 的安装

easy_install meld3
easy_install pip
easy_install supervisor

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-03/142226.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-21发表,共计3917字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中