一 codis

1 介绍:

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

2 codis组成部分:

Codis Proxy (codis-proxy)
Codis Manager (codis-config)
Codis Redis (codis-server)
ZooKeeper
codis-proxy 是客户端连接的 Redis 代理服务, codis-proxy 本身实现了 Redis 协议, 表现得和一个原生的 Redis 没什么区别 (就像 Twemproxy), 对于一个业务来说, 可以部署多个 codis-proxy, codis-proxy 本身是无状态的.
codis-config 是 Codis 的管理工具, 支持包括, 添加/删除 Redis 节点, 添加/删除 Proxy 节点, 发起数据迁移等操作. codis-config 本身还自带了一个 http server, 会启动一个 dashboard, 用户可以直接在浏览器上观察 Codis 集群的运行状态.
codis-server 是 Codis 项目维护的一个 Redis 分支, 基于 2.8.13 开发, 加入了 slot 的支持和原子的数据迁移指令. Codis 上层的 codis-proxy 和 codis-config 只能和这个版本的 Redis 交互才能正常运行.
Codis 依赖 ZooKeeper 来存放数据路由表和 codis-proxy 节点的元信息, codis-config 发起的命令都会通过 ZooKeeper 同步到各个存活的 codis-proxy.
Codis 支持按照 Namespace 区分不同的产品, 拥有不同的 product name 的产品, 各项配置都不会冲突
codis_第1张图片

二 安装及基本配置:

1 配置codis 运行环境

1 配置Java环境和go 语言环境

codis
codis_第2张图片

2 修改环境变量

codis
codis_第3张图片

3 测试环境是否搭建成功

codis_第4张图片
codis

2 安装codis

1 安装相关依赖

codis
codis

2 安装codis

codis
codis
codis_第5张图片
有此表示安装成功:
codis

3 配置codis

codis
codis_第6张图片
codis
codis_第7张图片
codis
codis_第8张图片
其他均注释此配置:
codis_第9张图片
codis

4 启动服务并查看:

codis
codis_第10张图片

5 启动服务:

l Codis Dashboard:集群管理工具,支持 codis-proxy、codis-server 的添加、删除,以及据迁移等操作。在集群状态发生改变时,codis-dashboard 维护集群下所有 codis-proxy 的状态的一致性。
对于同一个业务集群而言,同一个时刻 codis-dashboard 只能有 0个或者1个;
所有对集群的修改都必须通过 codis-dashboard 完成。
l Codis Admin:集群管理的命令行工具。
可用于控制 codis-proxy、codis-dashboard 状态以及访问外部存储。
l Codis FE:集群管理界面。
多个集群实例共享可以共享同一个前端展示页面;
通过配置文件管理后端 codis-dashboard 列表,配置文件可自动更新。
l Codis HA:为集群提供高可用。
依赖 codis-dashboard 实例,自动抓取集群各个组件的状态;
会根据当前集群状态自动生成主从切换策略,并在需要时通过 codis-dashboard 完成主从切换。
Storage:为集群状态提供外部存储。
提供 Namespace 概念,不同集群的会按照不同 product name 进行组织;
目前仅提供了Zookeeper 和 Etcd 两种实现,但是提供了抽象的interface 可自行扩展。
配置文件详解:
1 dashboard.toml
##################################################
#Codis-Dashboard #
##################################################
#Set Coordinator, only accept "zookeeper" & "etcd" & "filesystem".
Quick Start
coordinator_name = "filesystem" 外部存储类型接受zookeeper/etcd
coordinator_addr = "/tmp/codis"
#coordinator_name = "zookeeper"
#coordinator_addr = "127.0.0.1:2181" 外部存储IP 地址
#Set Codis Product Name/Auth.
product_name = "codis-demo" 集群名称
product_auth = "" 集群密码,默认为空
#Set bind address for admin(rpc), tcp only.
admin_addr = "0.0.0.0:18080" API 接口
#Set arguments for data migration (only accept 'sync' & 'semi-async').
migration_method = "semi-async"
migration_parallel_slots = 100
migration_async_maxbulks = 200
migration_async_maxbytes = "32mb"
migration_async_numkeys = 500
migration_timeout = "30s"
#Set configs for redis sentinel.
sentinel_quorum = 2
sentinel_parallel_syncs = 1
sentinel_down_after = "30s"
sentinel_failover_timeout = "5m"
sentinel_notification_script = ""
sentinel_client_reconfig_script = ""
2 proxy.toml
####################################################
#Codis-Proxy ###
##################################################
#Set Codis Product {Name/Auth}.
product_name = "codis-demo" 集群名称
product_auth = "" 集群密码
#Set bind address for admin(rpc), tcp only.
admin_addr = "0.0.0.0:11080" API 接口
#Set bind address for proxy, proto_type can be "tcp", "tcp4", "tcp6", "unix" or
"unixpacket".
proto_type = "tcp4" redis 接口类型。
proxy_addr = "0.0.0.0:19000" 端口地址或路径
#Set jodis address & session timeout.
jodis_addr = "" zookeeper 地址
jodis_timeout = 10 注册超时时间
jodis_compatible = false jodis 注册zookeeper 的路径
#Proxy will ping-pong backend redis periodly to keep-alive
backend_ping_period = 5
#If there is no request from client for a long time, the connection will be droped.
Set 0 to disable.
session_max_timeout = 1800
#Buffer size for each client connection.
session_max_bufsize = 131072
#Number of buffered requests for each client connection.
#Make sure this is higher than the max number of requests for each pipeline request,
or your client may be blocked.
session_max_pipeline = 1024
#Set period between keep alives. Set 0 to disable.
session_keepalive_period = 60
参数说明
product_name 集群名称,参考dashboard 参数说明
product_auth 集群密码,默认为空
admin_addr RESTful API 端口
proto_type Redis 端口类型,接受tcp/tcp4/tcp6/unix/unixpacket
proxy_addr Redis 端口地址或者路径
jodis_addr Jodis 注册zookeeper 地址
jodis_timeout Jodis 注册session timeout 时间,单位second
jodis_compatible Jodis 注册zookeeper 的路径
backend_ping_period与codis-server 探活周期,单位second,0 表示禁止
session_max_timeout与client 连接最大读超时,单位second,0 表示禁止
session_max_bufsize与client 连接读写缓冲区大小,单位byte
session_max_pipeline 与client 连接最大的pipeline 大小
session_keepalive_period 与client 的tcp keepalive 周期,仅tcp 有效,0 表示禁

注:Codis3 会将jodis 节点注册在/jodis/{PRODUCT_NAME} 下,这点与Codis2 不太兼容,
所以为了兼容性,
可以考虑将jodis_compatible 设置成true。
codis_第11张图片
codis
访问并查看:
http://127.0.0.1:9090

6 添加用户组:

codis_第12张图片
codis_第13张图片
codis_第14张图片
codis_第15张图片
codis_第16张图片codis_第17张图片
codis_第18张图片
codis_第19张图片
codis_第20张图片
codis_第21张图片
查看添加情况:
codis_第22张图片

7 初始化哈希槽

codis_第23张图片
codis_第24张图片
codis_第25张图片