基于段文件的主从复制

Elasticsearch BES

  • 邀测版存储计算分离套餐介绍
  • 功能发布记录
  • 产品描述
    • 基本概念
    • 关键特性
    • 产品介绍
    • 产品性能
      • 4核16GB512GB通用型的3个数据节点实例基准性能指标
      • 8核16GB512GB计算型的3个数据节点实例基准性能测试
      • 16核32GB512GB计算型的3个数据节点实例基准性能指标
      • 4核8GB512GB计算型的3个数据节点实例基准性能测试
      • 8核32GB512GB通用型的3个数据节点实例基准性能指标
      • 16核64GB512GB通用型的3个数据节点实例基准性能指标
      • 概述
  • Python-SDK
    • 实例
    • 异常
    • 日志
    • 节点配置类型
    • 版本更新记录
    • 快速入门
    • 集群
    • BesClient
    • 安装SDK工具包
    • 概述
  • Kibana
    • Kibana使用指南
  • Logstash
    • Logstash使用指南
    • 实例管理
      • 实例详情信息
      • 实例扩缩容
      • 管道管理
      • 创建实例
      • 实例列表
      • 删除实例
  • 开发指南
    • Elasticsearch Restful API
    • 通过其他客户端访问Elasticsearch
    • Elasticsearch Java客户端
      • Low Level REST Client
      • Rest Client操作向量索引示例
      • Java REST Client
      • High Level REST Client
  • Java-SDK
    • 实例
    • 异常
    • 日志
    • 节点配置类型
    • 版本更新记录
    • 快速入门
    • 集群
    • BesClient
    • 安装SDK工具包
    • 概述
  • 向量检索特性
    • 资源规划
    • 关键概念
    • 应用场景
    • 快速入门
    • 算法介绍
    • 能力简介
    • 向量数据库
    • 操作指南
      • 写入和查询数据
      • 训练模型
      • 向量索引缓存管理
      • 创建索引
      • 基于Reciprocal Rank Fusion的融合查询
      • 参数优化
      • 7.4版本兼容说明
    • 最佳实践
      • 调优建议
      • BES RAG 最佳实践:基于LangChain+BES的私域知识的QA问答系统
    • 迁移方案
      • ES dense vector 切换为BES方案
  • ELK
    • 基于ELK构建日志分析系统
  • 增强特性
    • 慢查询隔离
    • 百度NLP中文分词词典动态更新
    • 百度NLP中文分词插件
    • 基于段文件的主从复制
    • 基于BOS的冷热数据分离
  • 快速入门
    • 访问Elasticsearch服务
    • 导入数据并搜索
    • 创建集群
    • 集群资源评估
  • 典型实践
    • 使用BSC将BOS中的数据导入Es
    • 使用BSC将Kafka中的数据导入Es
    • 基于CCR实现多集群跨地域高可用
    • 基于节点磁盘介质的冷热数据分离
  • 服务等级协议SLA
    • 数据迁移服务协议
    • BES服务等级协议SLA(V1.0)
  • 常见问题
    • Spark访问Es常见问题
    • Elasticsearch系统常见问题
    • 常见问题总览
  • 产品定价
    • 预付费
    • 计费说明
    • 配置变更费用说明
    • 后付费
  • API文档
    • 概述
    • 自动续费相关接口
      • 续费列表
      • 查看自动续费
      • 查看自动续费规则列表
      • 续费操作
      • 更新自动续费规则
      • 删除自动续费规则
      • 创建自动续费规则
    • 插件配置接口
      • 上传自定义插件
      • 卸载系统默认插件
      • 上传nlp词典
      • 安装系统默认插件
      • 获取默认和自定义插件列表
      • 卸载自定义插件
      • 安装自定义插件
      • 删除自定义插件
      • 查看nlp词典
    • 日志管理相关接口
      • 查看日志导出任务记录
      • 创建日志导出任务
      • 日志设置
      • 日志查询
    • 标签接口
      • 查询标签列表
      • 批量新增标签
      • 单个集群更新标签
    • 智能巡检接口
      • 查看近7天已完成的巡检任务列表
      • 近七天巡检概况
      • 查看手动巡检任务的配置
      • 集群巡检授权
      • 列举所有可选巡检项
      • 查询是否可以提交巡检任务
      • 最新一次巡检概况
      • 查看集群是否开启自动巡检
      • 修改手动巡检任务的配置
      • 开启或关闭自动巡检
      • 提交手动巡检任务
      • 查询今日已执行完成的手动巡检次数
      • 查看某巡检任务的执行状态和结果
    • 集群相关接口
      • 获取操作历史信息
      • 删除集群
      • 新增节点类型
      • 开启和关闭https
      • 查看集群详情信息
      • 重置密码
      • EIP绑定
      • EIP解绑
      • 是否开启Grafana监控
      • 获取数据量观测数据
      • 查看集群列表
      • 上传NLP分词词典
      • 创建集群
      • 智能评估
      • 集群blb信息
      • 用户可用代金券列表
      • 停止集群
      • 扩容集群
      • 启动集群
      • 重启集群
    • 实例相关接口
      • 批量停止实例
      • 启动实例
      • 查看缩容节点列表
      • 数据迁移
      • 数据迁移系统建议
      • 批量启动实例
      • 数据迁移回滚
      • 停止实例
      • 数据迁移节点列表
      • 删除实例
    • 配置修改相关接口
      • 获取同义词文件列表
      • 查看集群配置
      • 删除同义词配置文件
      • 上传同义词配置文件
      • 配置修改
    • 定时调度
      • 更新定时调度任务
      • 删除定时调度任务
      • 创建和更新定时调度任务
      • 查看定时调度任务
  • API3.0
    • 集群相关接口
      • 删除集群
  • Elasticsearch
    • 用户手册
      • YML参数配置
      • 权限管理
      • 智能巡检
      • 数据迁移
      • 基于BOS的快照与恢复
      • 集群列表
      • 账号使用说明
      • 多可用区部署
      • 定时调度
      • 数据量观测
      • 日志查询
        • 日志查询(旧)
        • 日志查询(新)
        • 日志导出
        • 查询语法
      • 集群配置
        • 配置同义词
      • 插件管理
        • 上传与安装自定义插件
        • Elasticsearch插件列表
        • 系统默认插件
          • analysis-pinyin拼音分词插件
          • IK中文分词插件与动态更新词典
          • compression-zstd插件
          • CCR插件
          • 限流插件
          • 动态同义词插件
          • 简繁体转换插件
          • ingest attachment插件
          • SQL插件
      • 配置变更
        • 节点数据迁移
        • 集群变配说明与建议
        • 集群扩缩容
      • 版本升级
        • 升级版本
        • 内核版本说明
        • 升级检查
      • 集群监控报警
        • 监控查看及指标说明
        • 配置报警
      • 集群管理
        • 集群重启
        • 变更HTTPS协议用户指南
        • 节点启停
        • 查看集群信息
        • 集群创建
        • 公网绑定
        • 修改集群名称
        • 跨可用区迁移集群
        • 集群删除
        • 集群列表
        • 自动续费
        • 密码重置
        • ES服务区域代码
      • 账户管理
        • 多用户访问控制
