【入门篇】1.7 Redis 之 codis 入门介绍

news2024/10/7 4:34:34

文章目录

  • 1. 简介
  • 2. Codis的安装与配置
      • 下载
      • 编译源码安装
        • 1. 安装 Go 运行环境
        • 2. 设置编译环境
        • 3. 下载 Codis 源代码
        • 4. 编译 Codis 源代码
    • Docker 部署
  • 3. Codis的架构
    • Codis的架构图和组件
    • Codis的工作流程
  • 4. Codis的核心特性
    • 自动数据分片
    • 数据迁移
    • 高可用性
    • 全面支持Redis命令
    • 分布式锁和发布订阅
  • 5. Codis的高可用与故障恢复
    • Codis的高可用机制
    • 恢复Codis集群的故障节点
  • 6. Codis的使用场景和限制
    • Codis适合的使用场景
    • Codis的一些限制
  • 6. Codis 与Redis Cluster对比
  • 参考文档

在这里插入图片描述

1. 简介

Codis是由Wandou Labs(豌豆荚团队)开发的开源工具,用于解决在大数据环境下使用Redis所面临的挑战。Codis将多个Redis实例组织起来,形成一个统一的数据访问层,从而提供了高可用和分布式的特性,使得Redis能够更好地处理大数据和高并发的场景。

Codis的功能是基于Redis构建的。Redis是一种内存数据库,用于存储键值对数据。然而,当数据量或并发请求数量增长时,单个Redis实例可能会遇到性能瓶颈。Codis通过在多个Redis实例之间进行数据分片,解决了这个问题。另外,Codis还提供了一些其他的高级功能,如数据迁移、故障恢复等。

codis server:基于redis进行了二次开发的组件,负责数据的读写 codis proxy:面向客户端,代理客户端访问codis
server zookeeper 集群:保存元数据,如数据路由表信息,codis proxy信息 codis dashboard,codis
fe:codis dashboard提供维护codis server,codis proxy等功能,codis
fe提供web界面,方便管理人员使用。

通俗的理解Codis可以被视为一个强大的Redis集群解决方案,它提供了更多的功能,并且允许开发者以相似的方式操作Redis实例。在大规模数据处理和高并发环境下,Codis相对于单个Redis实例,可以提供更好的性能和扩展性。

在这里插入图片描述

2. Codis的安装与配置

下载

release binary文件安装

如果是重要的生产环境使用,尽量不要选择alpha、rc版本。 根据自己的部署平台,选择相应的文件下载即可。

编译源码安装

1. 安装 Go 运行环境

参考这里

安装完成后可以运行下列命令进行检测:

$ go version
go version go1.7.3 linux/amd64
2. 设置编译环境

注意 $GOPATH 是本机所有第三方库 go 项目所在目录,Codis 仅是其中之一。

添加 $GOPATH/bin$PATH,例如:PATH=$PATH:$GOPATH/bin

$ go env GOPATH
/home/codis/gopath
3. 下载 Codis 源代码

Codis 源代码需要下载到 $GOPATH/src/github.com/CodisLabs/codis

$ mkdir -p $GOPATH/src/github.com/CodisLabs
$ cd $_ && git clone https://github.com/CodisLabs/codis.git -b release3.2
4. 编译 Codis 源代码
  • 直接通过 make 进行编译,会看到如下输出:
$ cd $GOPATH/src/github.com/CodisLabs/codis
$ make
make -j -C extern/redis-3.2.8/
... ...
go build -i -o bin/codis-dashboard ./cmd/dashboard
go build -i -o bin/codis-proxy ./cmd/proxy
go build -i -o bin/codis-admin ./cmd/admin
go build -i -o bin/codis-fe ./cmd/fe

$ ls bin/
total 69124
drwxr-xr-x 4 codis codis     4096 Jan  4 14:55 assets
-rwxr-xr-x 1 codis codis 17600752 Jan  4 14:55 codis-admin
-rwxr-xr-x 1 codis codis 18416320 Jan  4 14:55 codis-dashboard
-rwxr-xr-x 1 codis codis  9498040 Jan  4 14:55 codis-fe
-rwxr-xr-x 1 codis codis 11057280 Jan  4 14:55 codis-proxy
-rwxr-xr-x 1 codis codis  4234432 Jan  4 14:55 codis-server
-rw-r--r-- 1 codis codis      148 Jan  4 14:55 version
... ...

