--- title: "自动收缩投票配置" date: 2026-02-05 lastmod: 2026-02-05 description: "控制投票配置自动收缩的配置项说明" tags: ["集群配置", "投票管理", "自动调整"] summary: "配置项作用 # 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 管理 收缩规则 # 自动收缩的具体规则:" --- ## 配置项作用 `cluster.auto_shrink_voting_configuration` 配置项控制集群是否自动收缩投票配置(Voting Configuration)。当有资格作为主节点的节点加入或离开集群时,此配置决定系统是否自动调整投票配置以维持最佳的容错能力。 ## 配置项类型 该配置项为**动态配置**,可以在运行时通过集群设置 API 进行修改。 ## 默认值 ``` true ``` ## 是否必需 **可选配置项**(有默认值) ## 取值范围 ``` true 或 false ``` ## 配置格式 ```yaml # 默认配置(自动收缩) 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. 默认配置(推荐) ```yaml cluster.auto_shrink_voting_configuration: true ``` **适用场景:** - 大多数集群配置 - 需要自动容错 - 频繁节点变更 - 希望系统自动处理节点故障 ### 2. 手动管理 ```yaml cluster.auto_shrink_voting_configuration: false ``` **适用场景:** - 需要精确控制投票配置 - 自定义容错策略 - 避免自动收缩 - 特殊业务需求 ## 推荐设置建议 | 集群类型 | 推荐值 | 说明 | |---------|-------|------| | 生产环境 | true | 自动容错 | | 测试环境 | true | 便于管理 | | 大规模集群 | true | 自动调整 | | 特殊需求 | false | 手动控制 | ## 自动收缩与手动管理对比 ``` 自动收缩模式 (true): 优点: ✓ 自动适应节点变化 ✓ 无需手动干预 ✓ 维持最佳容错能力 ✓ 减少运维负担 缺点: ✗ 可能不符合特殊需求 ✗ 自动收缩可能不可预期 手动管理模式 (false): 优点: ✓ 完全控制投票配置 ✓ 可自定义策略 ✓ 行为可预测 缺点: ✗ 需要手动管理 ✗ 可能遗漏重要操作 ✗ 增加运维复杂度 ``` ## 动态配置示例 ```bash # 启用自动收缩 PUT /_cluster/settings { "transient": { "cluster.auto_shrink_voting_configuration": true } } # 禁用自动收缩 PUT /_cluster/settings { "transient": { "cluster.auto_shrink_voting_configuration": false } } ``` ## 监控建议 ```bash # 查看当前配置 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: ```bash # 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 ``` ## 注意事项 1. **动态更新**:此配置为动态配置,可在线修改 2. **默认启用**:默认启用自动收缩,适合大多数场景 3. **最小节点数**:自动收缩保持至少 3 个(或 1 个)投票节点 4. **主节点优先**:当前主节点始终保留在投票配置中 5. **手动管理**:禁用自动收缩时需手动使用退休 API