跳至主要内容
前往文档
⌘U
Weaviate 数据库

使用 Weaviate 的 APIs 和工具开发 AI 应用

部署

部署、配置和维护 Weaviate 数据库

Weaviate Agents

使用 Weaviate 构建和部署智能代理

Weaviate Cloud

在云端管理和扩展 Weaviate

更多资源

集成
贡献者指南
活动 & 工作坊
Weaviate Academy

需要帮助?

Weaviate Logo询问 AI 助手⌘K
社区论坛

副本移动

v1.32 中添加

除了设置初始复制因子之外,您还可以主动管理 Weaviate 集群中分片副本的放置。这对于在扩展、停用节点或优化数据局部性之后重新平衡数据非常有用。副本移动是通过一组专用的 RESTful API 端点或通过下面描述的客户端库 API 进行管理的。

当启动副本移动时,它只会更改该分片的复制因子,而不会更改整个集合。集合具有特定的复制因子,但分片(集合的一个子集)可以拥有自己的复制因子,该因子可能不同。如果进行了副本复制操作,则可以将其递增。

检查分片状态

在启动任何移动之前,您可能需要检查副本的当前分布。您可以检索整个集合或其特定分片的碎片化状态。

py docs  API 文档
更多信息文档中的代码片段反映了最新的客户端库和 Weaviate 数据库版本。请查看 发行说明 以获取特定版本。

如果某个片段无法工作或您有任何反馈,请打开一个 GitHub issue
sharding_state = client.cluster.query_sharding_state(
collection=collection_name,
# shard=shard_name, # Optional: specify a shard to filter results
)

print(f"Shards in '{collection_name}': {[s.name for s in sharding_state.shards]}")
for shard in sharding_state.shards:
print(f"Nodes for shard '{shard.name}': {shard.replicas}")
代码输出
Shards in 'MyReplicatedDocCollection': ['0QK7V2bbAHQ2', 'arxzWNklLIU7', 'w5OcBGbNvRt4']
Nodes for shard '0QK7V2bbAHQ2': ['node3', 'node1']
Nodes for shard 'arxzWNklLIU7': ['node1', 'node2']
Nodes for shard 'w5OcBGbNvRt4': ['node2', 'node3']

启动副本移动

通过指定源节点、目标节点、集合名称、分片 ID 和操作类型(MOVECOPY)来复制或移动分片副本。

py docs  API 文档
更多信息文档中的代码片段反映了最新的客户端库和 Weaviate 数据库版本。请查看 发行说明 以获取特定版本。

如果某个片段无法工作或您有任何反馈,请打开一个 GitHub issue
from weaviate.cluster.models import ReplicationType

operation_id = client.cluster.replicate(
collection=collection_name,
shard=shard_name,
source_node=source_node_name,
target_node=target_node_name,
replication_type=ReplicationType.COPY, # For copying a shard
# replication_type=ReplicationType.MOVE, # For moving a shard
)
print(f"Replication initiated, ID: {operation_id}")
代码输出
Replication initiated, ID: 32536c0e-09e1-4ea1-a2c5-e85af10a9d58

检查复制操作的状态

分片复制操作是异步的。可以查询操作状态,并可以选择查看完整的操作历史记录。

py docs  API 文档
更多信息文档中的代码片段反映了最新的客户端库和 Weaviate 数据库版本。请查看 发行说明 以获取特定版本。

如果某个片段无法工作或您有任何反馈,请打开一个 GitHub issue
op_status = client.cluster.replications.get(
uuid=operation_id,
include_history=True
)
print(f"Status for {operation_id}: {op_status.status}")
print(f"History for {operation_id}: {op_status.status_history}")
代码输出
Status for f771aae1-f3c4-4fac-bae6-90597e8c70bd: ReplicateOperationStatus(state=<ReplicateOperationState.FINALIZING: 'FINALIZING'>, errors=[])
History for f771aae1-f3c4-4fac-bae6-90597e8c70bd: [ReplicateOperationStatus(state=<ReplicateOperationState.REGISTERED: 'REGISTERED'>, errors=[]), ReplicateOperationStatus(state=<ReplicateOperationState.HYDRATING: 'HYDRATING'>, errors=[])]
注意

移动操作可以具有以下状态之一

  • 已注册
  • 正在水合
  • 正在最终化
  • 正在脱水
  • 已准备就绪
  • 已取消

要了解有关复制状态的更多信息,请查看 概念:复制架构

列出复制操作

列出所有正在进行和已完成的操作。可以按节点、集合和分片进行过滤。

py docs  API 文档
更多信息文档中的代码片段反映了最新的客户端库和 Weaviate 数据库版本。请查看 发行说明 以获取特定版本。

如果某个片段无法工作或您有任何反馈,请打开一个 GitHub issue
all_ops = client.cluster.replications.list_all()
print(f"Total replication operations: {len(all_ops)}")

filtered_ops = client.cluster.replications.query(
collection=collection_name,
target_node=target_node_name,
)
print(
f"Filtered operations for collection '{collection_name}' on '{target_node_name}': {len(filtered_ops)}"
)
代码输出
Total replication operations: 1
Filtered operations for collection 'MyReplicatedDocCollection' on 'node3': 1

取消复制操作

如果可能,将停止该操作。如果成功取消,其状态将更改为 已取消

py docs  API 文档
更多信息文档中的代码片段反映了最新的客户端库和 Weaviate 数据库版本。请查看 发行说明 以获取特定版本。

如果某个片段无法工作或您有任何反馈,请打开一个 GitHub issue
client.cluster.replications.cancel(uuid=operation_id)

删除复制操作

从日志中删除复制操作。如果操作正在进行中,则首先将其取消。

py docs  API 文档
更多信息文档中的代码片段反映了最新的客户端库和 Weaviate 数据库版本。请查看 发行说明 以获取特定版本。

如果某个片段无法工作或您有任何反馈,请打开一个 GitHub issue
client.cluster.replications.delete(uuid=operation_id)

删除所有复制操作

从日志中删除所有复制操作。如果任何操作正在进行中,则首先将其取消。

py docs  API 文档
更多信息文档中的代码片段反映了最新的客户端库和 Weaviate 数据库版本。请查看 发行说明 以获取特定版本。

如果某个片段无法工作或您有任何反馈,请打开一个 GitHub issue
client.cluster.replications.delete_all()

更多资源

问题和反馈

如果您有任何问题或反馈,请在 用户论坛 中告诉我们。