所有文档
menu
没有找到结果,请重新输入

Elasticsearch BES

  • 邀测版存储计算分离套餐介绍
  • 功能发布记录
  • 产品描述
    • 基本概念
    • 关键特性
    • 产品介绍
    • 产品性能
      • 4核16GB512GB通用型的3个数据节点实例基准性能指标
      • 8核16GB512GB计算型的3个数据节点实例基准性能测试
      • 16核32GB512GB计算型的3个数据节点实例基准性能指标
      • 4核8GB512GB计算型的3个数据节点实例基准性能测试
      • 8核32GB512GB通用型的3个数据节点实例基准性能指标
      • 16核64GB512GB通用型的3个数据节点实例基准性能指标
      • 概述
  • Python-SDK
    • 实例
    • 异常
    • 日志
    • 节点配置类型
    • 版本更新记录
    • 快速入门
    • 集群
    • BesClient
    • 安装SDK工具包
    • 概述
  • Kibana
    • Kibana使用指南
  • Logstash
    • Logstash使用指南
    • 实例管理
      • 实例详情信息
      • 实例扩缩容
      • 管道管理
      • 创建实例
      • 实例列表
      • 删除实例
  • 开发指南
    • Elasticsearch Restful API
    • 通过其他客户端访问Elasticsearch
    • Elasticsearch Java客户端
      • Low Level REST Client
      • Rest Client操作向量索引示例
      • Java REST Client
      • High Level REST Client
  • Java-SDK
    • 实例
    • 异常
    • 日志
    • 节点配置类型
    • 版本更新记录
    • 快速入门
    • 集群
    • BesClient
    • 安装SDK工具包
    • 概述
  • 向量检索特性
    • 资源规划
    • 关键概念
    • 应用场景
    • 快速入门
    • 算法介绍
    • 能力简介
    • 向量数据库
    • 操作指南
      • 写入和查询数据
      • 训练模型
      • 向量索引缓存管理
      • 创建索引
      • 基于Reciprocal Rank Fusion的融合查询
      • 参数优化
      • 7.4版本兼容说明
    • 最佳实践
      • 调优建议
      • BES RAG 最佳实践:基于LangChain+BES的私域知识的QA问答系统
    • 迁移方案
      • ES dense vector 切换为BES方案
  • ELK
    • 基于ELK构建日志分析系统
  • 增强特性
    • 慢查询隔离
    • 百度NLP中文分词词典动态更新
    • 百度NLP中文分词插件
    • 基于段文件的主从复制
    • 基于BOS的冷热数据分离
  • 快速入门
    • 访问Elasticsearch服务
    • 导入数据并搜索
    • 创建集群
    • 集群资源评估
  • 典型实践
    • 使用BSC将BOS中的数据导入Es
    • 使用BSC将Kafka中的数据导入Es
    • 基于CCR实现多集群跨地域高可用
    • 基于节点磁盘介质的冷热数据分离
  • 服务等级协议SLA
    • 数据迁移服务协议
    • BES服务等级协议SLA(V1.0)
  • 常见问题
    • Spark访问Es常见问题
    • Elasticsearch系统常见问题
    • 常见问题总览
  • 产品定价
    • 预付费
    • 计费说明
    • 配置变更费用说明
    • 后付费
  • API文档
    • 概述
    • 自动续费相关接口
      • 续费列表
      • 查看自动续费
      • 查看自动续费规则列表
      • 续费操作
      • 更新自动续费规则
      • 删除自动续费规则
      • 创建自动续费规则
    • 插件配置接口
      • 上传自定义插件
      • 卸载系统默认插件
      • 上传nlp词典
      • 安装系统默认插件
      • 获取默认和自定义插件列表
      • 卸载自定义插件
      • 安装自定义插件
      • 删除自定义插件
      • 查看nlp词典
    • 日志管理相关接口
      • 查看日志导出任务记录
      • 创建日志导出任务
      • 日志设置
      • 日志查询
    • 标签接口
      • 查询标签列表
      • 批量新增标签
      • 单个集群更新标签
    • 智能巡检接口
      • 查看近7天已完成的巡检任务列表
      • 近七天巡检概况
      • 查看手动巡检任务的配置
      • 集群巡检授权
      • 列举所有可选巡检项
      • 查询是否可以提交巡检任务
      • 最新一次巡检概况
      • 查看集群是否开启自动巡检
      • 修改手动巡检任务的配置
      • 开启或关闭自动巡检
      • 提交手动巡检任务
      • 查询今日已执行完成的手动巡检次数
      • 查看某巡检任务的执行状态和结果
    • 集群相关接口
      • 获取操作历史信息
      • 删除集群
      • 新增节点类型
      • 开启和关闭https
      • 查看集群详情信息
      • 重置密码
      • EIP绑定
      • EIP解绑
      • 是否开启Grafana监控
      • 获取数据量观测数据
      • 查看集群列表
      • 上传NLP分词词典
      • 创建集群
      • 智能评估
      • 集群blb信息
      • 用户可用代金券列表
      • 停止集群
      • 扩容集群
      • 启动集群
      • 重启集群
    • 实例相关接口
      • 批量停止实例
      • 启动实例
      • 查看缩容节点列表
      • 数据迁移
      • 数据迁移系统建议
      • 批量启动实例
      • 数据迁移回滚
      • 停止实例
      • 数据迁移节点列表
      • 删除实例
    • 配置修改相关接口
      • 获取同义词文件列表
      • 查看集群配置
      • 删除同义词配置文件
      • 上传同义词配置文件
      • 配置修改
    • 定时调度
      • 更新定时调度任务
      • 删除定时调度任务
      • 创建和更新定时调度任务
      • 查看定时调度任务
  • API3.0
    • 集群相关接口
      • 删除集群
  • Elasticsearch
    • 用户手册
      • YML参数配置
      • 权限管理
      • 智能巡检
      • 数据迁移
      • 基于BOS的快照与恢复
      • 集群列表
      • 账号使用说明
      • 多可用区部署
      • 定时调度
      • 数据量观测
      • 日志查询
        • 日志查询(旧)
        • 日志查询(新)
        • 日志导出
        • 查询语法
      • 集群配置
        • 配置同义词
      • 插件管理
        • 上传与安装自定义插件
        • Elasticsearch插件列表
        • 系统默认插件
          • analysis-pinyin拼音分词插件
          • IK中文分词插件与动态更新词典
          • compression-zstd插件
          • CCR插件
          • 限流插件
          • 动态同义词插件
          • 简繁体转换插件
          • ingest attachment插件
          • SQL插件
      • 配置变更
        • 节点数据迁移
        • 集群变配说明与建议
        • 集群扩缩容
      • 版本升级
        • 升级版本
        • 内核版本说明
        • 升级检查
      • 集群监控报警
        • 监控查看及指标说明
        • 配置报警
      • 集群管理
        • 集群重启
        • 变更HTTPS协议用户指南
        • 节点启停
        • 查看集群信息
        • 集群创建
        • 公网绑定
        • 修改集群名称
        • 跨可用区迁移集群
        • 集群删除
        • 集群列表
        • 自动续费
        • 密码重置
        • ES服务区域代码
      • 账户管理
        • 多用户访问控制
  • 文档中心
  • arrow
  • ElasticsearchBES
  • arrow
  • 增强特性
  • arrow
  • 基于段文件的主从复制
