ES 集群管理中常用命令

集群升级

禁用分片自动分配

1
2
3
4
5
6
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": "primaries"
}
}

停止不必要的索引并执行同步刷新

1
POST _flush/synced

关闭单个节点

升级关闭的节点

升级后启动节点

重新启用分片分配

对于数据节点,一旦节点加入集群,删除 cluster.routing.allocation.enable启用分片分配的设置并开始使用该节点:

1
2
3
4
5
6
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": null
}
}

等待集群恢复

等待集群恢复为green再从头开始操作升级下一个节点

查看哪个节点已升级成功

1
GET /_cat/nodes?h=ip,name,version&v=true

加快集群恢复速度

增加ES集群数据分片重新平衡速度

1
2
3
4
5
6
7
8
9
10
11
# 当前节点在进行主分片恢复时的数量, 默认值=4;
cluster.routing.allocation.node_initial_primaries_recoveries:

# 默认值=2, 通常是其他节点上的副本 shard 恢复到该节点上;
cluster.routing.allocation.node_concurrent_incoming_recoveries:

# 默认值=2, 通常是当前节点上的主分片 shard 恢复副本分片到其他节点上;
cluster.routing.allocation.node_concurrent_outgoing_recoveries:

# 统一配置上面两个配置项
cluster.routing.allocation.node_concurrent_recoveries:

修改集群分片数

修改集群分片数量(es分片数限制导致日志接受异常)

1
curl -XPUT -u elastic http://192.168.1.8:9200/_cluster/settings?pretty

默认为每个非冻结数据节点1000个分片,默认为每个冻结数据节点3000个分片。用完后日志写入ES会失败,报错:maximum shards open,可以通过以下调整集群总数据分片数量。

1
2
3
4
5
6
7
8
9
10
11
curl -XPUT -u elastic http://192.168.1.8:9200/_cluster/settings?pretty -H 'Content-Type: application/json' -d'{  "persistent": {    "cluster": {      "max_shards_per_node":12000    }  } }'

# kibana控制台修改
PUT /_cluster/settings
{
"persistent": {
"cluster": {
"max_shards_per_node":36000
}
}
}

延迟复本分片分配

设置延迟进行复本分片分配,默认1m;在节点重启或短暂离开集群又重新加入集群时非常有用

1
2
3
4
5
6
PUT /_all/_settings
{
"settings": {
"index.unassigned.node_left.delayed_timeout": "5m"
}
}

分片分配失败处理方案

将副本分片提升为主分片

如果确定了主分片已经损坏,可以尝试将副本分片提升为主(会丢部分数据)

1
2
3
4
5
6
7
8
9
10
11
12
13
POST /_cluster/reroute?pretty
{
"commands": [
{
"allocate_stale_primary": {
"index": "indexname", #索引名
"shard": 3, #操作的分片id
"node": "node1", #此分片副本位于的节点
"accept_data_loss": true #提示数据可能会丢失
}
}
]
}

此方案存在一个问题是需要提前知道此分片的副本位于哪个节点用以指定,可以通过如果api获取副本分片位置

1
curl -s "http://localhost:9200/_cat/shards" | grep UNASSIGNED

将此分片置为空分片

如果此分片的主副都已经损坏,则可将此分片置为空以保留索引其他分片数据

1
2
3
4
5
6
7
8
9
10
11
12
{
"commands": [
{
"allocate_empty_primary": {
"index": "indexname", #索引名
"shard": 3, #操作的分片id
"node": "node1", #空分片要分配的节点
"accept_data_loss": true #提示数据可能会丢失
}
}
]
}

初始化集群账号密码

开启账号认证后只能初始化一次

1
./bin/elasticsearch-setup-passwords interactive

修改集群的账号密码

1
2
3
4
curl -XPUT -u TestSuper:123456 http://localhost:9200/_xpack/security/user/elastic/_password -H "Content-Type: application/json" -d '
{
"password": "123456"
}'

找回管理员密码

1
2
3
4
5
6
7
8
## 新建一个超级管理员账号
./elasticsearch/bin/elasticsearch-users useradd my_admin -p my_password -r superuser

## 修改管理员密码
curl -u my_admin -XPUT 'http://localhost:9200/_xpack/security/user/elastic/_password?pretty' -H 'Content-Type: application/json' -d'
{
"password" : "new_password"
}'

ES用户权限管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
## 创建ES用户
curl -XPOST -u elastic:qwer123 -s http://@localhost:9200/_xpack/security/user/IDS_ES -H "Content-Type: application/json" -d '{ "password" : "Kms9852HTVdxjzUNXX", "full_name" : "", "email" : "", "roles" : [ "IDS_ES" ], "metadata" : { }}'

## ES更新用户密码
curl -H "Content-Type:application/json" -XPOST http://elastic:123456@localhost:9200/_xpack/security/user/elastic/_password -d '{ "password" : "qwer123" }'

## ES禁用用户
curl -XPOST -u elastic:qwer123 -s http://@localhost:9200/_xpack/security/user/IDS_ES/_disable

## ES启用用户
curl -XPOST -u elastic:qwer123 -s http://@localhost:9200/_xpack/security/user/IDS_ES/_enable

## ES用户删除
curl -XDELETE -u elastic:qwer123 -s http://@localhost:9200/_xpack/security/user/IDS_ES?pretty

## 查询ES角色详细权限
curl -XGET -u elastic:qwer123 -s http://@localhost:9200/_xpack/security/role/superuser?pretty

## ES删除角色
curl -XDELETE -u elastic:qwer123 -s http://@localhost:9200/_xpack/security/role/IDS_ES?pretty

## 查询ES现有的所有用户及其角色
curl -XGET -u elastic:qwer123 -s http://@localhost:9200/_xpack/security/user?pretty

其它常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
## 查看集群settings
GET _cluster/settings?pretty

## 查看集群状态
GET _cluster/health?pretty

## 查看集群已在线节点
GET _cat/nodes

## 查看节点版本
GET /_cat/nodes?h=ip,name,version&v=true

## 查看节点标签
GET _cat/nodeattrs?v&h=node,attr,value&s=attr:desc

## 重新路由失败的数据分片
POST /_cluster/reroute?retry_failed=true

## 将缓存中的数据持久化到硬盘
POST _flush/synced

## 查看分片分配状态和失败原因
GET /_cluster/allocation/explain?pretty

## 查看线程池数量
GET /_cat/thread_pool/?v

## 关闭和打开索引
POST /index/_close(_open)

## 查看分片状态
GET _cat/shards

## 查询要重构的ES
GET _nodes/process?pretty

## 查看副本分片位置
GET uplog-2023.04.23/_shard_stores?pretty

## 将副本分片提升为主分片
POST /_cluster/reroute?pretty
{
"commands": [
{
"allocate_stale_primary": {
"index": "uplog-2023.04.23",
"shard": 3,
"node": "nb-hyy-10-57-0-105",
"accept_data_loss": true
}
}
]
}

## 清除单个索引缓存
POST twitter/_cache/clear

## 清除多个索引缓存
POST kimchy,elasticsearch/_cache/clear
POST _cache/clear

## 集群统计信息
GET _cluster/stats
-------------本文结束感谢您的阅读-------------