配置项作用 #
cluster.auto_shrink_voting_configuration 配置项控制集群是否自动收缩投票配置(Voting Configuration)。当有资格作为主节点的节点加入或离开集群时,此配置决定系统是否自动调整投票配置以维持最佳的容错能力。
配置项类型 #
该配置项为动态配置,可以在运行时通过集群设置 API 进行修改。
默认值 #
true
是否必需 #
可选配置项(有默认值)
取值范围 #
true 或 false
配置格式 #
# 默认配置(自动收缩)
cluster.auto_shrink_voting_configuration: true
# 禁用自动收缩(手动管理)
cluster.auto_shrink_voting_configuration: false
相关配置项 #
| 配置项 | 默认值 | 说明 |
|---|---|---|
cluster.auto_shrink_voting_configuration | true | 自动收缩投票配置 |
cluster.max_voting_config_exclusions | 10 | 最大投票排除数 |
工作原理 #
投票配置自动调整机制:
┌─────────────────────────────────────────────────────────────────┐
│ 投票配置自动调整 │
└─────────────────────────────────────────────────────────────────┘
节点状态变化
│
├── 主节点离开集群
│
├── 主节点加入集群
│
└── 节点故障
│
▼
检查 auto_shrink_voting_configuration
│
├── true(默认)
│ │
│ ├── 自动计算最优投票配置
│ │
│ ├── 保持至少 3 个投票节点
│ │ (或当前配置 < 3 时保持 1 个)
│ │
│ └── 优先选择在线节点
│
└── false
│
└── 保持当前配置
│
└── 需要手动使用退休 API 管理
收缩规则 #
自动收缩的具体规则:
当前配置节点数 >= 3:
最小保持: 3 个投票节点
确保能够容忍一个节点故障
当前配置节点数 < 3:
最小保持: 1 个投票节点
确保单节点集群可以运行
投票配置优先级:
1. 当前主节点(必须保留)
2. 在线节点(优先于离线节点)
3. 当前配置中的节点(保持稳定性)
4. 按 node ID 排序(确定性顺序)
使用场景 #
1. 默认配置(推荐) #
cluster.auto_shrink_voting_configuration: true
适用场景:
- 大多数集群配置
- 需要自动容错
- 频繁节点变更
- 希望系统自动处理节点故障
2. 手动管理 #
cluster.auto_shrink_voting_configuration: false
适用场景:
- 需要精确控制投票配置
- 自定义容错策略
- 避免自动收缩
- 特殊业务需求
推荐设置建议 #
| 集群类型 | 推荐值 | 说明 |
|---|---|---|
| 生产环境 | true | 自动容错 |
| 测试环境 | true | 便于管理 |
| 大规模集群 | true | 自动调整 |
| 特殊需求 | false | 手动控制 |
自动收缩与手动管理对比 #
自动收缩模式 (true):
优点:
✓ 自动适应节点变化
✓ 无需手动干预
✓ 维持最佳容错能力
✓ 减少运维负担
缺点:
✗ 可能不符合特殊需求
✗ 自动收缩可能不可预期
手动管理模式 (false):
优点:
✓ 完全控制投票配置
✓ 可自定义策略
✓ 行为可预测
缺点:
✗ 需要手动管理
✗ 可能遗漏重要操作
✗ 增加运维复杂度
动态配置示例 #
# 启用自动收缩
PUT /_cluster/settings
{
"transient": {
"cluster.auto_shrink_voting_configuration": true
}
}
# 禁用自动收缩
PUT /_cluster/settings
{
"transient": {
"cluster.auto_shrink_voting_configuration": false
}
}
监控建议 #
# 查看当前配置
GET /_cluster/settings?filter_path=*.cluster.auto_shrink_voting_configuration
# 查看投票配置
GET /_cluster/state?filter_path=metadata.coordination.voting_config
# 查看在线主资格节点
GET /_cat/nodes?v&h=name,node.role,master
手动管理投票配置 #
当禁用自动收缩时,可以使用退休 API:
# 1. 添加投票配置排除
POST /_cluster/voting_config_exclusions/node_name
# 2. 等待节点从投票配置移除
GET /_cluster/state?filter_path=metadata.coordination.voting_config_exclusions
# 3. 节点安全移除后,清理排除
DELETE /_cluster/voting_config_exclusions
注意事项 #
- 动态更新:此配置为动态配置,可在线修改
- 默认启用:默认启用自动收缩,适合大多数场景
- 最小节点数:自动收缩保持至少 3 个(或 1 个)投票节点
- 主节点优先:当前主节点始终保留在投票配置中
- 手动管理:禁用自动收缩时需手动使用退休 API





