Doris副本管理实战如何用Placement Policy实现跨机架数据部署在分布式数据库的实际运维中数据的高可用性和容灾能力往往是核心诉求。尤其对于金融、政务等对数据可靠性要求极高的场景如何确保即使单个机架或机房完全宕机业务仍能持续运行是每个Doris管理员必须掌握的技能。本文将从一个真实的生产案例出发带你深入理解如何通过Placement Policy精细控制副本分布实现真正意义上的跨机架容灾部署。1. 理解Doris副本分布的基础逻辑在开始配置Placement Policy之前我们需要先理清Doris默认的副本分布行为。Doris的副本分布遵循几个基本原则节点级容错优先系统会优先确保同一个Tablet的多个副本分布在不同BE节点上存储介质均衡会自动考虑SSD和HDD等不同存储介质的均衡使用标签感知可选当配置了节点标签后可以基于标签进行更智能的分布默认情况下如果没有特别配置Doris会采用简单的随机分布策略。这种策略虽然能保证基本的容错需求但无法满足更复杂的容灾场景。例如-- 查看当前集群BE节点的分布情况 SHOW BACKENDS\G -- 输出示例 *************************** 1. row *************************** BackendId: 10001 Host: 192.168.1.101 HeartbeatPort: 9050 BePort: 9060 HttpPort: 8040 BrpcPort: 8060 LastStartTime: 2023-05-15 14:23:01 LastHeartbeat: 2023-06-20 09:45:23 Alive: true SystemDecommissioned: false ClusterDecommissioned: false TabletNum: 2345 DataUsedCapacity: 1.2 TB AvailCapacity: 5.7 TB TotalCapacity: 8.0 TB Tag: {location: zone1:rack1}2. 配置机架感知的节点标签要实现跨机架部署首先需要为每个BE节点打上正确的机架标签。Doris使用JSON格式的Tag系统来描述节点的物理位置信息。典型的标签层级包括数据中心/可用区zone机架rack主机host配置方法如下-- 为BE节点添加标签需在每个BE的配置文件be.conf中添加 tag.location zone1:rack1:be1 -- 修改后需要重启BE节点使配置生效注意标签的命名应当遵循一致的规范建议采用zone:rack:host的三级结构便于后续策略配置。标签配置完成后可以通过以下命令验证-- 查看所有BE节点的标签分布 SHOW BACKENDS\G3. 创建并应用Placement PolicyPlacement Policy是Doris 1.2版本引入的重要特性它允许管理员通过SQL直接定义副本的分布规则。下面我们通过一个完整的示例来演示如何创建和应用策略。3.1 创建资源与放置策略假设我们有一个包含6个BE节点的集群分布在两个机架rack1和rack2上我们希望确保每个Tablet的3个副本均匀分布在两个机架上单个机架故障时仍有至少2个可用副本-- 第一步创建资源规范 CREATE RESOURCE CROSS_RACK_POLICY PROPERTIES ( replication_num 3, tag.location zone1:rack1:be1,zone1:rack1:be2,zone1:rack1:be3,zone1:rack2:be4,zone1:rack2:be5,zone1:rack2:be6 ); -- 第二步创建表时应用该策略 CREATE TABLE order_analysis ( order_id BIGINT, user_id BIGINT, amount DECIMAL(16,2), order_time DATETIME ) DISTRIBUTED BY HASH(order_id) BUCKETS 32 PROPERTIES ( replication_allocation CROSS_RACK_POLICY, storage_medium SSD );3.2 验证副本分布创建表后我们需要验证副本是否按照预期分布在不同的机架上-- 查看表的Tablet分布情况 SHOW TABLET FROM order_analysis LIMIT 1\G -- 输出示例 *************************** 1. row *************************** TabletId: 10085 ReplicaId: 10086 BackendId: 10001 SchemaHash: 123456789 Version: 2 LstSuccessVersion: 2 LstFailedVersion: -1 LstFailedTime: NULL LocalDataSize: 356 RemoteDataSize: 0 RowCount: 1200 State: NORMAL LstConsistencyCheckTime: NULL CheckVersion: -1 VersionCount: 1 PathHash: 987654321 MetaUrl: http://192.168.1.101:8040/api/meta/header/10085 CompactionStatus: http://192.168.1.101:8040/api/compaction/show?tablet_id10085为了更直观地查看跨机架分布情况可以使用以下查询-- 统计不同机架的副本分布 SELECT t.tablet_id, GROUP_CONCAT(DISTINCT JSON_EXTRACT(b.tag, $.location) ORDER BY JSON_EXTRACT(b.tag, $.location)) AS locations FROM information_schema.tablets t JOIN backends b ON t.backend_id b.backend_id WHERE t.table_name order_analysis GROUP BY t.tablet_id LIMIT 10;4. 高级配置技巧与优化4.1 多级容灾策略对于特别关键的业务数据可能需要实现机房级容灾。此时可以采用三级标签策略-- 跨机房部署示例 CREATE RESOURCE CROSS_DC_POLICY PROPERTIES ( replication_num 3, tag.location dc1:zone1:rack1:be1,dc1:zone1:rack2:be2,dc2:zone1:rack1:be3 ); -- 应用策略 ALTER TABLE financial_transactions SET (replication_allocation CROSS_DC_POLICY);4.2 动态调整策略随着业务发展可能需要调整副本分布策略。Doris支持在线修改-- 创建新的策略 CREATE RESOURCE NEW_RACK_POLICY PROPERTIES ( replication_num 3, tag.location zone1:rack3:be7,zone1:rack3:be8,zone1:rack4:be9,zone1:rack4:be10 ); -- 平滑迁移 ALTER TABLE order_analysis SET (replication_allocation NEW_RACK_POLICY);迁移过程中Doris会自动调度副本到新位置期间不会影响服务可用性。4.3 性能优化参数跨机架部署会引入额外的网络开销需要调整相关参数-- 增加副本同步超时时间 SET GLOBAL replica_sync_rpc_timeout_ms 60000; -- 调整调度器并发度 SET GLOBAL tablet_sched_slot_num_per_path 4; -- 优化跨机架传输 SET GLOBAL thrift_rpc_timeout_ms 30000;5. 常见问题排查与解决方案5.1 副本分布不均衡现象部分机架上的副本数量明显多于其他机架排查方法-- 查看各机架的副本分布 SELECT JSON_EXTRACT(tag, $.location) AS location, COUNT(*) AS replica_count FROM backends b JOIN tablets t ON b.backend_id t.backend_id GROUP BY location;解决方案检查BE节点的标签配置是否一致确认资源策略中的标签覆盖了所有必要节点手动触发均衡调度-- 触发手动均衡 ADMIN SET FRONTEND CONFIG (enable_balance true);5.2 副本同步延迟现象跨机架副本同步速度慢影响写入性能优化方案# 在BE节点上优化网络参数 sudo sysctl -w net.core.rmem_max16777216 sudo sysctl -w net.core.wmem_max16777216 sudo sysctl -w net.ipv4.tcp_rmem4096 87380 16777216 sudo sysctl -w net.ipv4.tcp_wmem4096 16384 16777216同时调整Doris参数-- 增加RPC线程数 SET GLOBAL brpc_io_thread_count 16; -- 调整日志批量提交大小 SET GLOBAL write_buffer_size 104857600; -- 100MB5.3 策略应用失败现象修改Placement Policy后副本没有按预期迁移排查步骤检查调度器状态SHOW PROC /tablet_scheduler;查看具体调度错误SHOW PROC /tablet_scheduler/pending_tablets; SHOW PROC /tablet_scheduler/running_tablets;常见原因目标节点存储空间不足网络连通性问题并发调度任务数达到上限
Doris副本管理实战:如何用Placement Policy实现跨机架数据部署
Doris副本管理实战如何用Placement Policy实现跨机架数据部署在分布式数据库的实际运维中数据的高可用性和容灾能力往往是核心诉求。尤其对于金融、政务等对数据可靠性要求极高的场景如何确保即使单个机架或机房完全宕机业务仍能持续运行是每个Doris管理员必须掌握的技能。本文将从一个真实的生产案例出发带你深入理解如何通过Placement Policy精细控制副本分布实现真正意义上的跨机架容灾部署。1. 理解Doris副本分布的基础逻辑在开始配置Placement Policy之前我们需要先理清Doris默认的副本分布行为。Doris的副本分布遵循几个基本原则节点级容错优先系统会优先确保同一个Tablet的多个副本分布在不同BE节点上存储介质均衡会自动考虑SSD和HDD等不同存储介质的均衡使用标签感知可选当配置了节点标签后可以基于标签进行更智能的分布默认情况下如果没有特别配置Doris会采用简单的随机分布策略。这种策略虽然能保证基本的容错需求但无法满足更复杂的容灾场景。例如-- 查看当前集群BE节点的分布情况 SHOW BACKENDS\G -- 输出示例 *************************** 1. row *************************** BackendId: 10001 Host: 192.168.1.101 HeartbeatPort: 9050 BePort: 9060 HttpPort: 8040 BrpcPort: 8060 LastStartTime: 2023-05-15 14:23:01 LastHeartbeat: 2023-06-20 09:45:23 Alive: true SystemDecommissioned: false ClusterDecommissioned: false TabletNum: 2345 DataUsedCapacity: 1.2 TB AvailCapacity: 5.7 TB TotalCapacity: 8.0 TB Tag: {location: zone1:rack1}2. 配置机架感知的节点标签要实现跨机架部署首先需要为每个BE节点打上正确的机架标签。Doris使用JSON格式的Tag系统来描述节点的物理位置信息。典型的标签层级包括数据中心/可用区zone机架rack主机host配置方法如下-- 为BE节点添加标签需在每个BE的配置文件be.conf中添加 tag.location zone1:rack1:be1 -- 修改后需要重启BE节点使配置生效注意标签的命名应当遵循一致的规范建议采用zone:rack:host的三级结构便于后续策略配置。标签配置完成后可以通过以下命令验证-- 查看所有BE节点的标签分布 SHOW BACKENDS\G3. 创建并应用Placement PolicyPlacement Policy是Doris 1.2版本引入的重要特性它允许管理员通过SQL直接定义副本的分布规则。下面我们通过一个完整的示例来演示如何创建和应用策略。3.1 创建资源与放置策略假设我们有一个包含6个BE节点的集群分布在两个机架rack1和rack2上我们希望确保每个Tablet的3个副本均匀分布在两个机架上单个机架故障时仍有至少2个可用副本-- 第一步创建资源规范 CREATE RESOURCE CROSS_RACK_POLICY PROPERTIES ( replication_num 3, tag.location zone1:rack1:be1,zone1:rack1:be2,zone1:rack1:be3,zone1:rack2:be4,zone1:rack2:be5,zone1:rack2:be6 ); -- 第二步创建表时应用该策略 CREATE TABLE order_analysis ( order_id BIGINT, user_id BIGINT, amount DECIMAL(16,2), order_time DATETIME ) DISTRIBUTED BY HASH(order_id) BUCKETS 32 PROPERTIES ( replication_allocation CROSS_RACK_POLICY, storage_medium SSD );3.2 验证副本分布创建表后我们需要验证副本是否按照预期分布在不同的机架上-- 查看表的Tablet分布情况 SHOW TABLET FROM order_analysis LIMIT 1\G -- 输出示例 *************************** 1. row *************************** TabletId: 10085 ReplicaId: 10086 BackendId: 10001 SchemaHash: 123456789 Version: 2 LstSuccessVersion: 2 LstFailedVersion: -1 LstFailedTime: NULL LocalDataSize: 356 RemoteDataSize: 0 RowCount: 1200 State: NORMAL LstConsistencyCheckTime: NULL CheckVersion: -1 VersionCount: 1 PathHash: 987654321 MetaUrl: http://192.168.1.101:8040/api/meta/header/10085 CompactionStatus: http://192.168.1.101:8040/api/compaction/show?tablet_id10085为了更直观地查看跨机架分布情况可以使用以下查询-- 统计不同机架的副本分布 SELECT t.tablet_id, GROUP_CONCAT(DISTINCT JSON_EXTRACT(b.tag, $.location) ORDER BY JSON_EXTRACT(b.tag, $.location)) AS locations FROM information_schema.tablets t JOIN backends b ON t.backend_id b.backend_id WHERE t.table_name order_analysis GROUP BY t.tablet_id LIMIT 10;4. 高级配置技巧与优化4.1 多级容灾策略对于特别关键的业务数据可能需要实现机房级容灾。此时可以采用三级标签策略-- 跨机房部署示例 CREATE RESOURCE CROSS_DC_POLICY PROPERTIES ( replication_num 3, tag.location dc1:zone1:rack1:be1,dc1:zone1:rack2:be2,dc2:zone1:rack1:be3 ); -- 应用策略 ALTER TABLE financial_transactions SET (replication_allocation CROSS_DC_POLICY);4.2 动态调整策略随着业务发展可能需要调整副本分布策略。Doris支持在线修改-- 创建新的策略 CREATE RESOURCE NEW_RACK_POLICY PROPERTIES ( replication_num 3, tag.location zone1:rack3:be7,zone1:rack3:be8,zone1:rack4:be9,zone1:rack4:be10 ); -- 平滑迁移 ALTER TABLE order_analysis SET (replication_allocation NEW_RACK_POLICY);迁移过程中Doris会自动调度副本到新位置期间不会影响服务可用性。4.3 性能优化参数跨机架部署会引入额外的网络开销需要调整相关参数-- 增加副本同步超时时间 SET GLOBAL replica_sync_rpc_timeout_ms 60000; -- 调整调度器并发度 SET GLOBAL tablet_sched_slot_num_per_path 4; -- 优化跨机架传输 SET GLOBAL thrift_rpc_timeout_ms 30000;5. 常见问题排查与解决方案5.1 副本分布不均衡现象部分机架上的副本数量明显多于其他机架排查方法-- 查看各机架的副本分布 SELECT JSON_EXTRACT(tag, $.location) AS location, COUNT(*) AS replica_count FROM backends b JOIN tablets t ON b.backend_id t.backend_id GROUP BY location;解决方案检查BE节点的标签配置是否一致确认资源策略中的标签覆盖了所有必要节点手动触发均衡调度-- 触发手动均衡 ADMIN SET FRONTEND CONFIG (enable_balance true);5.2 副本同步延迟现象跨机架副本同步速度慢影响写入性能优化方案# 在BE节点上优化网络参数 sudo sysctl -w net.core.rmem_max16777216 sudo sysctl -w net.core.wmem_max16777216 sudo sysctl -w net.ipv4.tcp_rmem4096 87380 16777216 sudo sysctl -w net.ipv4.tcp_wmem4096 16384 16777216同时调整Doris参数-- 增加RPC线程数 SET GLOBAL brpc_io_thread_count 16; -- 调整日志批量提交大小 SET GLOBAL write_buffer_size 104857600; -- 100MB5.3 策略应用失败现象修改Placement Policy后副本没有按预期迁移排查步骤检查调度器状态SHOW PROC /tablet_scheduler;查看具体调度错误SHOW PROC /tablet_scheduler/pending_tablets; SHOW PROC /tablet_scheduler/running_tablets;常见原因目标节点存储空间不足网络连通性问题并发调度任务数达到上限