$ cat bin/version
version = 2016-01-03 14:53:22 +0800 @51f06ae3b58a256a58f857f590430977638846a3
compile = 2016-01-04 15:00:17 +0800 by go version go1.5.2 linux/amd64

详细参考 https://github.com/CodisLabs/codis/blob/master/doc/tutorial_zh.md

通过web浏览器访问集群管理页面(fe地址:127.0.0.1:9090) 选择我们刚搭建的集群 codis-demo,在 Proxy 栏可看到我们已经启动的 Proxy, 但是 Group 栏为空,因为我们启动的 codis-server 并未加入到集群 添加 NEW GROUP,NEW GROUP 行输入 1,再点击 NEW GROUP 即可 添加 Codis Server,Add Server 行输入我们刚刚启动的 codis-server 地址,添加到我们刚新建的 Group,然后再点击 Add Server 按钮即可,如下图所示在这里插入图片描述
通过fe初始化slot
新增的集群 slot 状态是 offline,因此我们需要对它进行初始化(将 1024 个 slot 分配到各个 group),而初始化最快的方法可通过 fe 提供的 rebalance all slots 按钮来做,如下图所示,点击此按钮,我们即快速完成了一个集群的搭建。

rebalance_slots

Docker 部署

Codis 3.x 起,开始正式支持 Docker 部署。这就需要 codis-dashboard 以及 codis-proxy 能够外部的 listen 地址暴露出来并保存在外部存储中。

codis-proxy 增加了 --host-admin 以及 --host-proxy 参数;
codis-dashboard 增加了 --host-admin 参数;
以 codis-proxy 的 Docker 为例:

$ docker run --name "Codis-Proxy" -d -p 29000:19000 -p 21080:11080 codis-image \
    codis-proxy -c proxy.toml --host-admin 100.0.1.100:29000 --host-proxy 100.0.1.100:21080

codis-proxy 在启动后,会使用 --host-admin 和 --host-proxy 参数所指定的实际地址替换 Docker 内监听的地址,向 codis-dashboard 注册。这样,例如使用 Jodis 的过程中,客户端就能够通过 100.0.1.100:29000 来访问 proxy 实例。

codis-dashboard 也是相同的道理,会使用 --host-admin 地址向外部存储注册,这样 codis-fe 也能通过该地址正确的对 codis-dashboard 进行操作。

具体样例可以参考 scripts/docker.sh。

3. Codis的架构

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

Codis的架构图和组件

Codis的架构主要包含以下四个部分:

  1. Proxy:Proxy是Codis的核心组件,它负责请求的路由和负载均衡。用户的请求首先发送到Proxy,然后Proxy将请求转发到相应的Redis实例。
    在这里插入图片描述

  2. Group:Group是一组Redis实例,它们中的数据是一致的。每个Group含有一个Master节点和多个Slave节点,Master节点负责处理写请求,Slave节点用于处理读请求和故障恢复。
    在这里插入图片描述

  3. Dashboard:Dashboard是Codis的管理界面,它提供了一系列的管理和监控功能,如数据迁移、节点管理等。

  4. ZooKeeper:Zookeeper是一个开源的分布式协调服务,Codis使用它来存储和同步集群的状态信息。

Codis的工作流程

在这里插入图片描述

当一个请求发送到Codis时,以下是其大致的处理流程:

  1. Proxy接收到用户的请求。

  2. Proxy查询Zookeeper,获取到请求应该路由到哪个Group。

  3. Proxy将请求转发到对应Group的Master节点。

  4. Master节点处理请求,并将结果返回给Proxy。

  5. Proxy将结果返回给用户。

4. Codis的核心特性

自动数据分片

Codis支持自动的数据分片,能够将数据在多个Redis实例之间进行均匀分布,这样就可以有效地解决单个Redis实例的性能瓶颈。Codis的分片是基于Redis的Key进行的,每个Key会被哈希到一个Slot中,每个Slot对应一个Redis实例。

数据迁移

