1.什么是Codis?

Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的区别
(不支持的命令列表), 上层应用可以像使用单机的 Redis 一样使用, Codis 底层会处理请求的转发, 不停机的数据迁移等工作,
所有后边的一切事情, 对于前面的客户端来说是透明的, 可以简单的认为后边连接的是一个内存无限大的 Redis 服务。

2.codis介绍

Codis是一个分布式Redis解决方案,对于上层的应用来说,连接到Codis Proxy和连接原生的RedisServer没有明显的区别,有部分命令不支持。
Codis底层会处理请求的转发,不停机的数据迁移等工作,所有后边的一切事情,
对于前面的客户端来说是透明的,可以简单的认为后边连接的是一个内存无限大的Redis服务.

Codis由四部分组成

Codis-proxy 实现redis协议,由于本身是无状态的,因此可以部署很多个节点
Codis-config 是codis的管理工具,包括添加/删除redis节点添加/删除proxy节点,发起数据迁移等操作,自带httpserver,支持管理后台方式管理配置
Codis-server 是codis维护的redis分支,基于2.8.21分支,加入了slot的支持和原子的数据迁移指令; codis-proxy和codis-config只能和这个版本的redis交互才能正常运行
Zookeeper 用于codis集群元数据的存储,维护codis集群节点

3.Codis的架构

4.Codis的优缺点

(1)优点
对客户端透明,与codis交互方式和redis本身交互一样
支持在线数据迁移,迁移过程对客户端透明有简单的管理和监控界面
支持高可用,无论是redis数据存储还是代理节点
自动进行数据的均衡分配
最大支持1024个redis实例,存储容量海量
高性能

(2)缺点
采用自有的redis分支,不能与原版的redis保持同步
如果codis的proxy只有一个的情况下, redis的性能会下降20%左右
某些命令不支持,比如事务命令muti
国内开源产品,活跃度相对弱一些

5.Codis 3.x 的各个组件的说明

Codis Server 基于 redis-3.2.8 分支开发,增加了额外的数据结构,以支持 slot 有关的操作以及数据迁移指令。具体的修改可以参考文档 redis 的修改
Codis Proxy 客户端连接的 Redis 代理服务, 实现了 Redis 协议。 除部分命令不支持以外(不支持的命令列表),表现的和原生的 Redis 没有区别(就像 Twemproxy)。对于同一个业务集群而言,可以同时部署多个 codis-proxy 实例;不同 codis-proxy 之间由 codis-dashboard 保证状态同步
Codis Dashboard 集群管理工具,支持 codis-proxy、codis-server 的添加、删除,以及据迁移等操作。在集群状态发生改变时,codis-dashboard 维护集群下所有 codis-proxy 的状态的一致性。对于同一个业务集群而言,同一个时刻 codis-dashboard 只能有 0个或者1个;所有对集群的修改都必须通过 codis-dashboard 完成
Codis Admin 集群管理的命令行工具。可用于控制 codis-proxy、codis-dashboard 状态以及访问外部存储
Codis FE 集群管理界面。多个集群实例共享可以共享同一个前端展示页面;通过配置文件管理后端 codis-dashboard 列表,配置文件可自动更新
Storage 为集群状态提供外部存储。提供 Namespace 概念,不同集群的会按照不同 product name 进行组织;目前仅提供了 Zookeeper、Etcd、Fs 三种实现,但是提供了抽象的 interface 可自行扩展。

6.codis集群的搭建

基本实验环境
主机server1:172.25.2.1和物理机:172.25.2.250

(1)在真机中创建一个全新的快照用来做实验,保证实验环境干净


(2)用真机连接虚拟机server1

(3)在真机上搭建共享yum源,让server1使用
并且关闭真机的防火墙,开启真机的apache服务

(4)确保server1的yum仓库可以使用

codis集群的搭建过程如下:

(1)安装go环境
从网上下载go的压缩包并且解压到指定目录下

在环境变量文件中最后添加以下三行



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

测试一个go程序



(2)设置编译环境
$GOPATH 是本机所有第三方库 go 项目所在目录,Codis 仅是其中之一
下载 Codis 源代码

解压


安装编译需要的依赖性工具


(3)编译 Codis 源代码
直接通过 make 进行编译,会看到如下输出




(4)快速启动
2分钟快速构建一个单机版测试 codis 集群,无任何外部组件依赖.
源码中 admin 文件夹提供了一系列脚本以便快速启动、停止各个组件,提高运维效率。
1)启动codis-dashboard
使用 codis-dashboard-admin.sh 脚本启动 dashboard,
并查看 dashboard 日志确认启动是否有异常。




2)启动codis-proxy
使用 codis-proxy-admin.sh 脚本启动 codis-proxy,
并查看 proxy 日志确认启动是否有异常。


3)启动codis-server
使用 codis-server-admin.sh 脚本启动 codis-server,
并查看 redis 日志确认启动是否有异常。

4)启动codis-fe
使用 codis-fe-admin.sh 脚本启动 codis-fe,并查看 fe 日志确认启动是否有异常。

(5)开启完毕之后查看一下端口

访问测试

(1)在浏览器输入172.25.2.1:9090,查看图形界面




