ElasticSearch运维手册
0. 介绍
主要介绍了ES常用的在运维过程中可能会用到的一些命令。
1. 查看ES集群中节点信息
查看ES集群中所有节点信息,以及各个节点内存和CPU相关的指标
$ curl -X GET 'http://192.168.5.1:9200/_cat/nodes?v'
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
192.168.5.3 45 100 21 10.89 11.62 10.90 - - client_2
192.168.5.2 60 98 24 11.04 10.29 10.73 d - data_nos62_2
192.168.5.2 41 98 24 11.04 10.29 10.73 m - master_1
192.168.5.3 33 100 21 10.89 11.62 10.90 m * master_2
192.168.5.1 73 100 28 13.61 12.06 11.71 d - data_nos61_0
192.168.5.3 63 100 21 10.89 11.62 10.90 d - data_nos63_2
192.168.5.2 48 98 24 11.04 10.29 10.73 - - client_1
192.168.5.2 73 98 24 11.04 10.29 10.73 d - data_nos62_0
192.168.5.1 42 99 28 13.61 12.06 11.71 m - master_0
192.168.5.3 61 100 21 10.89 11.62 10.90 d - data_nos63_0
192.168.5.1 64 99 28 13.61 12.06 11.71 - - client_0
192.168.5.1 60 100 28 13.61 12.06 11.71 d - data_nos61_2
192.168.5.3 57 100 21 10.89 11.62 10.90 d - data_nos63_1
192.168.5.2 66 98 24 11.04 10.29 10.73 d - data_nos62_1
192.168.5.1 61 100 28 13.61 12.06 11.71 d - data_nos61_1
从上面的请求结果可以看出信息:
- ES集群总共有3台机器:192.168.5.1、192.168.5.2、192.168.5.3
- 每个机器部署5个节点:1master + 1client + 3data
- 还可以看出各个机器的内存和cpu负载的情况
2. 查看ES集群健康状态
查看整个ES集群的状态,以及节点、分片等信息
$ curl -XGET 'http://192.168.5.1:9200/_cluster/health?pretty'
{
"cluster_name" : "dg_nos_log",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 15,
"number_of_data_nodes" : 9,
"active_primary_shards" : 2027,
"active_shards" : 2068,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"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" : 100.0
}
其中有关参数意义如下:
- cluster_name:表示集群名称
- status:用来标识集群健康状况,green-健康,yellow-亚健康,red-病态,具体含义见后面
- number_of_nodes:节点数量,包括master、data、client节点
- number_of_data_nodes:data节点数量
- active_primary_shards:活跃的主分片数目
- active_shards:活跃的分片数,包括主、从索引的分片
上面一个比较重要的参数是status
,用来标识集群的健康状态,green-健康,yellow-亚健康,red-病态,具体含义是:
- green:所有的主分片和副本分片都已分配。你的集群是 100% 可用的。
- yellow:所有的主分片已经分片了,但至少还有一个副本是缺失的。不会有数据丢失,所以搜索结果依然是完整的。
- red:至少一个主分片(以及它的全部副本)都在缺失中。这意味着你在缺少数据:搜索只能返回部分数据,而分配到这个分片上的写入请求会返回一个异常。
如果集群状态不正常了(status
是yellow或者red),可以通过以下命令查看具体是哪个index
中的哪些shard
出问题了:
$ curl -XGET 'http://192.168.5.1:9200/_cluster/health?pretty&level=indices'
{
... # 同上
"indices" : {
"logstash-2017.11.01" : {
"status" : "green",
"number_of_shards" : 36,
"number_of_replicas" : 0,
"active_primary_shards" : 36,
"active_shards" : 36,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0
}
... # 其他索引的信息
}
$ curl -XGET 'http://192.168.5.1:9200/_cluster/health?pretty&level=shards'
{
... # 同上
"indices" : {
"logstash-2017.11.01" : {
"status" : "green",
"number_of_shards" : 36,
"number_of_replicas" : 0,
"active_primary_shards" : 36,
"active_shards" : 36,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"shards" : {
"0" : {
"status" : "green",
"primary_active" : true,
"active_shards" : 1,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0
}
...
}
}
...
}
}
3. ES中index
相关的操作
列出ES集群中所有的index
信息
$ curl -X GET 'http://192.168.5.1:9200/_cat/indices?v'
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open logstash-2017.12.01 NzGm6Ie8RiieapK8-Hk3GQ 36 0 1947323922 0 1.3tb 1.3tb
green open logstash-2017.12.04 fgqZu2KRR9W7p8MnUDhvhg 36 0 242204838 0 196.8gb 196.8gb
green open logstash-2017.11.18 aXBeawaBSHGhWPyJbeEdXA 36 0 689616830 0 594.2gb 594.2gb
green open logstash-2017.10.29 bk7rL2pxSV-ZvhMullCKIg 36 0 583979658 0 536.5gb 536.5gb
green open logstash-2017.10.23 cg2kChcVS0WxMm756OhT3g 36 0 717746268 0 625.5gb 625.5gb
green open logstash-2017.11.23 -0WaKahMT2uxhToVfS7DAA 36 0 1594219545 0 1tb 1tb
green open logstash-2017.11.14 5ej6Pln3R0WOkmApF_-kRg 36 0 673786095 0 574.8gb 574.8gb
green open logstash-2017.12.03 hphMrGzERHuVCBEzZpkZVQ 36 0 1924764450 0 1.3tb 1.3tb
green open logstash-2017.10.22 7dTwPzCGQdqVnJl3erz--w 36 0 711153079 0 623.1gb 623.1gb
...
其中:
- health:表示健康状况
- status:索引的状态,open-索引已开启,close-索引已关闭。关闭索引表示锁定了读写操作
- pri:索引的主分片的数目
- rep:索引的副本数
- docs.count:索引包含的文档数目
- docs.deleted:索引中已删除的文档数
- store.size:索引占用的存储空间,包括主分片及其副本
- pri.store.size:索引主分片占用的存储空间
创建索引
$ curl -XPUT 'http://192.168.5.1:9200/test_for_cjf' -d '
{
"settings" : {
"index" : {
"refresh_interval" : "60s",
"number_of_shards" : "36",
"translog" : {
"flush_threshold_size" : "1gb",
"sync_interval" : "60s",
"durability" : "async"
},
"merge" : {
"scheduler" : {
"max_thread_count" : "1",
"max_merge_count" : "10"
}
},
"query" : {
"default_field" : "message"
},
"number_of_replicas" : "0"
}
}
}'
{"acknowledged":true,"shards_acknowledged":true}
其中:
- index.refresh_interval:表示数据刷新周期,只有刷新之后的数据才能被查询到
- index.number_of_shards:分片数目
- index.translog.flush_threshold_size:translog刷新到磁盘的阈值
- index.translog.durability:translog同步方式
- index.translog.sync_interval:translog同步间隔,在durability为async的时有效
- index.number_of_replicas:索引副本数
上面的创建索引的参数已经是经过写优化之后的值
删除索引
$ curl -XDELETE 'http://192.168.5.1:9200/test_for_cjf'
{"acknowledged":true}
关闭索引
$ curl -XPOST 'http://192.168.5.1:9200/test_for_cjf/_close'
{"acknowledged":true}
$ curl -XPUT '192.168.5.1:9200/test_for_cjf/logs/1?pretty' -H 'Content-Type: application/json' -d'{}'
{
"error" : {
"root_cause" : [
{
"type" : "index_closed_exception",
"reason" : "closed",
"index_uuid" : "SJjYVLqwSG6Xb7Vyud1A5Q",
"index" : "test_for_cjf"
}
],
"type" : "index_closed_exception",
"reason" : "closed",
"index_uuid" : "SJjYVLqwSG6Xb7Vyud1A5Q",
"index" : "test_for_cjf"
},
"status" : 403
}
注意:
- 不允许对关闭的索引进行读写操作
- 在修改相关配置的时候需要对索引执行close操作,比如:index.translog.sync_interval
开启索引
$ curl -XPOST 'http://192.168.5.1:9200/test_for_cjf/_open'
{"acknowledged":true}
4 动态修改ES相关配置
index.number_of_replicas
$ curl -XPUT http://192.168.5.1:9200/test_for_cjf/_settings -d '{"index":{"number_of_replicas":0}}'
{"acknowledged":true}
注意:
-
number_of_replicas
用来标识索引的副本数,设置副本是为0在写优化的过程中有比较好的效果 - 一般将正在写的
index
的副本数设为0,将归档的index
的数目调整为1
index.number_of_shards
- 创建
index
的可以指定这个参数,表示分片的数目,默认是5 - 该参数不允许动态修改,可以通过修改配置文件,然后重启集群实现
index.refresh_interval
$ curl -XPUT http://192.168.5.1:9200/test_for_cjf/_settings -d '{"index":{"refresh_interval":"60s"}}'
{"acknowledged":true}
注意:
- 表示数据刷新间隔,只有刷新之后的数据才能被查询到
index.translog
$ curl -XPUT http://192.168.5.1:9200/test_for_cjf/_settings -d '{"index":{"translog.durability":"async"}}'
{"acknowledged":true}
$ curl -XPUT http://192.168.5.1:9200/test_for_cjf/_settings -d '{"index":{"translog.flush_threshold_size":"1gb"}}'
{"acknowledged":true}
$ curl -XPOST http://192.168.5.1:9200/test_for_cjf/_close
$ curl -XPUT http://192.168.5.1:9200/test_for_cjf/_settings -d '{"index":{"translog.sync_interval":"60s"}}'
$ curl -XPOST http://192.168.5.1:9200/test_for_cjf/_open
注意:
- translog类似于数据库中的binlog
- 更改sync_interval需要关闭
index