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