(2)通过fe添加group
通过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 按钮即可,如下图所示:




(3)通过fe初始化slot
新增的集群 slot 状态是 offline,因此我们需要对它进行初始化(将 1024 个 slot 分配到各个 group),而初始化最快的方法可通过 fe 提供的 rebalance all slots 按钮来做,如下图所示,点击此按钮,我们即快速完成了一个集群的搭建。



到这里codis集群的搭建已经完毕,只需要图形化管理集群即可
不过这个只是其中一种方式之一,也可以使用:Ansible或者docker

Codis的原理以及部署—— CODIS (分布式 Redis 解决方案)相关推荐

  1. 实战Centos系统部署Codis集群服务

    导读 Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的区别 (不支持的命令列表), 上层应用可 ...

  2. 刘奇-豌豆荚分布式redis的设计与实现

    刘奇-豌豆荚分布式redis的设计与实现 codis是豌豆荚开源分布式redis解决方案,整体基本有golang编写,和大家聊聊整个设计过程中的各种纠结,考量,和官方的redis-cluster的差异 ...

  3. Codis——分布式Redis服务的解决方案

    Codis--分布式Redis服务的解决方案 参考文章: (1)Codis--分布式Redis服务的解决方案 (2)https://www.cnblogs.com/chenny7/p/5063368. ...

  4. 豌豆夹Redis解决方案Codis源码剖析:Proxy代理

    豌豆夹Redis解决方案Codis源码剖析:Proxy代理 1.预备知识 1.1 Codis Codis就不详细说了,摘抄一下GitHub上的一些项目描述: Codis is a proxy base ...

  5. 采用docker部署3台Redis分布式红锁实例

    采用docker部署3台Redis分布式红锁实例 docker run -p 6381:6379 --name redis-master-1 -d redis:5.0.7 docker run -p ...

  6. 分布式锁-Redis解决方案和Redisson解决方案

    文章目录 1:分布式锁的概念 1:概念 2:锁/分布式锁/事务区别 2:本文使用的案例场景 1:需求 2:controller层代码 3:锁控制层代码(使用synchronized 不成功) 4:调用 ...

  7. 面试官:Redis分布式锁解决方案是什么?

    今天博主在这片文章中主要给大家讲下Redis分布式锁的原理以及解决方案 学到三连呦 1.Redis分布式锁原理 1.1.简述 我们知道分布式锁的特性是排他.避免死锁.高可用.分布式锁的实现可以通过数据 ...

  8. Redis Sentinel安装与部署,实现redis的高可用

    Redis Sentinel安装与部署,实现redis的高可用 原文:Redis Sentinel安装与部署,实现redis的高可用 前言 对于生产环境,高可用是避免不了要面对的问题,无论什么环境.服 ...

  9. 部署Ceph分布式高可用集群中篇

    前言 如何快速部署Ceph分布式高可用集群 Ceph分布式存储底层实现原理 上文介绍了ceph的原理以及ceph的部署(部署了一个mon角色)本文继续介绍下ceph的部署 部署OSD 查看磁盘使用情况 ...

最新文章

  1. ACCESS的Ole对象读取
  2. Visual Studio 字体抗锯齿插件 Text Sharp
  3. IBastis配置实例
  4. CORS(跨域资源共享)
  5. linux getdents 例子,Linux那些事儿之我是Sysfs(12)举例三:sysfs读入文件夹内容
  6. Cartographer源码阅读(4):Node和MapBuilder对象2
  7. 华为u2020操作指南_用手机水平仪检测水平,操作简单,帮助甚大
  8. 第三届蓝桥杯省赛---马虎的算式
  9. 渗透测试PTES标准流程(超详细)
  10. 你知道几种编程思想?
  11. 史上最全场景文字识别资源汇集(56篇重要论文 + 20 个开源代码 + 330 个实验结果 + 1882个统计信息)...
  12. 下肢静脉曲张的病因具体有哪些?
  13. linux 按键检测 防抖,GPIO输入——按键检测
  14. sprintf 用法(sprintf_s)
  15. 腾讯(大连)研发一面-20190620
  16. 小米手机 adbinterface_啥?消息称小米正在研发1.5亿像素镜头手机
  17. 常见的监控摄像机的取流格式
  18. 7z压缩文件及文件夹命令.
  19. bo耳机h5使用说明_双十一买耳机看这里:OPPO领衔四款千元降噪耳机满足你需求_...
  20. 组态王仿真学习案例之石灰石断烧系统,拥有实时历史曲线,报表

热门文章

  1. python爬虫脚本ios_【苹果IP代理】 8大高效的Python爬虫框架,你用过几个?
  2. 查看 NLS_LANG 的方法
  3. Kahn算法-拓扑排序
  4. 【指针】*p++、(*p)++、*++p、++(*p)都是什么东西?
  5. html中的 脚本制作教程,html5教程制作简单画板代码分享
  6. 纯css实现优惠券效果
  7. PVZ系列七 | 音乐音效
  8. 关于数据库触发器(trigger)的简单使用操作
  9. 【Kubernetes 018】cfssl创建证书并结合RBAC的RoleBinding配置新用户config文件操作详解
  10. vs2015编写基本C