【ELK】03、ElasticSearch集群

上一篇主要学习了ES及其插件的安装,这一篇主要学习ES集群及其节点管理

一、ES集群概述

1、ES集群简介

ES就是为高可用和可扩展而生的,服务器的扩展可以通过购置性能更强的服务器(垂直扩展或者向上扩展,Vertical Scale/Scaling Up),亦或是通过购置更多的服务器(水平扩展或者向外扩展,Horizontal Scale/Scaling Out)来完成。尽管ES能够利用更强劲的硬件,垂直扩展毕竟还是有它的极限。真正的可扩展性来自于水平扩展 - 通过向集群中添加更多的节点来分布负载,增加可靠性。

在大多数数据库中,水平扩展通常都需要你对应用进行一次大的重构来利用更多的节点。

相反,ES天生就是分布式的:它知道如何管理多个节点来完成扩展和实现高可用性。这也意味着你的应用不需要在乎这一点。

2、ES集群的主节点 

集群中的一个节点会被选为主节点(Master Node),它负责管理整个集群的变化,如创建或者删除一个索引(Index),向集群中添加或者删除节点。主节点并不需要参与到文档级别的变化或者搜索中,这意味着虽然只有一个主节点,但它并不会随着流量的增加而成为瓶颈。任何节点都可以成为主节点。在我们的例子中只有一个节点,所以它就承担了主节点的功能。

对于用户,可以和集群中的任意节点进行通信,包括主节点。每个节点都知道每份文档的存放位置,并且能够将请求转发到持有所需数据的节点。用户通信的节点会负责将需要的数据从各个节点收集起来,然后返回给用户。以上整个过程都会由ES透明地进行管理。

3、ES集群的状态

green    正常状态

所有的主分片(Primary Shard)和副本分片(Replica Shard)都处于活动状态(都可用)

red      不可用状态

不是所有的主分片都处于活动状态,基本的分片可用,但是备份不可用(也可能是没有备份)

yellow     修复状态

所有的主分片都处于活动状态,但是并不是所有的副本分片都处于活跃状态

部分的分片可用,表明分片有一部分损坏。此时执行查询部分数据仍然可以查到,遇到这种情况,还是赶快解决比较好。

4、ES集群的特性

elasticsearch集群一旦建立起来以后,会选举出一个master,其他都为slave节点。
但是具体操作的时候,每个节点都提供写和读的操作。就是说,你不论往哪个节点中做写操作,这个数据也会分配到集群上的所有节点中。

这里有某个节点挂掉的情况,如果是slave节点挂掉了,那么首先关心,数据会不会丢呢?不会。如果你开启了replicate,那么这个数据一定在别的机器上是有备份的。
别的节点上的备份分片会自动升格为这份分片数据的主分片。这里要注意的是这里会有一小段时间的yellow状态时间。

如果是主节点挂掉怎么办呢?当从节点们发现和主节点连接不上了,那么他们会自己决定再选举出一个节点为主节点。

但是这里有个脑裂的问题,假设有5台机器,3台在一个机房,2台在另一个机房,当两个机房之间的联系断了之后,每个机房的节点会自己聚会,推举出一个主节点。
这个时候就有两个主节点存在了,当机房之间的联系恢复了之后,这个时候就会出现数据冲突了。
解决的办法就是设置参数:

discovery.zen.minimum_master_nodes

为3(超过一半的节点数),那么当两个机房的连接断了之后,就会以大于等于3的机房的master为主,另外一个机房的节点就停止服务了。

对于自发现动能这里不难看出,如果把节点直接暴露在外面,不管怎么切换master,必然会有单节点问题。所以一般我们会在可提供服务的节点前面加一个负载均衡。

5、ES集群的自动发现功能

elasticsearch的集群是内嵌自动发现功能的。

意思就是说,你只需要在每个节点配置好了集群名称,节点名称,互相通信的节点会根据es自定义的服务发现协议去按照多播的方式来寻找网络上配置在同样集群内的节点。
和其他的服务发现功能一样,es是支持多播和单播的。多播和单播的配置分别根据这几个参数:

discovery.zen.ping.multicast.enabled: false
# 这个设置把组播的自动发现给关闭了,为了防止其他机器上的节点自动连入。

discovery.zen.fd.ping_timeout: 100
sdiscovery.zen.ping.timeout: 100
# 设置了节点与节点之间的连接ping时长

sdiscovery.zen.minimum_master_nodes: 2
# 这个设置为了避免脑裂。比如3个节点的集群,如果设置为2,那么当一台节点脱离后,不会自动成为master

discovery.zen.ping.unicast.hosts: ["12.12.12.12:10801"]
# 这个设置了自动发现的节点

多播是需要看服务器是否支持的,由于其安全性,其实现在基本的云服务(比如阿里云)是不支持多播的,所以即使你开启了多播模式,你也仅仅只能找到本机上的节点。
单播模式安全,也高效,但是缺点就是如果增加了一个新的机器的话,就需要每个节点上进行配置才生效了。