本页目录
  • 主从复制模式
  • 优势
  • 适用场景
  • 创建基于段复制的索引
  • 查看段复制的执行状态
  • 相关优化项
  • 依据primary数量进行shard分配
  • 背压机制
  • 拷贝限速

基于段文件的主从复制

更新时间:2025-08-20

概述

主从复制模式

  • Elasticsearch的主从复制模式,是基于“文档复制”(document replication):当有增删改文档操作时,操作请求会先转发到主分片(primary shard),主分片在其本地构建索引,然后把这个操作请求转发给各副本分片(replica shard)所在节点,每个节点分别构建各自的索引数据。
  • 百度云Elasticsearch提供一种基于“段复制”(segment replication)的主从同步机制:只有主分片会执行构建索引数据的过程,构建完成后,把新增的索引数据直接复制给各个副本分片。由于Elasticsearch的索引数据底层是lucene的段(segment)文件,因此这种数据复制模式被称为“段复制”。
  • 您可根据使用需求,在创建新索引时选择主从复制模式为“文档复制”或“段复制”。

优势

  • “文档复制”每个副本所在节点各自构建索引,因此集群整体的cpu开销更大。相比而言,“段复制”会节省这部分cpu压力,从而增加集群的写入吞吐量。不过,“段复制”也会加大集群内部的网络通信压力,以及搜索滞后性。
  • 详细对比数据可参考本页末的性能测试。

