为什么这个错误发生 #
cluster_block_exception 表示集群或索引被阻止执行某些操作。集群阻塞是一种保护机制,用于在特定情况下防止数据不一致或集群状态恶化。
这个错误可能由以下原因引起:
- 集群正在进行恢复:集群正在从数据恢复中,阻止写入操作
- 节点数量不足:候选主节点数量未达到法定人数
- 磁盘空间不足:磁盘水位线触发,阻止写入操作
- 索引正在创建或删除:索引处于中间状态
- 只读模式:索引或集群被设置为只读模式
- 快照正在进行:某些操作在快照执行期间被阻止
- 版本升级期间:集群升级过程中某些操作被阻止
- 分片分配被禁用:分片分配被手动禁用
如何修复这个错误 #
1. 检查阻塞状态 #
# 查看集群阻塞信息
GET /_cluster/state/blocks?pretty
# 查看索引阻塞信息
GET /<index>/_block?pretty
# 查看集群健康状态
GET /_cluster/health?pretty
2. 检查磁盘水位线 #
# 查看磁盘使用情况
GET /_cat/allocation?v
# 查看节点统计信息
GET /_nodes/stats/fs?pretty
3. 清理磁盘空间 #
如果磁盘空间不足:
# 删除旧索引
DELETE /<old_index>
# 清理已过期的快照
DELETE /_snapshot/<repo>/<snapshot>
# 减少副本数量以释放空间
PUT /<index>/_settings
{
"index": {
"number_of_replicas": 0
}
}
4. 解除索引阻塞 #
# 删除索引的写阻塞
DELETE /<index>/_block/write
# 删除所有阻塞
DELETE /<index>/_block/write
DELETE /<index>/_block/metadata
DELETE /<index>/_block/read
5. 手动启用分片分配 #
如果分片分配被禁用:
# 启用分片分配
PUT /_cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": "all"
}
}
6. 修改磁盘水位线设置 #
# 调整磁盘水位线(谨慎使用)
PUT /_cluster/settings
{
"persistent": {
"cluster.routing.allocation.disk.watermark.low": "90%",
"cluster.routing.allocation.disk.watermark.high": "95%",
"cluster.routing.allocation.disk.watermark.flood_stage": "98%"
}
}
# 解除洪水阶段阻塞
PUT /_all/_settings
{
"index.blocks.read_only_allow_delete": null
}
7. 等待集群恢复 #
某些阻塞是临时的,等待集群状态恢复:
# 等待集群达到绿色状态
GET /_cluster/health?wait_for_status=green&timeout=50s
# 等待所有分片分配
GET /_cluster/health?wait_for_no_relocating_shards=true&timeout=50s
8. 检查并修复未分配的分片 #
# 查看未分配的分片
GET /_cat/shards?v&h=index,shard,prirep,state,unassigned.reason | grep UNASSIGNED
# 解释分片未分配的原因
GET /_cluster/allocation/explain
# 尝试重新分配分片
POST /_cluster/reroute?retry_failed=true
9. 处理恢复中的阻塞 #
# 查看恢复状态
GET /_cat/recovery?v
# 等待恢复完成
GET /_cluster/health?wait_for_no_initializing_shards=true&timeout=50s
10. 检查节点数量 #
# 查看候选主节点数量
GET /_cat/nodes?v&h=name,master
# 确保有足够的候选主节点
# 通常建议至少 3 个候选主节点
预防措施 #
- 监控磁盘使用情况,提前清理或扩容
- 配置合理的磁盘水位线阈值
- 确保集群有足够数量的候选主节点
- 在非高峰时段执行大型操作(如快照、重建索引)
- 定期检查集群健康状态
- 配置集群监控告警
- 避免在生产环境中频繁修改集群设置
- 使用索引生命周期管理(ILM)自动管理索引





