Menu Close

Elasticsearch 5.51 笔记 (2)

上节笔记主要叙述入门事项,本文重点说明分布式集群。

集群健康

在 Elasticsearch 集群中可以监控统计很多信息,其中最重要的就是:集群健康(cluster health)。它的 status 有 green、yellow、red 三种;

使用命令查询集群健康

GET /_cluster/health

返回信息

{
  "cluster_name": "app",
  "status": "yellow",
  "timed_out": false,
  "number_of_nodes": 1,
  "number_of_data_nodes": 1,
  "active_primary_shards": 21, #活动的主分片
  "active_shards": 21,
  "relocating_shards": 0,
  "initializing_shards": 0,
  "unassigned_shards": 21,    #未分配的从节点
  "delayed_unassigned_shards": 0,
  "number_of_pending_tasks": 0,
  "number_of_in_flight_fetch": 0,
  "task_max_waiting_in_queue_millis": 0,
  "active_shards_percent_as_number": 50
}

cluster_name为集群名称,status(关键)就是集群健康程度.

status 可以告诉我们当前集群是否处于一个可用的状态。三种颜色分别代表:

  1. green 所有主分片和从分片都可用
  2. yellow 所有主分片可用,但存在不可用的从分片
  3. red 存在不可用的主要分片

什么是分片

分片是一个独立的Lucene实例,并且它自身也是一个完整的搜索引擎。我们的文档存储并且被索引在分片中.

在 elasticsearch 中,分片用来分配集群中的数据。把分片想象成一个数据的容器。数据被存储在分片中,然后分片又被分配在集群的节点上。当你的集群扩展或者缩小时,elasticsearch 会自动的在节点之间迁移分配分片,以便集群保持均衡。

什么是主分片,什么是从分片

所有的文档都是存储在主分片,从分片只是主分片的一个副本,它用于提供数据的冗余副本,在硬件故障时提供数据保护,同时服务于搜索和检索这种只读请求。

创建一个自定义分片的索引

PUT /blogs
{
   "settings" : {
      "number_of_shards" : 3,
      "number_of_replicas" : 1
   }
}

主分片三个,从分片一个(每个主分片有一个从分片对应)。

现在,我们的集群就是有索引的单节点集群,这三个主分片都被分配在本机(也就是单节点)

集群的健康状况 yellow 意味着所有的 主分片(primary shards) 启动并且运行了,这时集群已经可以成功的处理任意请求,但是 从分片(replica shards) 没有完全被激活。在同一个节点上保存相同的数据副本是没有必要的,如果这个节点故障了,就等同于所有的数据副本也丢失了。
现在我们的集群已经可用了,但是依旧存在因硬件故障而导致数据丢失的风险。

单点故障

启动第二个节点

我的版本是5.x,在配置节点发现时,有些参数已经是过时无效的,我的测试机是mac+window10,
如果只是开启第二个相同集群名称的节点,默认是不会加入到集群中的,需要设置
discovery.zen.ping.unicast.hosts参数

discovery.zen.ping.unicast.hosts: ["192.168.2.166:9200","192.168.2.137:9200"]

其他重要参数

 node.master : true #是否作为主节点
 node.data : true   #是否作为数据节点

网络上的文章推荐2.x关闭多播,使用单播发现,在5.x中,此参数已经作废

安装plugin head

  1. git clone git://github.com/mobz/elasticsearch-head.git
  2. cd elasticsearch-head
  3. npm install
  4. npm run start
  5. open http://localhost:9100/

https://github.com/mobz/elasticsearch-head

这是再查看集群健康,应该就是绿色了。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注