在某些场景下,可能需要增加或减少Redis实例数量以应对变化的负载。在这种情况下,Codis提供了数据迁移的功能。可以在Dashboard中方便地管理数据迁移的过程,Codis会自动进行数据的迁移和重分布,而这个过程对应用是透明的。

高可用性

Codis集群中的每个Redis实例都有一个或多个备份实例,当主实例发生故障时,备份实例可以立即接管请求,保证了服务的持续可用。Codis使用Zookeeper来检测和管理实例的状态,以实现快速的故障恢复。

全面支持Redis命令

Codis全面支持Redis的各种命令,包括键值操作、列表操作、集合操作等。可以像使用单个Redis实例一样使用Codis,这极大地降低了使用Codis的学习成本。

分布式锁和发布订阅

Codis支持Redis的分布式锁和发布订阅功能,可以使用这些功能来实现各种复杂的并发控制和事件通知需求。

5. Codis的高可用与故障恢复

Codis的高可用机制

Codis的高可用性是通过其内部的故障恢复机制实现的。在Codis中,每个Redis实例(Master节点)都会有一个或多个备份实例(Slave节点)。在正常情况下,所有的写请求都会发送到Master节点,而读请求则可以由任何节点来处理。

当Master节点发生故障时,Codis会自动从其备份节点中选举出一个新的Master节点接管服务。这个过程是自动进行的,对于用户来说,除了可能会有短暂的服务中断外,其他的都是透明的。

Codis使用Zookeeper来检测和管理节点的状态,当检测到节点发生故障时,Zookeeper会自动触发故障恢复流程。

恢复Codis集群的故障节点

当一个节点发生故障后,可以使用Codis提供的工具来恢复它。以下是一个例子:

# 停止故障节点
codis-admin --proxy=proxy_addr --offline

# 修复故障节点
codis-admin --proxy=proxy_addr --online

在这个例子中,proxy_addr是故障节点的地址。首先需要将故障节点设置为离线状态,然后修复节点后,再将其设置为在线状态。

此外,还可以使用Codis的Dashboard来可视化地管理和监控Codis集群的状态,包括故障恢复等操作。

需要注意的是,Codis的高可用机制并不能保证数据的一致性。如果在Master节点故障期间有写请求,则这些请求可能会丢失。因此,需要根据的应用的需求,选择合适的数据持久化和备份策略。

6. Codis的使用场景和限制

Codis适合的使用场景

  • 大规模数据存储:Codis通过数据分片和负载均衡,可以支持大规模的数据存储。如果的应用需要存储TB级别的数据,并且需要高性能的读写操作,Codis是一个不错的选择。
  • 高可用服务:Codis内置了故障恢复机制,可以在节点发生故障时自动进行故障转移,保证服务的高可用性。
  • 实时数据缓存:Codis可以作为一个高性能的分布式缓存,用于存储和查询实时数据。例如,可以使用Codis来实现一个实时的内容推荐系统。
  • 会话存储:Codis可以用于存储用户的会话信息。比如,可以使用Codis来实现一个分布式的会话管理系统。

Codis的一些限制

  • 事务支持:Codis不支持Redis的事务操作。如果的应用需要使用事务,可能需要考虑其他的解决方案,或者使用其他的并发控制机制替代事务。
  • 强一致性:Codis的数据分布是基于最终一致性模型的,它不能保证强一致性。如果的应用需要强一致性,可能需要考虑其他的数据存储方案。
  • 复杂查询:Codis不支持Redis的复杂查询操作,如排序和聚合等。如果的应用需要进行复杂的数据处理和查询,可能需要考虑其他的数据处理框架。
  • 持久化:虽然Codis支持Redis的持久化功能,但由于Codis是分布式的,所以持久化的过程可能会比较复杂。

6. Codis 与Redis Cluster对比

对比项CodisRedis Cluster
可靠性可靠可靠
扩容支持支持
数据迁移同步迁移,异步迁移同步迁移
客户端兼容性兼容不兼容,需要支持Cluster的客户端
组件数量不需要额外组件,只需要Redis实例
成本组件多,成本高不需要额外组件,成本低
成熟度低于Codis

Codis的优势在于可靠性、支持扩容、数据迁移方式的灵活性以及客户端兼容性。而Redis Cluster的优势在于组件少、成本低。
在实际应用中,你可以根据以下几点来选择:

  • 可靠性:如果你需要一个高可靠性的数据存储方案,Codis和Redis Cluster都是不错的选择。
  • 扩容能力:如果你预计你的数据将会快速增长,需要一个可以方便扩容的方案,那么Codis和Redis Cluster都可以满足你的需求。
  • 数据迁移:如果你需要频繁地进行数据迁移,Codis可能是更好的选择,因为它支持异步数据迁移。
  • 客户端兼容性:如果你的应用已经使用了Redis,而你不希望修改客户端代码,Codis可能是更好的选择,因为它完全兼容Redis的客户端。
  • 成本:如果你希望尽量降低成本,Redis Cluster可能是更好的选择,因为它不需要额外的组件。
  • 成熟度:如果你希望使用一款经过实践检验的成熟产品,Codis可能是更好的选择,因为它相比Redis Cluster有更长的使用历史和更高的成熟度。

参考文档

https://blog.csdn.net/wang0907/article/details/128341489

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1217288.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java代码审计(入门级)—基础漏洞合集

目录 (一)前言 (二)经典漏洞的代码审计 1、SQL注入 漏洞原理: 连接数据库的方式: 代码审计 2、XXE(XML外部实体注入) 漏洞原理 代码审计: 3、xss 漏洞原理 X…

LeetCode之二叉树

发现更多计算机知识,欢迎访问Cr不是铬的个人网站 最近数据结构学到二叉树,就刷了刷力扣,写这篇文章也是辅助记忆。 103二叉树锯齿形遍历 要解出本道题,首先要会层次遍历。层次遍历我们都知道用一个队列去实现就行。但是力扣这里…

【软件安装】Centos系统中安装docker容器(华为云HECS云耀服务器)

这篇文章,主要介绍Centos系统中安装docker容器(华为云HECS云耀服务器)。 目录 一、安装docker 1.1、卸载旧版本docker 1.2、更新repo镜像 1.3、安装依赖包 1.4、添加docker-ce镜像 1.5、安装docker-ce 1.6、查看docker安装版本 1.7、…

MATLAB 机械臂逆运动学进行轨迹控制建模

系列文章目录 文章目录 系列文章目录前言一、模型概览1.1 Target Pose Generation 目标姿势生成1.2 Inverse Kinematics 逆运动学1.3 Manipulator Dynamics 机械手动力学1.4 Pose Measurement 姿势测量 二、机械手定义三、生成航点四、模型设置五、模拟机械手运动六、将结果可视…

振南技术干货集:比萨斜塔要倒了,倾斜传感器快来!(2)

注解目录 1、倾斜传感器的那些基础干货 1.1 典型应用场景 (危楼、边坡、古建筑都是对倾斜敏感的。) 1.2 倾斜传感器的原理 1.2.1 滚珠式倾斜开关 1.2.2 加速度式倾斜传感器 1)直接输出倾角 2)加速度计算倾角 3)倾角精度的提高 (如果…

2023年亚太杯数学建模思路 - 复盘:人力资源安排的最优化模型

文章目录 0 赛题思路1 描述2 问题概括3 建模过程3.1 边界说明3.2 符号约定3.3 分析3.4 模型建立3.5 模型求解 4 模型评价与推广5 实现代码 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 描述 …

【LeetCode】每日一题 2023_11_16 最长奇偶子数组(枚举,模拟)

文章目录 刷题前唠嗑K 个元素的最大和题目描述代码与解题思路 结语 刷题前唠嗑 LeetCode? 启动!!! 今天早上概率论期中,被爆杀完之后,下午数电,今天很疲惫很疲惫,一直拖到了现在,终…

【论文阅读】A Survey on Video Diffusion Models

视频扩散模型(Video Diffusion Model)最新综述GitHub 论文汇总-A Survey on Video Diffusion Models。 paper:[2310.10647] A Survey on Video Diffusion Models (arxiv.org) 0. Abstract 本文介绍了AIGC时代视频扩散模型的全面回顾。简要介…

目标检测—YOLO系列(一)(YOLOv1/2/v3/4/5/x/6/7/8)

目标检测概述 什么是目标检测? 滑动窗口(Sliding Window) 滑动窗口的效率问题和改进 滑动窗口的效率问题:计算成本很大 改进思路 1:使用启发式算法替换暴力遍历 例如 R-CNN,Fast R-CNN 中使用 Selectiv…

docker 部署日志平台出错汇总

第一次运行elasticsearch:8.11.1镜像,报错如下: [rootmaster ~]# docker run --name es03 --net elastic -p 9200:9200 -it -m 1GB docker.elastic.co/elasticsearch/elasticsearch:8.11.1 docker: Error response from daemon: driver failed programmi…

网络编程TCP/UDP通信

1 网络通信概述 1.1 IP 和端口 所有的数据传输,都有三个要素 :源、目的、长度。 怎么表示源或者目的呢?请看图 所以,在网络传输中需要使用“IP 和端口”来表示源或目的。 1.2 网络传输中的 2 个对象:server 和 cl…

面向配电网韧性提升的移动储能预布局与动态调度策略(matlab代码)

欢迎关注威♥“电击小子程高兴的MATLAB小屋”获取更多资料 该程序复现《面向配电网韧性提升的移动储能预布局与动态调度策略》,具体摘要内容见下图,程序主要分为两大模块,第一部分是灾前预防代码,该部分采用两阶段优化算法&#…

YOLOv8-Seg改进策略:全新的聚焦式线性注意力模块Focused Linear Attention | ICCV2023

🚀🚀🚀本文改进:深入分析了现有线性注意力方法的缺陷,并提出了一个全新的聚焦的线性注意力模块(Focused Linear Attention),同时具有高效性和很强的模型表达能力。 🚀🚀🚀YOLOv8-seg创新专栏:http://t.csdnimg.cn/KLSdv 学姐带你学习YOLOv8,从入门到创新,…

写论文技巧

目录 chatgpt数学公式英文润色中英互译如何搜和下载论⽂1 搜论⽂3 下载论⽂chatgpt 数学公式 英文润色

17. Series.dt.month-提取日期数据中的月份信息

【目录】 文章目录 17. Series.dt.month-提取日期数据中的月份信息1. 知识回顾-创建一个Series对象2. 知识回顾-pd.to_datetime()将数据转换为pandas中的日期时间格式3. 实例化类相关知识4. Series.dt.month是什么?5. 如何使用Series.dt.month?6. Series…

jQuery 【关于jQuery 、 jQuery简介、基础选择器、属性选择器、jQuery扩展】(一)-全面详解(学习总结---从入门到深化)

目录 关于jQuery jQuery简介 选择器之基础选择器(一) 选择器之基础选择器(二) 选择器之属性选择器(一) 选择器之属性选择器(二) 选择器之jQuery扩展(一) 选择器之jQuery扩展(二) 关于jQuery 现在是否还需要学习jQuery,毫无疑问到目前为止,我们仍然…

【Synopsys Bug记录】Synopsys工具显示license过期

首先查找网络配置,打开终端,输入ifconfig,看是否有ens33 若没有ens33,则说明linux的网卡因为某些原因未启用,我们需要更改ifcfg-ens33文件; 输入指令 cd ./etc/sysconfig/network-scripts sudo vim ifcfg-…

关于 内部类 你了解多少?(详解!!)

目录 1. 什么是内部类? 2. 内部类的分类 3. 内部类 3.1 实例内部类 3.2 静态内部类 4. 局部内部类 5. 匿名内部类 6.对象的打印 “不积跬步无以至千里,不积小流无以成江海。”每天坚持学习,哪怕是一点点!!&a…

企业微信获取第三方应用凭证

上一篇介绍了如何配置通用开发参数及通过url回调验证, 本篇将通过服务商后台配置关联小程序应用配置和获取第三方凭证及如何配置企业可信IP。 当然上篇配置的回调设置也不会白费,在下方的指令和数据回调会用到。 第三方应用开发流程 官方企业微信第三方…

来讲解一手事务隔离级别

简介 在数据库管理系统中,事务是一组被视为单一工作单元的操作,这些操作要么全部执行成功,要么全部回滚。为了确保在多用户并发访问数据库时数据的一致性和可靠性,引入了事务隔离级别的概念。事务隔离级别定义了一个事务对于其他…