ElasticSearch集群监控指标:
健康状态
集群健康分为三个状态: green、yellow、red。
GET /_cluster/health
查看放回结果,如:
{
"cluster_name": "elasticsearch",
"status": "green", <1>
"timed_out": false,
"number_of_nodes": 1,
"number_of_data_nodes": 1,
"active_primary_shards": 0,
"active_shards": 0,
"relocating_shards": 0,
"initializing_shards": 0,
"unassigned_shards": 0
}
status值就是集群状态,说明如下:
颜色 | 意义 |
---|---|
green | 所有主要分片和复制分片都可用 |
yellow | 所有主要分片可用,但不是所有复制分片都可用 |
red | 不是所有的主要分片都可用 |
分片
分片(shard)是es工作的最小单元,保存一部分索引数据。文档存储在分片中,分配在集群中,如果集群扩容或者缩容则会移动分片,以保持平衡。
分片也分为主分片和复制分片,文档属于一个主分片,主分片大小决定索引存储的数据大小。
主分片
理论上主分片能存储的数据大小是没有限制的,限制取决于你实际的使用情况。分片的
最大容量完全取决于你的使用状况:硬件存储的大小、文档的大小和复杂度、如何索引
和查询你的文档,以及你期望的响应时间。
复制分片
复制分片是主分片的副本,防止单点故障造成数据丢失,复制分片也可以供读取请求,数量可以随时调整。
分片数据设置
在创建索引时,可以指定分片的数量,如添加index索引,设置主分片为2,复制分片为3
put /index
{
"settings":{
"number_of_shards":2,
"number_of_replaces":3
}
}
故障转移
在一个节点存储数据会有单点故障的可能,因为没有数据备份。
为了避免单点故障,可以启动第二节点。与第一个节点启动方式相同,只要集群名称相同启动后会自动发现第一个节点的集群,启动后主分片和复制分片会被并发复制到第二节点。
如果启动没有成功,检查是否网络广播被禁用或防火墙限制。
横向拓展
随着业务的增长,可以考虑做横向拓展,即添加新的节点机器,以减少节点负担。
例如给2个节点6个分片的集群添加新的节点,变化如图:
原本node1,node2存储6个分片,现在加入node3后会将分片分给node3,以缓解node1,node2的存储压力,并且可以使用node3的资源如cpu,内存等。
故障应对
当ES中的主节点故障后,会迅速生成一个主节点以维持工作,因为集群丢失主节点无法继续工作。
生成主节点后会检查主分片,如果主分片丢失,则将其复制分片改为主分片,当故障的节点恢复后会生成复制分片到该节点。
分片数量修改
为应对频繁的读写请求,可以适当的调整分片。
例如,修改索引doc的复制分片数量为2:
put /doc/_settings{
"number_of_replicas":2
}