CODIS原理 之 数据迁移流程[2.X]

2023-11-16

CODIS原理 之 数据迁移流程[2.X]

作者:邹祁峰
邮箱:Qifeng.zou.job@hotmail.com
博客:http://blog.csdn.net/qifengzou
日期:2016.08.03 10:42:40
转载请注明来自”祁峰”的CSDN博客

CODIS有一个非常重要的特点就是:支持热扩容。即:在不停止服务的情况下,实现集群设备的增减。其实现此功能的技术基础就是“数据迁移功能”。数据迁移的主要目的是将属于某codis-server组的slot的所有数据迁移到另外一个codis-server组中。


1 创建迁移任务

创建迁移任务有2中方式:一种是直接通过codis-config界面提交迁移任务;另一种是通过给codis-config发送post请求的方式提交迁移任务。但是这两种方式的处理流程是一致的。大体流程如下:
这里写图片描述

流程说明:
1.迁移指令中指明了将编号(from~to)所有slot都迁移到指定codis-server分组。
2.迁移任务的最小单位是slot。因此,本流程将会创建(to - from + 1)个slot迁移任务放入zk任务队列中。
3.注意:如果存在未完成的迁移任务时,则禁止提交新的迁移任务。

2 发起迁移指令

程序coddis-config dashboard会启一个task协程专门用来从zk中获取迁移任务,再将其转换为迁移指令发送给源codis-server程序。其大体流程如下:
这里写图片描述

3.执行迁移操作

源codis-server收到来自codis-config dashboard的slot迁移指令后,则会该slot下的所有key迁移到目的codis-server服务。其大体流程如下:
这里写图片描述

注意事项:
1.源codis-server收到slot迁移指令后,会与目的codis-server直接建立tcp连接。该tcp连接通道用于传输被迁移数据。
2.一旦某key迁移完成,则立即删除。

4 发起强制迁移

正在执行某slot迁移的过程中,同时codis-proxy可能会收到操作属于该slot下key的请求。如果直接去目的codis-server下操作,可能出现该key还未迁移完成,依然还在源codis-server; 如果直接去源codis-server下操作,可能出现该key已经迁移完成。为了防止此类情况的出现,只要该slot处于迁移状态,则不管三七二十一,程序codis-proxy都会给源codis-server发送”迁移该key”的迁移指令。其大体处理流程如下:
这里写图片描述

5 自动负载均衡

由于配置失误,或则后期增减容量导致各分组slot分配不均。一旦出现这种情况,有2种解决方案:1.使用人工提交迁移任务 2.使用自动负载均衡功能。第一种方案的处理已在上面的章节说明,在此无需赘述。第二种方案的大体处理流程如下:
这里写图片描述

注意事项:
1.使用自动负载均衡需要满足一个前提:所有codis-server的分组master必须配置maxmemory。
2.各组codis-server分配多少个slot是由其maxmemory决定。比如:A组maxmemory为10G, B组maxmory为1G,进行自动均衡处理后,A组分配的slot会是B组的10倍。
3.自动负载均衡并不会达到绝对意义上的均衡,其只做到maxmemory与分配的slot个数的比例均衡。无法达到操作次数的均衡。
4.自动负载均衡的处理过程中,如果发现存在maxmemory与分配的slot个数比例不均衡时,则会进行发起slot迁移的操作。达到均衡目的的前提下,此过程中会做到尽量减少slot的迁移。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CODIS原理 之 数据迁移流程[2.X] 的相关文章

