十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Milvus 主集群不可用时如何用 CDC Force Failover 快速恢复写入

Milvus 主集群不可用时如何用 CDC Force Failover 快速恢复写入 Milvus 主集群不可用时如何用 CDC Force Failover 快速恢复写入【免费下载链接】milvusMilvus is a high-performance, cloud-native vector database built for scalable vector ANN search项目地址: https://gitcode.com/GitHub_Trending/mi/milvus当你基于 Milvus CDC 搭好了主备复制拓扑例如cluster-a (primary) - cluster-b (standby)而主集群突然整体不可用、短期内恢复无望时Force Failover 可以把备集群直接提升为独立的 Primary让写入尽快恢复。代价是故障前已经写入旧主集群、但尚未复制过去的部分数据可能丢失丢失范围由故障发生时刻的 CDC lag 决定。适用前提已经存在主备复制关系即备集群持续接收来自主集群的 CDC 变更。CDC 自 Milvus v2.6 起可用于构建主备容灾拓扑基于 Milvus Operator 部署复制环境的示例要求 Milvus v2.6.16 及以上、Milvus Operator v1.3.4 及以上见 CDC Replication Quick Start。你已经知道备集群的 cluster ID、地址、token 和 pchannels。如果主集群仍能响应请求应改用 Planned Switchover它等待剩余数据复制完成后再切换角色避免数据丢失。先判断该不该用 Force FailoverForce failover 只在以下条件同时成立时才使用原主集群无法响应请求主集群无法在可接受的时间内恢复恢复写入比等待旧主集群更重要。两种切换方式的取舍目标Planned switchoverForce failover主集群不可达时恢复写入不支持支持避免数据丢失保证不保证需要旧主集群能响应需要不需要执行前确认清单在发送提升请求之前逐项确认原主集群确实不可用你已经决定不再等待主集群恢复应用流量可以切换到备集群你的流量自动化DNS、负载均衡、编排配置不会在主集群恢复后把写入重新指回旧主集群备集群的 cluster ID、地址、token、pchannels 都已就位。其中最重要的是防止脑裂split brainForce Failover 之后只允许被提升的备集群接收应用写入。构造 Force Failover 配置构造一个只包含备集群、不包含任何复制拓扑的配置并设置force_promoteTrue。以下变量沿用 Quick Start 中的命名约定如果集群 B 是原来的 targetstandby集群那么cluster_b_*对应target_*的连接信息定义方式见 Quick Start 的 Step 4# 如果集群 B 是原来的 target 集群 cluster_b_id target_cluster_id cluster_b_addr target_cluster_addr cluster_b_client_addr target_client_addr cluster_b_token target_cluster_token cluster_b_pchannels target_cluster_pchannels force_failover_config { clusters: [ { cluster_id: cluster_b_id, connection_param: { uri: cluster_b_addr, token: cluster_b_token, }, pchannels: cluster_b_pchannels, } ], cross_cluster_topology: [], force_promote: True, }注意cross_cluster_topology必须为空列表——提升后cluster-b是独立主集群不再有任何复制关系。cluster_b_pchannels必须与你集群的实际物理通道布局一致不要照抄示例值。将备集群提升为 Primary把请求发送给备集群不是旧主集群Force failover 不能在主集群上执行from pymilvus import MilvusClient client_b MilvusClient(uricluster_b_client_addr, tokencluster_b_token) try: client_b.update_replicate_configuration(**force_failover_config) finally: client_b.close()请求成功后cluster-b成为独立主集群并接受写入。文档说明该操作通常在数秒内完成具体取决于集群状态和备集群控制面的可用性。切换流量并验证写入提升成功后按顺序处理流量把写入流量指向cluster-b从写入端点、负载均衡器、DNS 记录与自动化配置中移除cluster-a验证cluster-b接受写入在cluster-a下线decommission之前保持其隔离状态。写入验证的文档示例集合名和字段需按你的部署替换client_b MilvusClient(uricluster_b_client_addr, tokencluster_b_token) try: client_b.insert( collection_nametest_collection, data[{id: 1, vector: [0.1] * 128}], ) finally: client_b.close()最终验证清单直接对提升后的集群检查cluster-b上写入成功读取能返回预期数据没有任何应用组件还在向cluster-a写入。旧主集群恢复后如何处置Force Failover 之后cluster-a应被下线处置即使它重新可达也不要向它发送应用写入。原因是它可能持有从未复制到cluster-b的数据而cluster-b在故障切换后可能已经包含新的写入两边数据已经分叉。也不要把cluster-a重新接回旧的复制拓扑——旧主集群不会自动重新加入。降低数据丢失窗口Force failover 的丢数据风险无法完全消除但文档给出以下可操作手段来缩小 CDC lag、减少可能丢失的数据量持续监控 CDC lag。Quick Start 提供了一个 PromQL 示例来估算 lag按通道比较最新已确认的 WAL timetick 与 CDC 最近复制的 timetick结果为秒如果你的 Prometheus 抓取了多个 Milvus 集群需要加namespace、app_kubernetes_io_instance等标签过滤避免混入其他集群的指标让备集群的规格能扛住主集群的写入速率保持跨集群网络低延迟、低丢包让应用写入保持幂等对故障切换后成功与否不确定的写入做重试只要主集群还能响应优先使用 planned switchover。几个容易误解的边界来自文档 FAQForce failover 不一定丢数据如果故障前所有写入都已复制完成则不丢只有存在 CDC lag 时滞后的那部分数据才可能丢失不能在主集群上执行 Force failover它面向备集群如果当前主集群可用走 planned switchover避免脑裂的唯一做法是让被提升的集群独占写入路径在旧主集群恢复并可能再次接流之前先把它从所有写入路径中移除。更多主备模型与两种切换方式的对比见 CDC Replication Overview。【免费下载链接】milvusMilvus is a high-performance, cloud-native vector database built for scalable vector ANN search项目地址: https://gitcode.com/GitHub_Trending/mi/milvus创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表