一 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 的产品, 各项配置都不会冲突

二 安装及基本配置:

1 配置codis 运行环境

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

2 修改环境变量

3 测试环境是否搭建成功

2 安装codis

1 安装相关依赖

2 安装codis

有此表示安装成功:

3 配置codis

其他均注释此配置:

4 启动服务并查看:

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。 访问并查看: http://127.0.0.1:9090

6 添加用户组:

查看添加情况:

7 初始化哈希槽