Share server 迁移¶
Share server 迁移是一种功能,允许管理员将 share server 及其所有 share 和快照迁移到新的目标位置。
与 share 迁移一样,share server 迁移也采用了两阶段方法,可以控制完成操作的合适时机,通常会导致客户端中断。
迁移 share server 的过程涉及对 share server 的各种操作,但可以通过调用两个主要操作来实现:“start”和“complete”。您需要从“start”操作开始,并等待服务完成迁移的第一阶段,然后才能调用“complete”操作。当 share server 正在进行第一阶段时,可以选择“cancel”它,或者获取进度报告。
提供了一个新的“migration check”操作,用于协助进行迁移前的阶段,通过验证目标主机是否可以完成迁移,并提供驱动程序支持的兼容功能输出。
Share server 迁移由 share 驱动程序驱动,这意味着源和目标后端都必须支持此功能,并且驱动程序必须以有效的方式提供此操作。
Server 迁移工作流程¶
在实际开始迁移之前,可以使用 migration_check 操作来验证目标主机和请求的功能是否受驱动程序支持。如果答案是 compatible 等于 True,则可以继续进行迁移过程,否则您需要识别冲突的参数,或者在更复杂的情况下,直接在 manila 日志中搜索消息。可用的功能包括:writable、nondisruptive、preserve_snapshots 和 new_share_network_id,这些功能在 Migration check 和 migration start 参数 中详细说明。
迁移过程通过调用 migration_start 操作来启动给定的 share server。此操作将启动迁移的第一阶段,将所有数据从源复制到目标,包括所有 share、它们的访问规则,甚至如果控制目标主机的驱动程序支持快照,也包括快照。
对于所有正在进行的迁移,您可以选择使用 migration_get_progress 操作请求 share server 迁移的当前状态,以检索数据复制的总体进度及其当前任务状态。如果驱动程序支持,您还可以通过发出 migration_cancel 并等待所有状态变为 active 和 available 来取消此操作。
在完成数据复制后,第一阶段完成,然后可以启动下一个操作 migration_complete,以完成迁移。 migration_complete 操作通常会中断客户端访问,因为 share 的导出位置将更改。新的导出位置将从在新目标处配置的新的 share server 派生,该 share server 使用不同的网络分配。
一个新的字段 task_state 可用于 share server 模型中,以帮助跟踪在此过程中执行的操作。下表显示了每个阶段的预期 task_state,以及它们的执行顺序和后端正在执行的操作的简要说明。
序列 |
task_state |
描述 |
|---|---|---|
1 |
migration_starting |
所有初始验证都已通过,所有 share 和快照在迁移结束之前都无法修改。 |
2 |
migration_in_progress |
目标主机已启动迁移过程。如果驱动程序不支持保持 |
3 |
migration_driver_starting |
已调用驱动程序以启动 share server 的迁移过程。Manila 将等待驱动程序的响应。 |
4 |
migration_driver_in_progress |
驱动程序接受了请求并开始将数据复制到新的 share server。它将保持此状态直到数据复制完成。 |
5 |
migration_driver_phase1_done |
驱动程序已完成数据复制,并准备好完成迁移。 |
除了 share server 迁移进度(百分比)和当前任务状态外,API 还提供目标 share server ID。或者,您可以通过查询 share server 以查找设置为正在迁移的 share server ID 的 source_share_server_id 来检查目标 share server ID。在整个迁移过程中,源 share server 将保持 server_migrating 状态,而目标 share server 将保持 server_migrating_to 状态。
如果在迁移的第一阶段发生错误,源 share server 的状态将恢复为 active,而目标服务器的状态将设置为 error。两个 share server 都会将其 task_state 更新为 migration_error。所有 share 和快照都更新为 available,任何 read-only 规则都将重置为允许写入 share。
序列 |
task_state |
描述 |
|---|---|---|
1 |
migration_completing |
目标主机已启动处理操作,并且调用驱动程序以完成 share server 迁移。 |
2 |
migration_success |
迁移已成功完成。所有 share 和快照都 |
完成 share server 迁移后,所有 share 和快照的状态都将更新为 available。源 share server 状态设置为 inactive,目标 share server 设置为 active。
如果在迁移的第二阶段发生错误,源和目标 share server 都会将其状态更新为 error,以及它们的 share 和快照,因为无法推断它们是否正常工作以及迁移的当前状态。在这种情况下,您需要手动验证所有 share server 资源的健康状况并手动修复其状态。两个 share server 都会将其 task_state 设置为 migration_error。
序列 |
task_state |
描述 |
|---|---|---|
1 |
migration_cancel_in_progress |
目标主机已启动取消过程。它将保持此状态,直到驱动程序完成所有正在进行的任务。 |
2 |
migration_cancelled |
迁移已成功取消。 |
如果在迁移取消操作期间发生错误,源 share server 的状态将恢复为 active,而目标服务器的状态将更新为 error。两个 share server 都会将其 task_state 设置为 migration_error。所有 share 和快照的状态都更新为 available。
使用 share server 迁移 CLI¶
与 share server 迁移 API 交互的可用命令如下
migration_check:调用 migration check 操作以验证提供的目标主机是否与请求的操作及其参数兼容。输出显示目标主机是否兼容以及后端支持的迁移功能。$ manila share-server-migration-check f3089d4f-89e8-4730-b6e6-7cab553df071 stack@dummy2 --nondisruptive False --writable True --preserve_snapshots True +------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Property | Value | +------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | compatible | True | | requested_capabilities | {'writable': 'True', 'nondisruptive': 'False', 'preserve_snapshots': 'True', 'share_network_id': None, 'host': 'stack@dummy2'} | | supported_capabilities | {'writable': True, 'nondisruptive': False, 'preserve_snapshots': True, 'share_network_id': 'ac8e103f-c21a-4442-bddc-fdadee093099', 'migration_cancel': True, 'migration_get_progress': True} | +------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
在
supported_capabilities中的share_network_id属性将对应于提供的--new_share_network选项的值,否则它将与源 share 网络相同。在输出中,可以识别目标主机是否支持migration_cancel和migration_get_progress操作,然后再启动迁移。请求参数与migration_check和migration_start操作相同,并在下一节中详细说明。注意
后端可能会使用此操作来执行许多其他验证,例如存储兼容性、可用空间检查、share-type extra-specs 验证等。
compatible等于False的答案可能不包含实际的冲突。您必须检查manila-share日志以获取更多详细信息。
migration_start:启动到提供的目标主机的 share server 迁移。此命令启动迁移的第一阶段,这是一个异步操作,可能需要很长时间才能完成,具体取决于 share server 的大小以及存储在复制所有数据方面的效率。$ manila share-server-migration-start f3089d4f-89e8-4730-b6e6-7cab553df071 stack@dummy2 --nondisruptive False --writable True --preserve_snapshots True
参数说明在下一节中详细介绍。
注意
此操作不支持迁移具有副本或属于 share 组的 share server。
注意
可以使用
migration-get-progress命令检索当前迁移状态和进度。注意
此命令没有输出。
migration_complete:完成已经完成第一阶段的迁移。此操作无法取消,并且可能导致在所有 share 迁移到新的 share server 后中断客户端访问。$ manila share-server-migration-complete f3089d4f-89e8-4730-b6e6-7cab553df071 +-----------------------------+--------------------------------------+ | Property | Value | +-----------------------------+--------------------------------------+ | destination_share_server_id | f3fb808f-c2a4-4caa-9805-7caaf55c0522 | +-----------------------------+--------------------------------------+
migration_cancel:取消正在进行的 share server 迁移。此操作只能在迁移仍在迁移的第一阶段时启动。$ manila share-server-migration-cancel f3089d4f-89e8-4730-b6e6-7cab553df071
注意
此命令没有输出。
migration_get_progress:获取 share server 迁移的当前进度信息。$ manila share-server-migration-get-progress f3089d4f-89e8-4730-b6e6-7cab553df071 +-----------------------------+--------------------------------------+ | Property | Value | +-----------------------------+--------------------------------------+ | total_progress | 50 | | task_state | migration_driver_in_progress | | destination_share_server_id | f3fb808f-c2a4-4caa-9805-7caaf55c0522 | +-----------------------------+--------------------------------------+
Migration check 和 migration start 参数¶
Share server migration_check 和 migration_start 操作具有特定的参数,这些参数的语义如下。其中,只有 new_share_network 是可选参数。
share_server_id:将要迁移的 share server 的 ID。destination_host:share server 应该迁移到的目标主机,格式为host@backend。preserve_snapshots:强制执行快照保留对于请求的迁移是强制性的。如果目标主机不支持它,则操作将被拒绝。如果此参数设置为False,则驱动程序支持的功能将定义是否保留快照。注意
如果驱动程序不支持保留快照,但至少有一个 share 具有快照,则操作将失败,您需要手动删除剩余的快照才能继续。
writable:强制指定请求的迁移操作是否应保持源共享服务器可写。如果目标主机不支持此功能,则操作将被拒绝。如果将此参数设置为False,则驱动程序支持的功能将定义所有共享是否将保持可写状态。nondisruptive:强制指定迁移过程中是否应保持客户端连接。如果目标主机不支持此功能,则操作将被拒绝。如果将此参数设置为False,则驱动程序支持的功能将定义所有客户端是否将保持连接状态。
为了恰当地将共享服务器迁移到不同的主机,可能需要更改新的共享服务器要使用的目标共享网络。在这种情况下,可以使用以下可选参数提供新的共享网络:
new_share_network_id:指定在设置新的共享服务器时应使用的共享网络的 ID。注意
由于将根据目标主机的可用区自动选择,因此无法选择目标共享网络子网。如果新的共享网络在目标主机的可用区中没有共享网络子网,或者没有默认子网,则操作将失败。
配置¶
为了使共享服务器迁移正常工作,所有 manila-share 节点上的 manila 配置文件中必须存在兼容的后端配置节。
某些驱动程序可能会提供一些特定于驱动程序的配置选项,可以更改这些选项以适应特定的工作负载。有关更多详细信息,请查看 共享驱动程序 文档。
重要说明¶
一旦共享服务器的迁移开始,用户将看到所有相关资源的 status 状态更改为
server_migrating,这将阻止任何其他共享操作,例如添加或删除访问规则、创建或删除快照、调整大小等。由于这是一个驱动程序辅助的迁移,因此无法保证在迁移失败后会清理目标共享服务器。因此,如果发生任何故障,目标共享服务器将始终更新为
error。在成功迁移后,对源共享服务器也做出了相同的假设,manila 会将其状态更新为inactive,以避免将其用于新的共享。如果在迁移的第二阶段发生故障,您需要手动识别源共享服务器的当前状态,以便将其恢复为
active。如果共享服务器及其所有资源仍然正常,您需要使用reset_statusAPI 为每个受影响的资源重置状态。迁移过程中的每个步骤都保存在共享服务器模型中的
task_state字段中。如果由于某种原因,状态未在发生故障后设置为migration_error,则需要使用reset_task_stateAPI 重置它,以解锁新的共享操作。发生故障后,目标共享服务器的状态将被更新为
error,并将继续指向原始源共享服务器。这可以帮助您在并行运行多个迁移时识别失败的共享服务器。