适用场景

  1. 写入QPS较大、CPU使用率较高的集群。
  2. 业务对搜索滞后性不敏感。典型使用场景为日志检索。

使用方式

创建基于段复制的索引

主从复制模式可基于集群粒度或索引粒度来配置。配置只影响新创建的索引,且索引一旦创建后,该索引的复制模式不能再修改。

配置项 类型 说明
集群粒度 cluster.indices.replication.strategy String 取值"DOCUMENT"或"SEGMENT"(区分大小写),默认值为"DOCUMENT"
索引粒度 index.replication.type String 取值"DOCUMENT"或"SEGMENT"(区分大小写),默认值为"DOCUMENT"
  • 集群粒度设置使用示例:
JSON
1PUT /_cluster/settings
2{
3  "persistent": {
4    "cluster.indices.replication.strategy": "SEGMENT"
5  }
6}

此后新创建的索引,如果不显式指定索引粒度的复制模式,则以集群粒度的配置为准。

  • 索引粒度设置使用示例:
JSON
1PUT /my-index1
2{
3  "settings": {
4    "index.replication.type": "SEGMENT" 
5  }
6}

查看段复制的执行状态

您可查看开启了段复制的索引的执行状态,并可以指定索引:

JSON
1GET _cat/segment_replication?v
2GET _cat/segment_replication/{index}?v

请求参数(可选):

