一、codis介绍
codis是一个分布式redis集群解决方案,对于上层的应用来说, 连接到codis-proxy和连接原生的redis-server没有明显的区别。
上层应用可以像使用单机的redis一样使用,codis底层会处理请求的转发,不停机的数据迁移等工作。所有后边的一切事情,对于前面的客户端来说是透明的,可以简单的认为后边连接的是一个内存无限大的redis服务。
codis由四部分组成:
codis proxy(codis-proxy) codis dashboard(codis-config)
codis redis(codis-server) zookeeper/etcd
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分支,基于redis2.8.21开发,加入了slot的支持和原子的数据迁移指令。codis上层的codis-proxy和codis-config只能和这个版本的redis交互才能正常运行。
codis依赖zookeeper来存放数据路由表和codis-proxy节点的元信息,codis-config发起的命令都会通过zookeeper同步到各个存活的codis-proxy。
codis支持按照namespace区分不同的产品,拥有不同的product name的产品,各项配置都不会冲突。
codis架构图如下:
Codis Proxy 提供 Redis 集群的接入口,Dashboard 是 Codis的管理工具,下层提供 Redis 服务。也可以对 Codis Proxy 实现高可用,使得集群更加完善。
二、环境准备
codis集群的搭建,需要zookeeper集群。除了zookeeper集群之外,我们还需要安装go语言环境,因为codis是基于go语言开发的。
实验环境(rhel6.5):
172.25.45.2 Codis-redis-master server2
172.25.45.3 codis-proxy - server3
172.25.45.4 Codis-redis-slave server4
三、 Codis集群的搭建与使用
1. 安装go环境(所有节点均须安装,在server3上做演示,其他节点相同)
tar -zxf go1.8.linux-amd64.tar.gz -C /usr/local/
vim /etc/profile
##最后面添加以下几行
export GOPATH=/usr/local/codis
export GOROOT=/usr/local/go
export PATH=$PATH:/usr/local/go/bin
source /etc/profile
go version ##显示go版本