二、ES集群的管理

ES集群提供了Restful风格的访问接口API

ES访问接口:9200/tcp    基于http协议工作

1、Restful风格API

四类API:

检查集群、节点、索引等是否健康一级获取其相应状态

管理集群,节点、索引及元数据

执行CRUD操作

执行高级操作,例如paging,filtering等


语法格式:

 curl  -X  <VERB>  ‘<protocol>://HOST:PORT/<PATH>?<QUERY_STRING>‘  -d  ‘<body>‘

VERB:

GET,PUT,DELETE等

PROTOCOL:

http,https

QUERY_STRING:

查询参数、例如:?pretty表示使用易读的JSON格式输出

BODY:

请求的主体

查看ES节点是否工作正常:

[[email protected] ~]# curl localhost:9200        
{                                             # JSON格式
  "name" : "node2",
  "cluster_name" : "RK",
  "cluster_uuid" : "pwffDjOKQT6Ss2CRQLXt0g",
  "version" : {
    "number" : "5.3.0",
    "build_hash" : "3adb13b",
    "build_date" : "2017-03-23T03:31:50.652Z",
    "build_snapshot" : false,
    "lucene_version" : "6.4.1"
  },
  "tagline" : "You Know, for Search"         # 正常
}

Elasticsearch通过使用JSON来作为沟通的数据格式,这对于开发者来说很友好,因为很多程序都支持JSON格式。比如js就不说了,Java也有fastjson,ruby什么的都自带json。


1)_cat API

Elasticsearch中信息很多,如果单凭肉眼来寻找复杂数据之间的关系,是很困难的。因此cat命令应运而生,它帮助开发者快速查询Elasticsearch的相关信息。

查看_cat api的所有操作:

[[email protected] ~]# curl 192.168.10.7:9200/_cat
=^.^=
/_cat/allocation
/_cat/shards
/_cat/shards/{index}
/_cat/master
/_cat/nodes
/_cat/tasks
/_cat/indices
/_cat/indices/{index}
/_cat/segments
/_cat/segments/{index}
/_cat/count
/_cat/count/{index}
/_cat/recovery
/_cat/recovery/{index}
/_cat/health
/_cat/pending_tasks
/_cat/aliases
/_cat/aliases/{alias}
/_cat/thread_pool
/_cat/thread_pool/{thread_pools}
/_cat/plugins
/_cat/fielddata
/_cat/fielddata/{fields}
/_cat/nodeattrs
/_cat/repositories
/_cat/snapshots/{repository}
/_cat/templates

verbose

每个命令都支持使用?v参数,来显示详细的信息:

help

每个命令都支持使用help参数,来输出可以显示的列:

$ curl localhost:9200/_cat/master?help
id   |   | node id
host | h | host name
ip   |   | ip address
node | n | node name

headers

通过h参数,可以指定输出的字段:

$ curl localhost:9200/_cat/master?v
id                     host      ip        node
QG6QrX32QSi8C3-xQmrSoA 127.0.0.1 127.0.0.1 Manslaughter

$ curl localhost:9200/_cat/master?h=host,ip,node
127.0.0.1 127.0.0.1 Manslaughter
[[email protected] ~]# curl 192.168.10.2:9200/_cat/master?v
id                     host          ip            node
bMAYDjb2Rsyfpn92Lnax3w 192.168.2.116 192.168.2.116 node7
[[email protected] ~]# curl 192.168.10.2:9200/_cat/master?help
id   |   | node id    
host | h | host name  
ip   |   | ip address 
node | n | node name  
[[email protected] ~]# curl 192.168.10.2:9200/_cat/master?h=host,id,host
192.168.2.116 bMAYDjb2Rsyfpn92Lnax3w

数字类型的格式化

很多的命令都支持返回可读性的大小数字,比如使用mb或者kb来表示。

$ curl localhost:9200/_cat/indices?v
health status index pri rep docs.count docs.deleted store.size pri.store.sizeyellow open   test    5   1          3            0      9.kb          9.kb

例子:

查看ES集群的切片信息:

[[email protected] ~]# curl 192.168.10.7:9200/_cat/allocation            
9 38.8mb 4.7gb  13gb 17.7gb 26 192.168.2.116 192.168.2.116 node7
9 38.8mb 9.1gb 8.6gb 17.7gb 51 192.168.2.114 192.168.2.114 node2
[[email protected] ~]# curl 192.168.10.7:9200/_cat/allocation?v   # ?v表示显示详细信息(字段名)
shards disk.indices disk.used disk.avail disk.total disk.percent host          ip            node
     9       38.8mb     9.1gb      8.6gb     17.7gb           51 192.168.2.114 192.168.2.114 node2
     9       38.8mb     4.7gb       13gb     17.7gb           26 192.168.2.116 192.168.2.116 node7

查看ES集群节点信息:

[[email protected] ~]# curl 192.168.10.7:9200/_cat/nodes?v
ip            heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
192.168.2.114           10          96   1    0.00    0.01     0.00 mdi       -      node2
192.168.2.116            3         100   0    0.00    0.00     0.00 mdi       *      node7

heap.percent:堆内存占的内存百分比

cpu:表示使用的cpu核心

node.role:表示节点能充当的角色主、数据 节点

master:表示当前是否为主节点,*表示当前为主

2)_Cluster API

集群相关的api接口

时间: 2024-10-22 18:58:06

【ELK】03、ElasticSearch集群的相关文章

ELK+Filebeat+Nginx集中式日志解决方案(二)——添加ElasticSearch集群

一.使用说明: Elasticsearch插件:  Elasticsearch常用的几个插件为: # head # 地址  https://github.com/mobz/elasticsearch-head mobz/elasticsearch-head # kopf # 地址  https://github.com/lmenezes/elasticsearch-kopf lmenezes/elasticsearch-kopf # bigdesk # 地址 https://github.com

ElasticSearch集群搭建

一.前言 先介绍ElasticSearch的几个核心概念. 集群(cluster): 一个集群就是由一个或多个节点组织在一起,它们共同持有你整个的数据,并一起提供索引和搜索功能.一个集群由一个唯一的名字标识,这个名字默认就是"elasticsearch".这个名字是重要的,因为一个节点只能通过指定某个集群的名字,来加入这个集群. 节点(node): 一个节点是你集群中的一个服务器,作为集群的一部分,它存储你的数据,参与集群的索引和搜索功能.和集群类似,一个节点也是由一个名字来标识的,默

ES2:ElasticSearch 集群配置

ElasticSearch共有两个配置文件,都位于config目录下,分别是elasticsearch.yml和logging.yml,其中,elasticsearch.yml 是全局配置文件,用于在服务器级别对ElasticSearch进行配置.ElasticSearch的配置选项分为静态设置和动态设置两种,静态设置必须在结点级别(node-level)设置,或配置在elasticsearch.yml配置文件中,或配置在环境变量中,或配置在命令行中,在结点启动之后,静态设置不能修改.集群的名字

【Elasticsearch】深入Elasticsearch集群

7.1 节点发现启动Elasticsearch的时候,该节点会寻找有相同集群名字且课件的主节点,如果有加入,没有自己成为主节点,负责发现的模块两个目的 选出主节点以及发现集群的新节点7.1.1发现的类型Elasticsearch允许使用zen发现,在config里面的Elasticsearch.yml里面配置zen的信息即可,使用2.1.0的时候是这样的7.1.2主节点发现的功能之一就是选主节点,应该是zookeeper完成的,并且保持之间有相应配置主节点和数据节点:Elasticsearch允

使用容器和Elasticsearch集群对Twitter进行监控

介绍 Elasticsearch是ELK(Elasticsearch/Logstash/Kibana)的基石.在这篇文章中,我们将使用Rancher Catalog来部署stack,并将它用于追踪Twitter上的tag和brand. 追踪Twitter上的hashtag对于衡量基于Twitter的营销活动的影响力是非常有用的.你可以从中提取出诸如您的推文被转发的次数,你的营销活动为你带来了多少位新的关注者等有效信息. 安装ELK stack Elasticsearch 若你已经有了一个正在工作

搭建Elasticsearch集群常见问题

一.ES安装方法: Linux用户登录(bae),我们用的是5.3版本的包.从官网下载: curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.3.0.tar.gz 解压后,进入到bin目录下,使用 ./elasticsearch 命令启动,看到如下的提示,即为启动成功.端口号9200. 二.ES单节点部署遇到的问题 1.记住不要在root下启动,否则会报错:can not run elas

elasticsearch 集群部署

Elasticsearch是一个分布式搜索服务,提供Restful API,底层基于Lucene,采用多shard的方式保证数据安全,并且提供自动resharding的功能,github等大型的站点也都采用Elasticsearch作为其搜索服务.废话在此就不多赘述了,下面记录下CentOS7下Elasticsearch集群部署过程: 1)基础信息 elk-es01.kevin.cn    192.168.10.44 elk-es02.kevin.cn    192.168.10.45 elk-

Elasticsearch集群数据迁移

参考 https://www.elastic.co/guide/en/elasticsearch/reference/5.0/modules-snapshots.htmlhttps://www.elastic.co/guide/en/elasticsearch/guide/current/_rolling_restarts.htmlhttps://blog.csdn.net/u014431852/article/details/52905821 环境 阿里云elasticsearch集群5.0版

Prometheus监控elasticsearch集群(以elasticsearch-6.4.2版本为例)

部署elasticsearch集群,配置文件可"浓缩"为以下: cluster.name: es_cluster node.name: node1 path.data: /app/data/elasticsearch path.logs: /app/logs/elasticsearch network.host: 192.168.x.x http.port: 9200 transport.tcp.port: 9201 discovery.zen.ping.unicast.hosts: