目标:
迁移过程基于以下 Redis 命令:
SCAN 命令有一个很好的特性,它可以保证在第一个 SCAN 命令之前设置的所有 key 最终都会返回,但有时会返回多次。我们可以执行 3 阶段迁移来模拟复制。
整个迁移过程基于以下命令 SCAN、PTTL、DUMP、RESTORE、DELETE。仅向导入服务器代理发送 RESTORE 命令,因此为了获得更好的性能,应在迁移服务器代理中执行此扫描和传输。
由于扫描和传输在服务器代理和 Redis 上都占用了大量的 CPU 资源,因此最好在importing proxy上处理其他工作负载。因此,一开始我们将所有插槽(slots)直接转移到importing proxy。
此时,importing proxy 仍然只有一小部分数据。当它需要处理新添加的 slots 上的命令时,需要在处理请求之前使用 PTTL、DUMP、RESTORE 从迁移的服务器代理中拉取数据。它还需要发送 DELETE 来删除 key。
请注意,对于不会删除 key 的任何命令,由于它是幂等的,因此对同一 key 多次 RESTORE 仍然是正确的。所以仅仅让 importing proxy 来拉数据不会导致任何不一致。
但是对于那些可能删除 DEL、EXPIRE、KPOP 等 key 的命令,只让 importing proxy 拉取数据可能会导致以下情况:
因此,在提取数据时,需要将其与
因此,我们需要在 importing proxy 中锁定 key,并且需要 migrating proxy 帮助我们发送数据而不是从importing proxy中拉取数据,以便对该 key 的操作只能按顺序处理。
因此,在迁移过程中,迁移和导入 proxy 的工作量非常平衡。migrating proxy 使用 130% 的 CPU,importing proxy使用 80% 的 CPU。
而且迁移 1G 数据只用了不到一分钟。
在测试中,在迁移的同时进行基准测试,吞吐量从 50k 减少到 28k 并逐渐增加到 40k。这是因为在迁移和importing proxy中,SCAN、DUMP、RESTORE 会在 Redis 中消耗大量吞吐量。但是一旦 key 被迁移到导入服务器代理,它只需要在请求之前发送一个额外的 EXISTS 命令。
提交迁移后,吞吐量将翻倍。
本文名称:聊聊Undermoon-RedisClusterSlots迁移
文章地址:http://www.csdahua.cn/qtweb/news1/330501.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网