#0 前言

  最近因为项目需要,研究了一下传说中的Codis。下面跟大家分享Codis3的搭建流程

  https://github.com/CodisLabs/codis

#1 Codis是什么

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

#2 Codis3最新的改进

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 可自行扩展。

#3 Codis3不支持的指令

  https://github.com/CodisLabs/codis/blob/release3.2/doc/unsupported_cmds.md

#4 部署Zookeeper

  可以参考我上一篇关于Kafka集群搭建的教程 https://www.cnblogs.com/mrblue/p/10770651.html

#5 部署Codis3

 1. 下载Codis。我直接下载的编译好的二进制。在下面地址选择一个合适的。

    https://github.com/CodisLabs/codis/releases 

 2. 启动codis-dashoard。

    1)生成codis-dashoard配置。./codis-dashboard --default-config > dashboard.toml

    2)修改配置dashboard.toml。注意修改一下几项

  1. #coordinator_name = "filesystem"
  2. #coordinator_addr = "/tmp/codis"
  3. coordinator_name = "zookeeper"
  4. coordinator_addr = "127.0.0.1:2181"
  5. coordinator_auth = ""
  6.  
  7. # Set Codis Product Name/Auth.
  8. product_name = "codis-demo"
  9. product_auth = ""

    3)启动 ./codis-dashboard --config=dashboard.toml

  3. 启动codis-proxy。

    1)生成codis-proxy配置。./codis-proxy --default-config > proxy.toml

    2)修改配置proxy.toml。注意修改一下几项。 product_name和product_auth要和上面对得上

  1. # Set Codis Product Name/Auth.
  2. product_name = "codis-demo"
  3. product_auth = ""
  4.  
  5. # Set auth for client session
  6. # . product_auth is used for auth validation among codis-dashboard,
  7. # codis-proxy and codis-server.
  8. # . session_auth is different from product_auth, it requires clients
  9. # to issue AUTH <PASSWORD> before processing any other commands.
  10. session_auth = ""
  11.  
  12. # Set bind address for admin(rpc), tcp only.
  13. admin_addr = "0.0.0.0:11080"
  14.  
  15. # Set bind address for proxy, proto_type can be "tcp", "tcp4", "tcp6", "unix" or "unixpacket".
  16. proto_type = "tcp4"
  17. proxy_addr = "0.0.0.0:19000"

    3)启动 ./codis-proxy --config=proxy.toml

  4.启动codis-fe

    1) 生成codis-fe配置。./codis-admin --dashboard-list --zookeeper=127.0.0.1:2181 > fe.json

    2) 启动codis-fe。./codis-fe --ncpu=2 --log=logs/fe.log --log-level=WARN --dashboard-list=fe.json --listen=:10010

  5. 启动codis-server

    1)找一个redis.conf配置文件,注意要去掉requirepass项和关闭protected-mode no

  1. #requirepass
  2. protected-mode no

    2) 启动codis-server  ./codis-server redis.conf

   6. 添加codis-server。

    1)打开fe网页进行配置 127.0.0.1:10010

    2)添加一个组

    

    3)添加codis-server

  

#6 测试Codis3

  1. 这里端口要用19000,就是上面proxy配置的端口,而不是redis-server的6379。 执行命令./redis-benchmark -p 19000

  2. fe上能看到请求状态

  

[Codis] Codis3部署流程的更多相关文章

  1. Liferay7 BPM门户开发之45: 集成Activiti文件上传部署流程BPMN模型

    开发文件上传,部署流程模板. 首先,开发jsp页面,deploy.jsp <%@ include file="/init.jsp" %> <h3>${RET ...

  2. Jenkins环境拓扑及部署流程

    环境拓扑图: 部署流程:

  3. Activiti 部署流程定义及相关的表(classpath部署、zip部署)

    package com.mycom.processDefinition; import org.activiti.engine.ProcessEngine; import org.activiti.e ...

  4. OpenStack Keystone安装部署流程

    之前介绍了OpenStack Swift的安装部署,采用的都是tempauth认证模式,今天就来介绍一个新的组件,名为Keystone. 1. 简介 本文将详细描述Keystone的安装部署流程,并给 ...

  5. OpenStack Swift集群部署流程与简单使用

    之前介绍了<OpenStack Swift All In One安装部署流程与简单使用>,那么接下来就说一说Swift集群部署吧. 1. 简介 本文档详细描述了使用两台PC部署一个小型Sw ...

  6. activiti自定义流程之整合(四):整合自定义表单部署流程定义

    综合前几篇博文内容,我想在整合这一部分中应该会有很多模块会跳过不讲,就如自定义表单的表单列表那一块,因为这些模块在整合的过程中都几乎没有什么改动,再多讲也是重复无用功. 正因为如此,在创建了流程模型之 ...

  7. activiti自定义流程之Spring整合activiti-modeler5.16实例(四):部署流程定义

    注:(1)环境搭建:activiti自定义流程之Spring整合activiti-modeler5.16实例(一):环境搭建        (2)创建流程模型:activiti自定义流程之Spring ...

  8. Kent Beck揭秘Facebook开发部署流程

    http://www.infoq.com/cn/news/2013/10/facebook-development-deployment Facebook是世界上最大的社交网站,有超过10亿用户每月至 ...

  9. jBPM学习之部署流程定义

    也许部署流程定义的方法有很多,这里选用的是用Java代码调用工作流引擎提供的部署服务API.在这之前,假设你的Eclipse已经安装好了GPD工作流画图工具,并且学会了画出最简单的HelloWorld ...

随机推荐

  1. button标题左对齐

    Button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;//左对齐(UIControlContentHo ...

  2. Oracle ORA-12541,ORA-12514错误

    1.昨天发布tomcat 成功,但登录后报错,无法打开hibernate session,检查后发现数据库无法连接 2.用PL/SQL登录数据库,报 ora-12541,TNS 无监听程序,百度发现需 ...

  3. 【转】SQL Server 事务隔离级别详解

    SQL 事务隔离级别 概述 隔离级别用于决定如果控制并发用户如何读写数据的操作,同时对性能也有一定的影响作用. 步骤 事务隔离级别通过影响读操作来间接地影响写操作:可以在回话级别上设置事务隔离级别也可 ...

  4. Column 'u_id' in field list is ambiguous

  5. TensorFlow相关

    TensorFlow的55个经典案例(转) https://blog.csdn.net/xzy_thu/article/details/76220654 随笔分类 - 数据挖掘及机器学习  www.c ...

  6. MDD Cup 2017 小记

    http://blog.csdn.net/zhangzhengyuan123123/article/details/78971298

  7. echarts中tooltip提示框位置控制

    关键代码: position: function(point, params, dom, rect, size) { //其中point为当前鼠标的位置,size中有两个属性:viewSize和con ...

  8. ionic-content 中iframe高度自适应

    http://blog.csdn.net/jesounao/article/details/50945003 无法访问外部url的问题–两个步骤解决: 1.iframe的src属性用ng-src属性替 ...

  9. php 日期处理 DateTime

    获取所有的时区: print_r(timezone_abbreviations_list ()); 获取毫秒级时间戳 // php7.1+ always has microseconds enable ...

  10. Unable to find vcvarsall.bat

    windows下pip安装各种包时,经常会遇到此错误.本文介绍解决方案. 第一步:安装visual studio 第二步:安装everything 打开everything,搜索vcvarsall.b ...