6.9. RBD 镜像功能
为所有镜像正确更新 last_copied_object_number
值
在以前的版本中,因为一个实现缺陷,last_copied_object_number
值只针对完全分配的镜像被正确更新。这会导致 last_copied_object_number
值对于任何稀疏镜像不正确,在突然 rbd-mirror 守护进程重启时会丢失镜像复制进度。
在这个版本中,为所有镜像和 rbd-mirror 守护进程重启正确更新 last_copied_object_number
值,镜像会从之前停止的位置恢复复制。
当镜像被提升为主时,现有调度会生效
在以前的版本中,由于 ill-sidered 优化,现有调度不会在镜像提升后生效,从而导致基于快照的镜像过程没有为最近提升的镜像启动。
在这个版本中,优化会导致这个问题被删除,当镜像被提升为主,基于快照的镜像过程会如预期时,现有调度会生效。
基于快照的镜像过程不再被取消
在以前的版本中,因为内部竞争条件,rbd mirror snapshot schedule add
命令将被取消。如果没有可用于其他现有计划,则基于快照的镜像流程不会启动受影响的镜像。
在这个版本中,竞争条件已被修复,基于快照的镜像过程会如预期启动。
如果远程镜像不是主镜像,则不再尝试 replay 或 resync
在以前的版本中,由于一个实施缺陷,即使远程镜像不是主镜像,也会尝试重播或重新同步。这会导致基于快照的镜像运行到 livelock,并持续报告 "failed to unlink local peer from remote image" 错误。
在这个版本中,当远程镜像不是主时,实施缺陷已被修复,不会尝试重播或重新同步,则不会报告任何错误。
在二级集群上的 rbd-mirror 守护进程使用的镜像快照不会被删除
在以前的版本中,因为内部竞争条件,从属集群中 rbd-mirror 守护进程所使用的镜像快照将被删除,从而导致受影响镜像停止基于快照的镜像过程,报告了 "sit-brain" 错误。
在这个版本中,镜像快照队列会长度扩展,镜像快照清理过程会相应修改。辅助集群上的 rbd-mirror 守护进程使用的镜像快照不再被删除,基于快照的镜像进程不会停止。
如果所有者在 schedule_request_lock()
期间被锁定,逻辑不再会导致 RBD 镜像崩溃
在以前的版本中,在 schedule_request_lock()
中,对于已锁定的所有者,块设备镜像将崩溃,镜像同步将停止。
在这个版本中,如果所有者已被锁定,则 schedule_request_lock()
会正常中止,且块设备镜像不会崩溃。
镜像复制不再停止并出现 incomplete local non-primary snapshot
错误
在以前的版本中,由于一个实施缺陷,在突然的 rbd-mirror 守护进程重启时,镜像复制会停止,并显示 incomplete local non-primary snapshot
错误。
在这个版本中,镜像复制不再会停止并出现 incomplete local non-primary snapshot
错误。这个过程可以正常工作。