随机推荐

  • 程序的基本结构

    程序的基本结构 1 顺序结构 2 选择结构 选择结构如下图所示 当条件成立时 执行模块A否则执行模块B 3 循环结构 循环结构又两种形式当型循环和直道型循环 当型循环 先判断条件 条件成立就反复执行程序模块 当条件不成立时结束循环 当型循环
  • Django视图类View源码分析

    Django视图类View源码分析 一 视图函数 django中的视图函数 就是视图功能由函数实现 响应 或渲染模板后返回HTML 或直接返回JSON数据 参数 视图函数的第一个参数必须是request对象 文本响应 from django
  • 纯干货:接口自动化测试的思考和技术实现

    一 思考 什么是自动化测试 自动化测试是把人为驱动转换成计算机驱的测试行为 人对于接口的测试行为 第一步 理解业务需求 一般来说可以从需求理解接口的行为和描述 行为 当什么情况 做什么操作 发生什么事情 描述 情况是什么 操作是什么等 第二
  • Rust- 类型系统

    The type system in Rust is one of its core features supporting a range of different types and providing a powerful syste
  • 为什么String要被设置为不可变类?百日百题(2/100)

    问题引入 我们学习了String的数据类型 知道了String类型一旦生成就不会再发生改变 这就是他的不可变性 也就意味着每次修改都会产生一个新的String变量 对性能影响较大 StringBuilder和StringBuffer产生的对
  • [Hyperf]源码阅读:验证器验证规则

    hyperf validation src Concerns ValidatesAttributes php
  • 单向链表的Java实现,以及相关函数。

    如上图所示就是单向链表的示意图 下面就是Java实现单向链表的基本过程与源码 可以跑起来的 1 创建一个节点类 package com wpl snglelink public class Node public Object getDat
  • c++_函数返回值,引用&作为函数返回值

    catalog 函数返回值 返回值是 const T 返回值的类型是 T 返回的对象是 局部对象 实现原理 返回的对象是 全局对象 实例 函数返回值 返回值是 const T ST operator ST a ST b return ST
  • 每日一题——求解连通分量个数

    题目描述 从键盘接收图的顶点集 关系集 创建无向图 第一行依次输入图的顶点个数n 关系个数k 以空格隔开 顶点个数 lt 20 第二行依次输入顶点值 类型为字符 接下去有k行 每行为两个字符 u 和 v 表示节点u 和 v 连通 格式为 u
  • 麦克输入

    如图所示 单端输入只有一个输入引脚ADCIN 使用公共地GND作为电路的返回端 ADC的采样值 ADCIN电压 GND的电压 0V 这种输入方式优点就是简单 缺点是如果vin受到干扰 由于GND电位始终是0V 所以最终ADC的采样值也会随着
  • Ros noetic 机器人坐标记录运动路径和发布 实战教程(B)

    前言 网上记录Path的写入文件看了一下还挺多的 有用yaml作为载体文件 也有用csv文件的路径信息 也有用txt来记录当前生成的路径信息 载体不重要 反正都是记录的方式 本文主要按yaml的方式写入 本文将撰写csv方式的文件写入格式
  • mysql查询每年每个月的数据_mysql 查询一年中每个月份的数据量

    这个是用mid 函数 截取字符串 mysql gt select count as 数量 mid time 1 7 as month from my add where time between 2015 01 01 00 00 00 an
  • 华为OD机试真题-字符串解密 【2023.Q1】

    题目内容 题目描述 有两个字符串string1和string2 string1是一个被加扰的字符串 小写英文字母 a z 和数字字符 0 9 组成 而加扰字符串由 0 9 a f 组成 string1里面可能包含0个或多个加扰子串 剩下可能
  • Dell服务器IDRAC管理界面配置NTP时间同步

    登录idrac管理界面 1 点击 iDRAC设置 2 在属性里面点击 设置 3 时区和NTP 4 在NTP1这项填写NTP的服务器地址5 右下角点击 应用 过几分钟就生效了
  • 回归指令_SWAP字节交换指令详解

    说明 本篇文章是为下一篇文章 在触摸屏上演示7段数码管指令而预先讲解的一个指令 正文 字节交换指令应该算一个比较重要的指令 特别PLC要和一些HMI设备通讯 在HMI上录入数据的时候 就有可能需要经常使用这个指令 来看一下西门子200PLC
  • 基于二叉树的算术表达式计算与实现

    非常有趣的一道题 代码参考 https blog csdn net over786 article details 17395567 把一个正常的表达式写成这个样子咯 问题的难点在于整数有多位 而且你要判断好哪个符号作为根 比如5 3 4
  • 华为OD机试 Python 限载货物数最小值

    描述 在火车站旁的货运站 小明负责调度2K辆中转车 其中K辆用于干货 K辆用于湿货 每批到站的货物来自不同的供货商 需要按照顺序装入中转车 注意 一个供货商的货物只能装在一辆车上 不能分开 但是 一辆车可以放多个供货商的货物 问题是 要让所
  • 检测洛达芯片的软件_洛达1562A与1536u与杰里有哪些区别?购买前10条须知

    相信大家应该对AirPodspro已经不陌生了 那么对于廉价版本的华强北AirPodspro有多少了解呢 芯片 洛达 中科蓝讯 杰里 恒炫 惴昱 等等 壳料 彩创壳 原厂彩创壳 资江壳 高美特壳料等等 喇叭也有好多种喇叭 至于大家为什么在各
  • (牛客网)华为机试(二)

    牛客网 华为机试题集解答 在解题前先分享一波oj刷题的固定格式代码 方便输入时使用 import java util import java io public class Main 一定要使用Main作为类名 public static
  • CODIS原理 之 数据迁移流程[2.X]

    CODIS原理 之 数据迁移流程 2 X 分类 源码剖析设计思路 1173 0 作者 邹祁峰 邮箱 Qifeng zou job hotmail com 博客 http blog csdn net qifengzou 日期 2016 08