集群管理
1 集群架构设计
生产环境推荐的最小集群配置
# 推荐的最小生产集群配置

## 专用主节点(3个)
- 仅作为master角色
- 不存储数据
- 不处理搜索请求
- 防止脑裂,建议奇数个

## 数据节点(2+个)
- 仅作为data角色
- 存储数据分片
- 执行搜索和聚合
- 需要大内存和磁盘

## 协调节点(可选)
- 仅作为coordinating角色
- 接收客户端请求
- 分发到数据节点
- 聚合返回结果

# 节点角色配置示例
node.roles: [master]                    # 专用主节点
node.roles: [data]                      # 数据节点
node.roles: [data, ingest]              # 数据+摄取节点
node.roles: [master, data]              # 主节点+数据节点(不推荐)
node.roles: []                          # 仅协调节点
2 集群配置示例
# 主节点配置(master-1)
cluster.name: my-cluster
node.name: master-1
node.roles: [master]
network.host: 192.168.1.10
http.port: 9200
discovery.seed_hosts: ["192.168.1.10", "192.168.1.11", "192.168.1.12"]
cluster.initial_master_nodes: ["master-1", "master-2", "master-3"]

# 数据节点配置(data-1)
cluster.name: my-cluster
node.name: data-1
node.roles: [data]
network.host: 192.168.1.20
http.port: 9200
discovery.seed_hosts: ["192.168.1.10", "192.168.1.11", "192.168.1.12"]

# 集群设置
# 最小主节点数(防止脑裂)
PUT /_cluster/settings
{
  "persistent": {
    "discovery.zen.minimum_master_nodes": 2
  }
}
3 集群监控命令
# 集群健康状态
GET /_cluster/health?pretty

# 详细集群状态
GET /_cluster/health?level=indices&pretty
GET /_cluster/health?level=shards&pretty

# 集群统计
GET /_cluster/stats?pretty

# 节点信息
GET /_cat/nodes?v
GET /_nodes/stats

# 分片分配情况
GET /_cat/shards?v
GET /_cat/allocation?v

# 集群任务
GET /_cluster/pending_tasks

# 集群设置
GET /_cluster/settings?include_defaults=true&pretty
4 分片管理
# 创建索引时指定分片数
PUT /my_index
{
  "settings": {
    "number_of_shards": 5,
    "number_of_replicas": 1
  }
}

# 修改副本数
PUT /my_index/_settings
{
  "number_of_replicas": 2
}

# 分片分配控制
PUT /_cluster/settings
{
  "transient": {
    "cluster.routing.allocation.enable": "primaries"
  }
}

# 重新分配分片
POST /_cluster/reroute
{
  "commands": [
    {
      "move": {
        "index": "my_index",
        "shard": 0,
        "from_node": "node1",
        "to_node": "node2"
      }
    }
  ]
}

# 强制重新分配
POST /_cluster/reroute?retry_failed=true
分片建议
  • 避免频繁刷盘,适当增大索引缓冲区
  • 单个分片大小控制在10-50GB
  • 每个节点分片数不超过20个/GB堆内存
  • 主分片数创建后不可修改
5 快照与恢复
# 注册快照仓库
PUT /_snapshot/my_backup
{
  "type": "fs",
  "settings": {
    "location": "/mount/backup",
    "compress": true
  }
}

# 创建快照
PUT /_snapshot/my_backup/snapshot_1
{
  "indices": "index_1,index_2",
  "ignore_unavailable": true,
  "include_global_state": false
}

# 查看快照
GET /_snapshot/my_backup/_all

# 恢复快照
POST /_snapshot/my_backup/snapshot_1/_restore
{
  "indices": "index_1,index_2",
  "ignore_unavailable": true,
  "include_global_state": false,
  "rename_pattern": "index_(.+)",
  "rename_replacement": "restored_index_$1"
}

# 删除快照
DELETE /_snapshot/my_backup/snapshot_1
集群安全建议
  • 启用X-Pack安全功能,配置TLS加密
  • 设置强密码,定期更换
  • 配置防火墙,限制9200/9300端口访问
  • 定期备份快照到远程存储
  • 监控集群健康状态,设置告警