架构是数据被logstash打到kafka,然后消费端从kafka通过hangout消费。最后到es来索引。

原理网上比较多,就不细说,现在主要来讲实战。

一、ES集群部署优化之道

部署准备:

1.修改文件limit

#!/bin/bash

max=2500000

#check permission
uid=$(id -u)
if [[ -z $uid ]];then
echo "please use root to run this"
exit 201
fi
if [[ $uid -ne 0 ]];then
echo "please use root to run this"
exit 201
fi

#check value
#linux default: 1024 * 1024 = 1048576
if [[ $max -lt 1048576 ]];then
echo "max value must >= 1048576"
exit 202
fi

#set temporary
sysctl -w fs.nr_open=$max
if [[ $? -ne 0 ]];then
echo "sysctl set failed"
exit 1
fi

#set forever
grep -P "^\s*fs.nr_open" /etc/sysctl.conf &>/dev/null
if [[ $? -eq 0 ]];then
#update
sed -i "s/^\s*fs.nr_open.*/fs.nr_open = $max /g" /etc/sysctl.conf
if [[ $? -ne 0 ]];then
echo "update value failed"
exit 2
fi
else
#add 
echo "fs.nr_open = $max" >> /etc/sysctl.conf
if [[ $? -ne 0 ]];then
echo "add value failed"
exit 3
fi
fi
sed -i "s/.*-.*nofile.*/\* - nofile $max/g" /etc/security/limits.conf

2.修改内存lock

# allow user 'kafka' mlockall
kafka soft memlock unlimited
kafka hard memlock unlimited

添加到/etc/security/limits.conf

3.然后将es在其中的部署目录打包。

tar cf elast.tar /data/apps/elasticsearch-2.2.0

4.将包传到任意需要部署机器。

然后解压缩

tar xf elast.tar

5.修改配置文件

/data/apps/elasticsearch-2.2.0/config/elasticsearch.yml

cluster.name: 修改为同一集群代号

node.name: 修改为本机hostname

path.data: 修改为本机数据目录,用逗号分隔

bootstrap.mlockall: true 优化es内存设置,起来lock住内存

network.host: 修改为本机ip

discovery.zen.ping.unicast.hosts:修改为集群所有的ip列表,利于发现其他节点

以下为优化内存,防止gc和加速recovery的设置,默认加入即可。

indices.recovery.concurrent_streams: 24
indices.recovery.concurrent_small_file_streams: 12
indices.recovery.max_bytes_per_sec: 200mb

indices.fielddata.cache.size: 20%
indices.breaker.fielddata.limit: 20%
indices.breaker.request.limit: 20%
indices.breaker.total.limit: 40%

6.启动es,采用如下方式,注意内存不要超过32G。

export JAVA_HOME=/data/apps/jdk1.8.0_65
export ES_HEAP_SIZE=28g
cd /data/apps/elasticsearch-2.1.1/bin && ./elasticsearch -d --Xmx 28g --Xms 28g

二、KAFKA部署信息,与相关TOPIC创建

采用直接解压部署到

/data/app/kafka_2.10-0.9.0.1/

文件配置采用默认kafka配置。

/data/app/kafka_2.10-0.9.0.1/config/server.properties

这里需要修改下brok.id

broker.id= 每台kafka都有一个唯一id

启动方式是:

sudo -u kafka nohup bin/kafka-server-start.sh config/server.properties &

三、logstash部署方式介绍

由于每台日志机器需要采集日志到kafka队列。

所以采取每台日志机部署logstash方式。现在kss/ks3机器上都已经部署logstash.

部署logstash需要将该目录打包,然后传送到任一采集机,然后解压,修改如下启动脚本后启动即可。

bin/logstash -e 'input{file{ type=>".23.8" path=>"/data/logs/nginx/access.log"}}output{kafka{ bootstrap_servers => "xxx.68:10002" topic_id => "xxxslog" }}'

#type为标志本机ip

#path为日志路径

#output是kafka的地址列表,上表是武清机房的kafka地址

#topic_id是对应的topic

修改完毕的命令行可以直接以后台方式运行。这样就启动了日志采集进程。

四、日志消费程序部署与使用介绍

日志消费程序采用ctrip开源的hangout,具体git地址看这里。

https://github.com/childe/hangout

用ks3的具体配置为例:

inputs: #input为kafka
- Kafka:
codec: json #json格式
topic: 
kxxx3log: 2

########################################################

从Kafka读数据. 下面示例是说, 开2个线程取app这个topic的数据, 编码格式为plain纯文本. consumer_settings中的参数, 参考[kafka]官方文档](http://kafka.apache.org/documentation.html#consumerconfigs), 所有参数都可以在这里配置. 比较重要的是group.id, zookeeper.connect这两个, 一定要有. zookeeper.connect的格式为 hostname1:port1,hostname2:port2,hostname3:port3.

########################################################
consumer_settings:
group.id: hangout
zookeeper.connect: 11.4.22.15:2181
auto.commit.interval.ms: "5000"
socket.receive.buffer.bytes: "1048576"
fetch.message.max.bytes: "1048576"
num.consumer.fetchers: "4"
filters:
- Grok:
src: message
match:
- '^\"(?<upstream_http_x_kss_Bucketowner>.+)\" \"(?<upstream_http_x_kss_Bucketname>.+)\" \"\[(?<time_local>.+)\]\" \"(?<remote_addr>\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})\" \"(?<upstrea
m_http_x_kss_Requester>.+)\" \"(?<upstream_http_x_kss_request_id>.+)\" \"(?<upstream_http_x_kss_Op>.+)\" \"(?<upstream_http_x_kss_Key>.+)\" \"(?<request>.+)\" \"(?<status>.+)\" \"(?<upstrea
m_http_x_kss_ErrCode>.+)\" \"(?<content_length>.+)\" \"(?<body_bytes_sent>.+)\" \"(?<upstream_http_x_kss_ObjSize>.+)\" \"(?<request_time>.+)\" \"(?<upstream_response_time>.+)\" \"(?<http_re
ferer>.+)\" \"(?<http_user_agent>.+)\" \"(?<upstream_addr>.+)\" \"(?<http_kscdn>.+)\"$'
remove_fields: ['path']
- Json:
field: message # required
- Gsub:
fields: #由于以下字段会有-,所以要替换为0,免得出错
upstream_http_x_kss_ObjSize: ['-','0']
body_bytes_sent: ['-','0']
content_length: ['-','0']
upstream_response_time: ['-','0.00']
request_time: ['-','0.00']
outputs: #向es输出
- Elasticsearch:
cluster: xxx-ecs #es的集群名
hosts: #杭州es host
- 10.4.69.70:9300
- 10.4.71.100:9300
- 10.4.71.103:9300
- 10.4.71.102:9300
index: 'hangout-ks3-%{+YYYYMMdd}' #日志格式
index_type: logs # default logs
bulk_actions: 20000 #default 20000
bulk_size: 30 # default 15 MB
flush_interval: 10 # default 10 seconds
concurrent_requests: 0 # default 0, concurrent_requests设置成大于0的数, 意思着多线程处理, 以我应用的经验,还有是一定OOM风险的,强烈建议设置为0
timezone: "Asia/Shanghai" # defaut UTC 时区. 只用于生成索引名字的字符串格式化

关注微信公众号,获取更多精彩:

QPS达到30万的elasticsearch架设之道相关推荐

  1. 腾讯云推出首款自研服务器星星海;苹果新款Mac Pro整套配齐超30万;Fedora 31稳定版发布|极客头条...

    快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有 ...

  2. 京东热key探测框架本地压测数据记录,单机(8核)QPS约16万/s,可水平扩展

    继上一次全链路压测时,热key框架由于Java低版本(1.8.0_131之前的1.8版本)获取docker内cpu核数有问题,实则获取的是宿主机的核数,造成线程数量过多,压测瞬间cpu达到100%,问 ...

  3. ElasticSearch快速学习---30分钟入门ElasticSearch

    ElasticSearch快速学习 ElasticSearch原理,30分钟入门ElasticSearch 目录 1 解析es的分布式架构 2 分片和副本机制  3 单节点环境下创建索引分析 4 两个 ...

  4. 10月30日科技资讯|腾讯云推出首款自研服务器星星海;苹果新款Mac Pro整套配齐超30万;Fedora 31稳定版发布|极客头条

    「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有料的新闻资讯,让所有技术人,时刻紧跟业界潮流. 整理 | 郭 ...

  5. 恶意软件每天至少30万个变种 杀毒软件捉襟见肘 来看4种恶意软件反查杀技术...

    杀毒(AV)和反恶意软件产品是最古老.最成熟的网络攻击防护,但似乎每天都有新的恶意软件样本能够绕过传统的杀毒软件的恶意软件查杀方案.在 WannaCry 出现当日,即便是顶级的杀毒引擎,大多数也都错过 ...

  6. 行业新风向!AI人才缺口30万,单个项目最高补贴1000万元!

    最近,程序员届有一个重大好消息,可能很多人还不知道,那就是:国内某些城市已经开始程序员人才补贴了! 对于人工智能公司的项目开发.人才引进.科技研发,最高按照国拨经费的30%给予配套支持,单个项目最高补 ...

  7. 还缺30万人!程序员2020年要过好日子了……

    最近,程序员届有一个重大好消息,可能很多人还不知道,那就是:国内某些城市已经开始程序员人才补贴了! 对于人工智能公司的项目开发.人才引进.科技研发,最高按照国拨经费的30%给予配套支持,单个项目最高补 ...

  8. AI一分钟 | 谷歌CEO承诺在中国组建更大团队;苹果与清华大学成立研究中心,并将帮助30万名贫困学生

    2018 区块链技术及应用峰会(BTA)·中国 倒计时 4 天 2018,想要follow最火的区块链技术?你还差一场严谨纯粹的技术交流会--2018区块链技术及应用峰会(BTA)·中国将于2018年 ...

  9. 冠军奖30万!刘强东搞了个“猪脸识别”比赛,中美两地同时启动(附比赛详细日程及赛题说明)

    编辑 | Katerina Donna 润色 | 鸽子 11月6日,由京东金融与红杉资本联合主办的首届"JDD-2017京东金融全球数据探索者大会"在751大罐举行,同时,大会宣布 ...

最新文章

  1. .Net Cache
  2. html 改变文本框字体颜色,CSS更改文本框的字体颜色
  3. 实验3.2 定义一个简单的Computer类
  4. 第一天学习笔记之数组(冒泡排序+二分查找)
  5. Android学习笔记之Broadcast Receiver
  6. ExtJS 4应用架构设计
  7. 行业案例 | 悬镜DevSecOps智适应威胁管理解决方案获评信通院“2021云安全守卫者计划优秀案例”
  8. 到底什么叫作数据架构?
  9. 计算机 在电厂的应用,计算机自动控制系统在火电厂中的应用
  10. Linux基本操作和基础命令(Linux修改IP地址以及修改网卡地址)
  11. android 大文件查找,大文件查找软件(WizTree)
  12. 地图比例尺、瓦片切片方案、EPSG
  13. XJOI 3709 测测你的RP
  14. Xp计算机同步时间,windows xp时间不准不能自动同步的解决办法
  15. android4.4刷机教程,vivo Xshot升级 Android 4.4刷机教程
  16. 超炫酷的Bat脚本入门教程
  17. 微信小程序父子组件相互通信
  18. spark sql uv_使用Spark Streaming SQL进行PV/UV统计-阿里云开发者社区
  19. 百度uedit禁止转义及关于模板语言 Mustache
  20. 梅卡尔大学-IOT-前端笔记

热门文章

  1. python面试题大全 以及 vue面试题(必看!!!)
  2. 为什么生命科学企业都在陆续上云?
  3. 《Primes is in P》学习笔记
  4. YOLOV3解读(3)
  5. DBCP C3PO Druid三种数据库连接
  6. 概率图模型--最大后验概率状态推理MAP
  7. 4G图传移动视频取证-可视安全生产监管-常见问题解答FAQ
  8. handle与HWND的差别
  9. Halide学习笔记----Halide tutorial源码阅读2
  10. 微信小程序: input输入框placeholder样式的修改