ElasticStack
2023-08-21 21:06:13 1 举报
AI智能生成
登录查看完整内容
123456789
作者其他创作
大纲/内容
1.应用解耦
2.异步提速
3.削峰填谷
优势
解决方案:部署高可用
1.可用性降低
数据容易丢失
2.复杂度提高
劣势
1.数据吞吐量高
2.系统支持高可用集群
数据的访问安全
数据的存储安全
3.数据安全性高
期望特点
优点
erlang语言不好定制
国内相关开发人员较少
缺点
小规模场景
应用场景
RabbitMQ
数据吞吐量高
高性能
高可用
功能较为全面
开源版功能较少
官方文档简单
客户端仅支持java
几乎全场景
RocketMQ
含集群高可用服务
维护较为复杂
数据均衡和迁移比较麻烦
Kafka
产品及选择
一对一的服务
点对点
一对多
消费者程序可以根据自身的硬件配置去broker消费
消费者需要长期执行一个进程来询问broker是否有数据
pull 拉取
无需客户端主动拉去数据,而是由服务端主动发送数据,典型的应用场景
broker推送数据给消费者是,可能因为消费者消费能力不足,直接导致客户端程序崩溃掉;
broker内部需要维护一个订阅者列表,当订阅者较多时,可能会很占用内存哟;
push 推送
发布/订阅模式
工作模式
MQ介绍
单点部署
集群部署
config/server.properties
指定kafka实例的唯一ID标识,必须是一个整数。
broker.id=
指定kafka存储数据的zookeeper集群地址
zookeeper.connect=
配置文件
kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties
启动
kafka-server-stop.sh
关闭
命令
部署
生产者
负责将数据写入到kafka集群
其状态不会用影响到kafka集群状态
kafka集群的客户端角色
producer
消费者
负载从kafka集群拉取数据
consumer
一个消费者组至少有一个消费者或多个消费者
消费者组
kafka的消费者是基于组来消费的。
同一个消费者组的消费者不能同时对同一个topic的partition的数据进行消费。
Consumer Group
producer 和 consumer
主题
topic
分区
逻辑名称
一个topic主题至少对应一个和多个分区
partition
副本数量
是topic和paritition的实际结晶
负责数据的存储
replica
topic,partition,replica
负责数据的读写
是kafka集群的主节点
leader
从节点
只负责从leader中同步数据
并不会被producer和consumer发现
follower
leader follower
是和leader副本数据相同的所有副本集合。
可以理解为该列表中所有副本数据是一样的。
ISR列表中的副本会优先被选举为leader
ISR
是和leader副本数据不相同的所有副本集合
OSR
是ISR+OSR=AR,代表的是所有副本。
AR
ISR OSR 和 AR
偏移量
用于表示数据的位置点,消费者可以记录offset来标识自己在某个分区中消费的位置点
offset
Log End Offset
表示一个分区数最后一个位置的offset。
LEO
hig Water,高水位线,
表示该ISR列表中最小的LEO
HW
offset,LEO,HW
常见术语
kafka-topics.sh --bootstrap-server
--create
参数
kafka-topics.sh --bootstrap-server + 集群名单 --create --topic + 主题名称
--partitions + 分片数
指定partition分区数
-replication-factor +副本数
创建topic时,副本数量不得大于存活的节点数
指定replica副本数
语法:
创建
参数: --list
kafka-topics.sh --bootstrap-server + 集群列表 --list
查看集群topic列表
参数: --describe
kafka-topics.sh --bootstrap-server + 集群列表 --describe
查看集群topic的详细信息
--describe --topic
kafka-topics.sh --bootstrap-server + 集群列表 --describe --topic + topic名称
查看指定topic的详细信息
查询
--alter
kafka-topics.sh --bootstrap-server + 集群列表 --topic + 指定主题 --alter +修改内容
1.修改分区数时,只能改大不能改小
2.修改副本数量,需要重新生成计划
参考连接:https://www.cnblogs.com/yinzhengjie/p/9808125.html
注意:
修改
--delete
kafka-topics.sh --bootstrap-server + 集群列表 --delete --topic + topic名称
删除
topic管理
kafka-console-producer.sh --bootstrap-server 10.0.0.92:9092 --topic linux87-001
kafka-console-consumer.sh --bootstrap-server 10.0.0.93:9092 --topic linux87-001
消费者从头开始读取数据
--from-beginning
生产者和消费者
kafka-consumer-groups.sh --bootstrap-server
--all-groups --list
查看消费者列表
--all-groups –describe
查看所有消费者组的详细信息
--describe --group + topic
查看指定消费者组的详细信息
查看
config/consumer.properties
group.id=(topic指定主题)
基于配置文件指定消费者组
kafka-console-consumer.sh --bootstrap-server 10.0.0.92:9092 --topic oldboyedu-linux87 --consumer-property group.id=linux87
基于命令行方式指定消费者组
所谓压力测试就是对一个集群的处理能力的上限做一个评估。为将来集群扩容提供有效的依据。
概述:
kafka集群压力测试
子主题
集群的基础应用
ElasticStack是elatic公司推出的一些列技术栈,早期有一个比较响亮的名字叫\"ELK\"用于日志采集系统,后续由于对该组件的扩充,引入很多新的组件,比如beats,xpack及云原生相关的组件,最终统称为elasticstack
概述
ELK架构
EFK架构
EFLK架构
ELFK架构升级版
架构
https://www.processon.com/diagraming/64d0e631470d721c4e47afaa
技术栈介绍
可通过官网下载:wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.5-x86_64.rpm
1.下载elasticsearch的rpm包
rpm -ivh elasticsearch-7.17.5-x86_64.rpm
yum localinstall -y elasticsearch-7.17.5-x86_64.rpm
2. 进行安装
/var/lib/elasticsearch
指定服务的数据目录地址
/var/log/elasticsearch
指定服务的日志目录地址
单点部署监听:本机的公网ip
此时本地ip:10.0.0.91
指定监听的地址
本地公网地址:10.0.0.91
指定当前集群的地址列表
3.修改配置文件:/etc/elasticsearch/elasticsearch.yml
systemctl enable --now elasticsearch
4.启动elasticsearsh服务
访问elasticsearch的WebUI地址
curl http://10.0.0.91:9200/
10.0.0.91:9200
可通过浏览器访问或虚拟机curl访问测试
5.连接调试
部署方式
ip+主机名
配置文件:/etc/hosts
配置文件:/etc/elasticsearch/elasticsearch.yml
oldboyedu-linux87
指定集群的名字
指定服务的数据存放目录
指定服务的日志存放目录
0.0.0.0 ---->设置最大监听ip地址
[\"elk91\
[\"10.0.0.91\
指定当前的集群地址列表
指定集群的master(主节点)选举列表
具体配置:
5.启动elasticsearch服务的集群
curl 10.0.0.91:9200
curl 10.0.0.92:9200
curl 10.0.0.93:9200
检查访问结果的uuid是否一致
可分别访问节点
curl 10.0.0.91:9200/_cat/nodes
查看集群状态
也可访问集群
6.检查调试
部署流程
RPM部署
单台服务器进行二进制方式部署elasticsearch
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.5-linux-x86_64.tar.gz
1.下载elasticsearch的软件包
说明:由于elasticsearch服务不能由root用户运行
useradd -u 1000 oldboyedu
2.创建运行elasticsearch服务的用户
3.创建部署elasticsearch服务的目录
tar xf elasticsearch-7.17.5-linux-x86_64.tar.gz -C /oldboyedu/softwares/
4.解压elasticsearch服务的软件包到指定目录
cd /oldboyedu/softwares/ && ln -svf elasticsearch-7.17.5 elasticsearch
:/oldboyedu/softwares/elasticsearch/config/elasticsearch.yml
配置文件地址
指定ES集群名称
/oldboyedu/data/es7
指定服务的数据目录
/oldboyedu/logs/es7
指定服务的日志目录
0.0.0.0
指定服务监听的地址
[\"10.0.0.91\"]
指定当前集群的master(主节点)选举列表
6.修改服务的配置文件
chown oldboyedu:oldboyedu -R /oldboyedu/softwares/elasticsearch/*
7.修改服务目录/文件的权限为指定的普通用户
配置文件:/etc/security/limits.d/es.conf
* soft nofile 65535
* hard nofile 131070
* soft nproc 4096
* hard nproc 8192
内容:根据服务的要求进行配置
查看: ulimit -a
退出重连xhell即可
配置生效
参考模版://etc/security/limits.conf
8.配置资源限制
配置文件:/etc/sysctl.d/es.conf
配置文件模版:/etc/sysctl.conf
查看: sysctl -a
生效: sysctl -p +配置文件的绝对路径
路径:/etc/profile.d/es.sh
配置详解:/etc/profile
配置环境变量
路径:/usr/lib/systemd/system/es7.service
systemctl文件
10.配置环境变量/systemctl文件
su - oldboyedu -c 'elasticsearch -d' 后台运行
通过环境变量启动
systemctl daemon-reload 加载配置
systemctl enable --now es7.service
通过systemctl启动
11.启动服务
ps -ef|grep java
查看进程
检查:9200 9300
ss -lntup
查看端口
访问WebUI
12.访问调试
二进制单点部署
多节点通过二级制方式部署elasticsearch服务
手动部署
自动通过ansible部署
部署方法
curl 10.0.0.92:9200/_cat/nodes
curl 10.0.0.93:9200/_cat/nodes
检查集群的uuid是否一致
部署流程:多节点部署
二进制集群部署
二进制部署
1.下载二进制的elasticsearch其余版本软件包
2.解压软件包到服务部署目录
3.创建服务专属的数据目录和日志目录
监听的端口号,web页面,走的http/https协议。
http.port:
集群内部数据传输端口,走的是tcp协议
transport.tcp.port:
端口指定
指定集群名称
cluster.name:
node.name:
数据目录
path.data:
日志目录
path.logs:
监听地址
network.host:
集群的数据广播节点
discovery.zen.ping.unicast.hosts:
参与master选举的投票数量,建议是集群的半数以上,以防止脑裂。
discovery.zen.minimum_master_nodes:
配置
4.修改服务的配置文件
根据服务的版本选择服务支持的JDk版本
oracle版的JDK
openjdk
JDk版本
5.所有节点配置运行服务所需的JDK环境
/usr/lib/systemd/system/es6.service
Environment=JAVA_HOME=/oldboyedu/softwares/jdk1.8.0_291
指定jdk运行
LimitNOFILE=131070
LimitNPROC=8192
指定资源限制
添加参数
6.编写启动服务的systemctl配置
7.部署方式
8.修改配置文件的主机名和服务目录的权限
systemctl daemon-reload
systemctl enable--now es6.service
9.启动服务
10.访问调试
二进制部署流程
多实例部署
1.安装所需的docker环境
2.基于docker部署ES服务
3.访问ES服务容器的WebUI
docker部署
kill `ps -ef | grep 'elasticsearch' | awk '$3==1 {print $2}'`
首先关闭已经运行的服务
检查进程
检查端口
检查服务是否关闭
rm -rf /oldboyedu/logs/es7/* /oldboyedu/data/es7/* /tmp/*
删除服务默认的数据缓存
重新启动服务查看
集群异常处理流程
systemctl status +服务 -l
journalctl -u + 服务
查看指定服务的详细状态信息
tail -100f /oldboyedu/logs/es7/oldboyedu-linux87.log
查看具体服务的日志分析
tail -100f /var/log/messages
查看系统日志分析
手动启动服务,观察日志输出
分析日志-排查故障方法
索引名称,是数据存储的逻辑单元
_index
数据分片,真正存储数据的地方,分为2类:
主分片,负责数据的读写。
primary shard
副本分片,负责数据的读取的负载均衡
replica shard
分类
_shards
文档,真是存储数据的单元。
_document
术语
通过API管理ES集群
集群处于健康状态,所有的主分片和副本分片均可以正常访问。
green
集群处于亚健康状态,有部分副本分片无法正常访问。
yellow
集群处于不健康状态,有部分主分片无法正常访问,一般情况下不会出现
在数据量较大的时候,ES启动时可能会短暂出现
red
集群状态
postman
ES-head
KIbana
客户端工具
客户端
GET
POST
PUT
DELETE
请求
查找
_search
文档的批量写操作
_bulk
文档的批量的读操作
_mget
索引模版
_template
数据迁移
_reindex
模块
API 接口
\"字母/数字\"
字符串
纯数字
数字类型
true
false
布尔值
null
空值
基本数据类型
[\"oldboyedu\
数组
{\"name\": \"Jason Yin\
{\"name\": \"oldboy\
{\"name\": \"李导\
对象
高级数据类型
JSON语法
Elasticsearch提供了基于JSON的完整Query DSL(Domain Specific Language,领域特定语言)来定义查询。
match
对匹配的条件会进行拆分匹配
全文检索
match_phrase
将匹配的条件当做整体匹配
完全匹配
mach_all
全量查询
指定每页显示多少条数据,默认值为10.
size
指定跳过数据偏移量的大小,默认值为0,即默认看第一页。
span style=\"mso-spacerun:'yes';font-family:等线;mso-bidi-font-family:'Times New Roman';font-size:10.5000pt;mso-font-kerning:1.0000pt;\"查询指定页码的from值 = \"(页码 - 1) * 每页数据大小(size)\"
from
size-from
生产环境中,不建议深度分页,百度的页码数量控制在76页左右。
分页查询
_source
用于指定查看\"_source\"对象的指定字段
查看的指定字段
exists
若存在则返回该文档,
若不存在,则不返回文档子主题
判断某个字段是否存在
查询存在某个字段的文档
highlight
设置高亮
指定对哪个字段进行语法高亮
fields
自定义高亮的前缀标签
pre_tags
自定义高亮的后缀标签
post_tags
相关参数信息
语法高亮
sort
基于指定的字段进行排序。
asc:升序
desc:降序
指定排序的规则
order
字段说明
基于字段排序
可以匹配多个条件查询
bool
必须匹配的条件
must
必须不匹配的条件,即和must相反
must_not
不是必要条件,满足其中之一即可
可以使用\"minimum_should_match\"来限制满足要求的条件数量。
支持数字和百分比,比如:\"2\"或者\"67%\"。
should
参数信息
多条件查询
terms
精确匹配多个值
过滤数据
filter
基于范围进行过滤
gt:大于
lt:小于
gte:大于等于
lte:小于等于
常见的操作符
range
相关字段
范围查询
指定词汇范围
quary
包含quary指定的所有字段
and
含有quary指定的字段即可
or
operator
多词搜索
boost
修改boost的值提升相应的字段的权重
权重高优先搜索
权重查询
agges
多个条件共同查询
最大值
max
最小值
min
平均值
avg
求和
sum
可与函数搭配使用
聚合查询
语句
DSL查询语句
索引及相关术语
概述:基于ES集群的数据迁移
ES7集群间的数据迁移
同一集群间的迁移
ES6集群到ES7集群的数据迁移
可以使ES7访问ES6
reindex.remote.whitelist: \"*:*\"
elasticsearch.yml
配置好ES7集群的白名单
不同进群的跨集群迁移
API集群迁移
当写入文档时,字段的数据类型会被ES动态自动创建,但有的时候动态创建的类型并符合我们的需求。这个时候就可以使用映射解决
使用映射技术,可以对ES文档的字段类型提前定义我们期望的数据类型,便于后期的处理和搜索
全文检索,可以被全文匹配,即该字段是可以被拆分的。
text
精确匹配,必须和内容完全匹配,才能被查询出来
keyword
支持Ipv4和Ipv6,将来可以对该字段类型进行IP地址范围搜索。
ip
数据类型
可以被搜索
不能被搜索
index
数据映射
分片底层对应的是一个Lucene库,而Lucene底层使用倒排索引技术实现。
面试题:分片底层时如何工作的
通过索引查询信息
正排索引
用于快速的全文检索
指的是最小的存储和查询单元,换句话说,指的是您想要查询的关键字(词)。
对应英文而言通常指的是一个单词,而对于中文而言,对应的是一个词组
词条:
它是词条的集合,底层通常基于\"Btree+\"和\"HASHMap\"实现。
词典(字典)
记录了词条出现在什么位置,出现的频率是什么。
倒排表中的每一条记录我们称为倒排项
倒排表:
专业术语
1.首先根据用户需要查询的词条进行分词后,将分词后的各个词条字典进行匹配,验证词条在词典中是否存在;
2.如果上一步搜索结果发现词条不在字典中,则结束本次搜索,如果在词典中,就需要去查看倒排表中的记录(倒排项);
3.根据倒排表中记录的倒排项来定位数据在哪个文档中存在,而后根据这些文档的\"_id\"来获取指定的数据;
搜索过程
倒排索引(反向索引)
倒排索引
指的是存储数据的节点。
node.data: true
data node:
控制ES集群,并维护集群的状态(cluster state,包括节点信息,索引信息等,ES集群每个节点都有一份)。
node.master: true
master node
协调节点可以处理请求的节点,ES集群所有的节点均为协调节点,该角色无法取消。
coordinating:
集群角色
ES集群理论
是用于采集文本日志类型到指定的目的端。
1.概述
2.部署
./filebeat -e -c + 配置文件
命令:相对路径
3.启动
type:log
log类型
type:tcp
TCP类型
指定具体的行数
count
通过正则匹配多行
parttern
多行匹配
filestream类型
- type: docker
docker类型
- type: container
container类型
kafka类型
input
output.elasticsearch:
elasticsearch类型
logstash类型
output
4.插件
filebeat多实例
filebeat
查看帮助信息
logstash –h
指定主机名称。
指定配置文件或配置文件的目录
基于命令行的方式指定配置参数
-e \"input { stdin { type => stdin } } output { stdout { codec => rubydebug } }\"
基于命令行指定Pipline ID
--pipeline.id ID
指定工作线程数量,默认值为2,建议设置为当前操作系统的CPU核心数。
当pipeline的event事件数量超过指定的阈值,会将数据发送到存储端。默认是125。
当event事件进入到pipeline到数据发送到存储端之前的等待时间,默认值为\"50ms\"
指定数据目录,rpm方式安装默认存放路径\"/usr/share/logstash/data\"
--path.data PATH
指定日志路径。
指定日志级别,默认值为\"info\"
- fatal
- error
- warn
- info
- debug
- trace
有效值
--log.level LEVEL
查看logstash的版本信息。
支持文件的热加载功能。当文件修改时立即生效
以秒为单位周期性检查配置文件的变化,当文件发生变化时取决于用户是否使用了-r选项生效
--config.reload.interval RELOAD_INTERVAL
指定日志的输出格式,可以使json或者plain,默认值为\"plain\"(文本类型)。
--log.format FORMAT
指定配置文件目录,rpm方式安装时,默认路径为\"/usr/share/logstash/config\".
--path.settings SETTINGS_DIR
logstash -e \"input { stdin { type => stdin } } output { stdout { codec => rubydebug } }\"
基于命令行的方式启动logstash
1.创建专门的工作目录
2.编写启动的配置文件
logstash -f oldboyedu-logstash-config/01-stdin-to-stdout.conf
3.启动logstash
基于配置文件的方式启动logstash
启动方式
概述:写入数据
file
beats
kafka
input组件
概述:对数据进行过滤
标准输出
输出到ES集群
geoip插件
date插件
useragent插件
数据转换,字段改名,切分字符串,添加或删除字段
mutate插件
分隔字符信息
添加自定义字段信息
基于正则分析Web日志,内置有120多种匹配模式。 支持自定义正则
grok插件
解析json文本到顶级字段
json插件
插件
filter组件
概述:输出数据
output组件
/etc/logstash/pipelines.yml
配置文件:
在同一进程中运行多个管道,Logstash通过一个名为pipelines.yml的配置文件提供了一种方法
如果不指定pipeline ID,则默认值为: {\"pipeline.id\"=>\"main\"}。
管道
logstash -r
命令行启动
pipline
if语句
单实例多分支
多个logstash实例
启动多个pipeline
单logstash实例
多实例
优化
logstash
https://www.elastic.co/
相关信息
kibana的maps地图无法显示IP地理位置,这个问题卡了我很久,最后,查阅相关资料,最后解决方案是修改索引模板映射?
filebeat多行匹配,对于filestream案例时,count类型有问题,官网文档出错了,当时卡了很久,最后参考官网的其他连接文档找出了解决方案?
在刚开始搭建集群的时候,我尝试修改过nginx的访问日志,最后发现kibana每次数据都重复消费,最后发现是我手动修改导致的问题,找到问题原因
系统盘,数据盘未分离,根文件系统使用满了,将数据迁移到数据盘,释放根文件系统。
1.你在ELK使用过程中都遇到过哪些问题?
10分片2副本
2.你们ES集群是多少分片多少副本?
3.说下ES数据的读写流程?
http | https协议的web访问端口
9200端口
基于tcp协议的集群内部数据传输端口
9300端口
4.ES集群的9200和9300作用是啥?
ELFK
5.你们公司日志采集数据流走向是如何的?
业务线 : 10条业务
保存周求: 6个月 | 12个月
索引写入的滚动方式: 按天滚动
10 * 6 *30 ---> 1800+ ----> 3600
6.你们ES集群有多少个分片?
集群的健康状态
分片数量
可用分片百分比
进程监控,主机监控,服务的负载,....
7.你们ES咋监控的?都监控了哪些指标?
常见面试题
1.1: 集群节点生成证书文件
1.2: 证书文件修改为ES集群运行用户所属
1.3:同步证书到ES集群的所有节点
1.4:修改ES集群所有节点的配置文件
1.5:ES集群服务重启
1.6:生成随机密码
1.7:连接测试
1.ES集群加密
1.1: 通过elastic用户访问kibana
1.4: 登录验证
流程:
2.kibana加密
filebeat实例中配置
username:
password:
指定ES集群的用户名和密码
3.filebeat连接ES加密集群
logstash实例中配置
指定配置在output输出插件下
user => 指定用户名
password => 指定密码
4.logstash连接的ES加密集群
ES集群加密
ElasticSearch
ZooKeeper是一个用于维护配置信息、命名、提供分布式同步和提供组服务的集中式服务。分布式应用程序以某种形式使用所有这些类型的服务。
znode
查看\"/\"的znode下有多少个子znode。
ls /
查看\"/school\"的znode对应的值。
get /school
create
创建一个名为\"/school/class\"的znode,其对应的值为linux87。
create /school/class linux87
创建一个名为\"/school\"的znode,其对应的值为oldboyedu。
create /school oldboyedu
语法:create path data
将名为\"/school\"的znode的值改为\"oldboyedu2023\"
set /school oldboyedu2023
set
将名为\"/school/class\"的znode删除
delete /school/class
delete
递归删除
递归删除\"/school\"该znode
deleteall /school
deleteall
常用命令
https://dlcdn.apache.org/zookeeper/zookeeper-3.8.2/apache-zookeeper-3.8.2-bin.tar.gz
1.下载软件包
2. 解压软件包
source /etc/profile.d/zk.sh
3.配置对应的环境变量
apache-zookeeper-3.8.2-bin/conf/zoo.cfg
4.配置文件的修改
start 启动
status 查看状态
stop 关闭
restart 重启
zkServer.sh
5.启动
zkCli.sh
6.连接测试
1.配置文件的修改
2.同步数据到集群其他节点
3.创建对应的myid文件
4.编写启动脚本
5.查看集群状态
6.连接集群测试验证
表示当前zookeeper server的server id,用于唯一表示当前的服务器。
myid
表示zookeeper transaction id,即zookeeper集群事务ID。
zxid
1.启动后检查集群的leader是否存在
zxid大的成为leader
3.比较节点的事务id---zxid
myid较大的成为leader
4.zxid一样的则比较myid
集群的leader选举
集群
调整zk的堆内存大小
调优
Zookeeper
ElasticStack
收藏
收藏
0 条评论
回复 删除
下一页