参数名 类型 说明
shards String 指定要查看的shard id列表,如"0,1,2"。默认不填,即查看全部shard。
active_only Boolean 只查看正在执行段复制的shard。默认false。

响应结果说明:

参数名 说明
shardId shard id
target_node 复制目标节点名
target_host 复制目标节点ip
checkpoints_behind 副本分片落后主分片的checkpoint数(一个checkpoint对应一个lucene段)
bytes_behind 副本分片落后主分片的字节数
current_lag 自主分片刷新(但目前副本尚未同步)到当前的时间
last_completed_lag 上一次主从段复制过程的执行耗时
rejected_requests 拒绝请求数

相关优化项

如果启用了“段复制”模式,推荐您了解以下的集群粒度设置,可能会帮助您更好地使用集群。

依据primary数量进行shard分配

Elasticsearch默认的shard分配策略,是使各数据节点的shard数量趋于相同,但不区分primary shard和replica shard。

而如果您开启了段复制功能,且集群内全部索引或绝大部分索引都是基于段复制的,那么仅primary shard有较大的写入压力,因此我们提供了一种根据primary shard数量分配的策略配置:

配置项 类型 说明
cluster.routing.allocation.balance.prefer_primary Boolean 默认值false。如果设置为true,新分配shard的策略会尽量使得各节点的primary shard数量均匀。

不过,这个设置只影响新建索引时的shard分配策略。如果开启设置前,所有shard已经被分配均衡,不会因为primary shard的分布不均衡而触发重分配。在其它场景下,比如故障恢复中,该设置也不会影响shard的重分配。

背压机制

我们提供一种分片级背压机制:当副本分片落后于主分片超过一定阈值时,可以动态地拒绝对这个分片的写入请求,直到下降到阈值以下时,又可以恢复写入。如果开启集群的段复制背压机制,则所有段复制模式的索引都会启用背压机制。

配置项如下:

配置项 类型 说明
segrep.pressure.enabled Boolean 集群背压机制的开关。默认值true。
segrep.pressure.time.limit Time Unit 副本分片从主分片复制所等待的最长时间。默认值5分钟。
segrep.pressure.checkpoint.limit Integer 副本分片落后于主分片的checkpoint(一个checkpoint对应一个lucene段)的最大数量。默认为4。
segrep.pressure.replica.stale.limit Float 陈旧副本的比例阈值。当一个副本的"segrep.pressure.time.limit"和"segrep.pressure.checkpoint.limit"两者都达到了阈值,则认为这个副本为“陈旧的”(stale)。当一个分片的各个副本中,陈旧比例达到阈值,则这个分片开始拒绝写入。默认值0.5,即50%。

拷贝限速

节点间的段复制过程中,可能存在网络带宽占用较大的问题,默认开启一定的速度限制。而如果您需要尽可能降低主从复制的延迟,可以提高限速阈值,或取消限速。

配置项 类型 说明
indices.replication.max_bytes_per_sec String 每个节点的段复制传输速度限制。默认值"200mb"。如果置为"0mb"则不限速。

内核版本要求

Elasticsearch版本7.10.2,内核版本1.7.0及以上。


性能测试

测试集群包括5个es数据节点(bes.g3.c8m32),机型详细规格如下:

配置项 类型
核数 8
内存 32GB
磁盘类型 增强型ssd pl1
磁盘容量 512GB
网卡带宽 3Gbps

使用esrally测试工具,数据集为nyc_taxis,每组测试写入8000万条数据(单shard存储占用约16GB)。写入时,每bulk请求10000条文档,并发数为10。

测试结果如下:

primary replica err-rate(%) 文档复制mean throughput(docs/s) 段复制mean throughput(docs/s) Percent difference 文档复制mean service time(ms) 段复制mean service time(ms) Percent difference
5 1 0 219864.67 315401.21 43.45% 496.78 339.61 -31.64%
10 1 0 251130.60 321112.98 27.87% 437.10 330.37 -24.42%
20 1 0 247969.20 326191.10 31.55% 446.63 318.40 -28.71%
40 1 0 252686.17 329312.61 30.32% 417.75 306.47 -26.64%

结论:

在上述集群配置条件下,与文档复制相比,段复制可以明显提升集群写入性能,写入吞吐量可提升约30%。

上一篇
百度NLP中文分词插件
下一篇
基于BOS的冷热数据分离