上节笔记主要叙述入门事项,本文重点说明分布式集群。
集群健康
在 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 可以告诉我们当前集群是否处于一个可用的状态。三种颜色分别代表:
- green 所有主分片和从分片都可用
- yellow 所有主分片可用,但存在不可用的从分片
- 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
- git clone git://github.com/mobz/elasticsearch-head.git
- cd elasticsearch-head
- npm install
- npm run start
- open http://localhost:9100/
这是再查看集群健康,应该就是绿色了。