ELK01

ELK基础架构

image.png

EFK架构

image.png

使用EFK收集那些日志
容器:docker
代理:Haproxy、nginx
web: Nginx、redis、mongo、elasticsearch
存储:nfs、glusterfs、fastdfs
系统:message、security
业务:app

ELFK架构

image.png

1.elasticsearch基本使用

索引、文档、字段
elasticsearch与mysql对比
ES:一个索引里面,可以存储多个document文档,一个文档是由多个字段组织在一起的
MySQL:一个表里面,有多个数据,每个数据是由多个不同类型的字段组织在一起的

2ES单机安装

[root@es-node1 ~]# yum install java -y 
[root@es-node1 ~]# rpm -ivh elasticsearch-7.4.0x86_64.rpm  kibana-7.4.0-x86_64.rpm 
[root@es-node1 ~]# vim /etc/elasticsearch/jvm.options -Xms512m
    
#实验环境  生产环境最少内存一半以上   官方建议 最高 32Gb -Xmx512m
[root@es-node1 ~]# systemctl enable elasticsearch.service 
[root@es-node1 ~]# systemctl start elasticsearch.service

#测试es是否启动 
[root@es-node1 ~]# curl 127.0.0.1:9200
{
  "name" : "node1",
  "cluster_name" : "my-oldxu",
  "cluster_uuid" : "FF5RjxfgRWe0F6E8bHxYPA",
  "version" : {
    "number" : "7.4.0",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "22e1767283e61a198cb4db791ea66e3f11ab9910",
    "build_date" : "2019-09-27T08:36:48.569419Z",
    "build_snapshot" : false,
    "lucene_version" : "8.2.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

#修改kibana的配置 
[root@es-node1 ~]# vim /etc/kibana/kibana.yml server.host: "0.0.0.0" i18n.locale: "zh-CN"

#启动kibana 
[root@es-node1 ~]# systemctl enable kibana 
[root@es-node1 ~]# systemctl start kibana

#访问kibana
输入ip+端口

3.ES索引基本操作

#创建索引
PUT /oldxu_es

#查看索引
GET _cat/indices

#删除索引
DELETE /oldxu_es

#给oldxu_es索引引入一个文档
POST /oldxu_es/_doc/1
{
  "name": "oldxu",
  "age": 18,
  "salary": 100000000
}

#获取指定的id数据 
GET /oldxu_es/_doc/1

#获取所有的文档  默认前10个 
GET /oldxu_es/_search

#模糊查询
GET /oldxu_es/_search
{
  "query": {
    "term": {
      "name": "oldxu"
    }
  }
}

#删除指定id的文档 
DELETE /oldxu_es/_doc/1

#批量创建
POST _bulk
{"index":{"_index":"tt","_id":"1"}}
{"name":"oldxu","age":"18"}
{"create":{"_index":"tt","_id":"2"}}
{"name":"oldqiang","age":"30"}
{"delete":{"_index":"tt","_id":"2"}}
{"update":{"_id":"1","_index":"tt"}}
{"doc":{"age":"20"}}

#一次查询多个文档 
GET _mget
{
  "docs": [
    {
      "_index": "tt",
      "_id": "1"
    },
    {
      "_index": "tt",
      "_id": "2"
    }
  ]
}

4.ES集群环境搭建

配置集群

删除所有的es相关的数据 (集群无法组件的情况) 
[root@es-node1 ~]# rm -rf /var/lib/elasticsearch/*
[root@es-node1 ~]# systemctl stop elasticsearch.service [root@es-node1 ~]# systemctl stop kibana

配置node1 
[root@es-node1 ~]# grep '^[a-Z]' /etc/elasticsearch/elasticsearch.yml
cluster.name: my-oldxu
node.name: node1
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["10.0.0.161", "10.0.0.162", "10.0.0.163"]
cluster.initial_master_nodes: ["10.0.0.161", "10.0.0.162", "10.0.0.163"]

scp -rp /etc/elasticsearch/elasticsearch.yml root@172.16.1.162:/etc/elasticsearch/elasticsearch.yml
scp -rp /etc/elasticsearch/elasticsearch.yml  root@172.16.1.163:/etc/elasticsearch/elasticsearch.yml
scp  /etc/elasticsearch/jvm.options  root@172.16.1.162:/etc/elasticsearch/jvm.options 
scp  /etc/elasticsearch/jvm.options  root@172.16.1.163:/etc/elasticsearch/jvm.options


配置node2 
[root@es-node2 ~]# grep '^[a-Z]' /etc/elasticsearch/elasticsearch.yml
cluster.name: my-oldxu
node.name: node2
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["10.0.0.161", "10.0.0.162", "10.0.0.163"]
cluster.initial_master_nodes: ["10.0.0.161", "10.0.0.162", "10.0.0.163"]


配置node3
[root@es-node3 ~]# grep '^[a-Z]' /etc/elasticsearch/elasticsearch.yml
cluster.name: my-oldxu
node.name: node3
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["10.0.0.161", "10.0.0.162", "10.0.0.163"]
cluster.initial_master_nodes: ["10.0.0.161", "10.0.0.162", "10.0.0.163"]

启动所有节点 
systemctl start elasticsearch

通过 curl  检查集群环境是否正常 
curl http://10.0.0.163:9200/_cluster/health?pretty

kibana    
GET /_cluster_health

5.cerebro状态检查

cerebro插件来检查整个集群的环境 默认监听9000端口
[root@es-node1 ~]# rpm -ivh cerebro-0.8.5-1.noarch.rpm 
[root@es-node1 ~]# vim /etc/cerebro/application.conf 
data.path = "/tmp/cerebro.db" 
[root@es-node1 ~]# systemctl enable cerebro
image.png
image.png

6.集群节点

1.cluster
state
主要记录如下信息:
节点信息,比如节点名称、节点连接地址等
索引信息,比如索引名称、索引配置信息等

2.master角色: 负责控制整个集群的操作, 通过cluter_status状态维护集群.
选举: cluster.initial_master_nodes master-eligible
可以不参与选举: node.master: false cluster_state: 节点信息 索引信息
es集群中只能有一个master书点, master节点用于控制整个集群的操作。
我们的cluster state存储在每个节点上,但只能由master维护最新版本并同步给其他节点。
master节点是通过集群中所有节点选举产生的,(10.0.0.161,10.0.0.162,10.0.0.163)可以通node.master: true (默认为true)

3.data角色: 存储数据 (默认都是data节点) 关闭data: node.data: false    存储数据的书点即为data节点,默认节点都是data类型,相关配置node .data: true (默认为true )
当创建索引后,索引创建的数据会存储至某个节点,能够存储数据的书点,称为data节点。

4.coordinating角色 : 处理请求的节点即为coordinating节点,该节点为所有节点的默认角色,不能取消。
coordinating节点主要将请求路由到正确的节点处理,比如创建索引的请求路由到master节点.

7.ES集群分片副本.

1、如何提高es集群系统的可用性?
1.服务可用性:
1 )2个节点的情况下,允许其中1个节点停止服务
2 )多个节点的情况下,坏节点不能超过一半以上
2.数据可用性:
1 )副本(replication )解决,这样每个节点上都有完备的数据。
2 )服务可用性如下图所示, node2_上是oldxu_ index索引的一个完整副本数据。

