[Codis] Codis3部署流程

#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。注意修改一下几项

#coordinator_name = "filesystem"
#coordinator_addr = "/tmp/codis"
coordinator_name = "zookeeper"
coordinator_addr = "127.0.0.1:2181"
coordinator_auth = ""

# Set Codis Product Name/Auth.
product_name = "codis-demo"
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要和上面对得上

# Set Codis Product Name/Auth.
product_name = "codis-demo"
product_auth = ""

# Set auth for client session
#   1. product_auth is used for auth validation among codis-dashboard,
#      codis-proxy and codis-server.
#   2. session_auth is different from product_auth, it requires clients
#      to issue AUTH <PASSWORD> before processing any other commands.
session_auth = ""

# Set bind address for admin(rpc), tcp only.
admin_addr = "0.0.0.0:11080"

# Set bind address for proxy, proto_type can be "tcp", "tcp4", "tcp6", "unix" or "unixpacket".
proto_type = "tcp4"
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

#requirepass
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上能看到请求状态

  

 

posted @ 2019-04-28 15:27  MrBlue  阅读(531)  评论(0编辑  收藏  举报