2.如何增大es集群系统的容量?
1.如何将数据分布所有节点上?的
1 )引入分片(shard )解决问题
2.什么是分片,分片是es.支持Pb级数据的基石
2 )分片存储了索引的部分数据,可以分布在任意节点上
3 )分片存在主分片和副本分片之分,副本分片主要用来实现数据的高可用
4 )副本分片的数据由主分片同步,可以有多个,从而提高读取数据的吞吐量
5 )注意:主分片数在索引创建时指定且后续不允许在更改,默认ES7分片数为1个
3.如下图所示:在3个节点的集群中创建oldxu_index 索引,指定3个分片,和1个副本。(cerebro创建测试)

8.ES集群状态检查

Cluster Health 获取集群的健康状况,整个集群状态包括以下三种
1)green  健康状况,指所有主副分片都正常分配
2)yellow指所有主分片都正常分配,但是有副本分片未正常分配
3)red  有主分片未分配,表示索引不完备,写也有可能有问题,(但不代表不能存储数据和读取数据)
4)可以通过  GET _cluster/health?pretty=true 方式获取集群状态
shard = hash(routing) % number_of_primary_shards 
# hash                      算法保证将数据均匀分散在分片中 
# routing                   是一个关键参数,默认是文档id,也可 以自定义。 
# number_of_primary_shards  主分片数
# 注意:该算法与主分片数相关,一但确定后便不能更改主分片。 # 因为一旦修改主分片修改后,Share的计算就完全不一样了。

9.ES集群故障转移

所谓故障转移指的是,当集群中有节点发生故障时,这个集群是如何进行自动修复的。
ES集群是由3个节点组成,如下图所示,此时集群状态是green
image
假设: node1所在机器宕机导致服务终止,此时集群会如何处理?

1.node2和node3发现node 1无法响应一段时间后会发起master选举 ,比如这里选择node2为
master节点。此时集群状态变为Red。
image
2.node2发现主分片P0未分配,将node3_上的R0提升为主分片。此时由于所有的主分片都正常分配,
集群状态变为Yellow。
image
3.Node2将P0和P1生成新的副本R0、R1 ,此时集群状态变为Green。

ES文档路由原理(重要)

ES文档分布式存储,当-一个文档存储至ES集群时,存储的原理是什么样的?
如图所示,当我们想一个集群保存文档时, Document1是如何存储到分片P1的?选择P1的依据是什么?

![image](https://upload-images.jianshu.io/upload_images/17821044-4c37287ff19515e0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

其实是有一个文档到分片的映射算法,其目是使所有文档均匀分布在所有的分片上,那么是什么
算法呢?随机还是轮询呢?这种是不可取的,因为数据存储后,还需要读取,那这样的话如何读
取呢?
 实际上,在ES中,通过如下的公式计算文档对应的分片存储到哪个书点,计算公式如下

shard = hash(routing) % number_ of_ primary_ _shards
# hash                                                              算法保证将数据均匀分散在分片中
# routing                                                       是一个关键参数,默认是文档id,也可以自定义。
# number_ of_ primary_ shards               主分片数
#注意:该算法与主分片数相关,一但确定后便不能更改主分片。
#因为一旦修改主分片修改后,Share的计算就完全不一样了。

11

文档的创建流程

image

2、文档的读取流程

image

3.文档批量创建的流程?

image

4.文档批量读取的流程?

image
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,245评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,749评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,960评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,575评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,668评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,670评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,664评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,422评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,864评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,178评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,340评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,015评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,646评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,265评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,494评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,261评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,206评论 2 352

推荐阅读更多精彩内容