Codis 是一个由豌豆荚开源分布式 Redis 解决方案。 通过Codis-Proxy 和代理多个Codis-Server,Codis-Server是基于Redis-Server的基础上开发的,除了部分命令不支持原生Redis-Server (不支持的命令列表),其它操作和Redis-Server没有区别。客户端通过访问Codis-Proxy,Codis 底层会处理请求,进而转发到代理的Codis-Server, 对于客户端来说好像和访问单机Redis一样,可以简单的认为后边连接的是一个内存无限大的 Redis 服务。
codis主要有如下好处:
codis也有些可能的不足:
codis有两种安装方式
1、下载release binary,如codis3.2.2-go1.8.5-linux.tar.gz
2、解压 tar -zxvf codis3.2.2-go1.8.5-linux.tar.gz
解压后目录有以下文件,只有二进制文件,配置文件需要自己运行codis相关命令生成。为了不乱,最好创建一些常用目录,mkdir bin目录, 存放二进制文件;mkdir conf目录,存放将要生成的配置文件;mkdir logs存放启动日志。
3、生成配置文件
(1)生成dashboard.toml默认配置
./bin/codis-dashboard --default-config | tee conf/dashboard.toml
(2)生成proxy.toml默认配置
./bin/codis-proxy --default-config | tee conf/proxy.toml
codis是用go语言开发的,所以要有go环境来编译源码。这里安装的codis3.2还依赖glibc2.14和glibc2.17,CentOS6自带的glibc一般版本比较低,yum源也比较低,所以编译安装,去网上查询即可
1、下载环境
https://golang.google.cn/dl/适合自己系统的源码
2、解压
如go1.12.linux-amd64.tar.gz
tar -C /usr/local -xzvf go1.12.linux-386.tar.gz
将解压后目录移动到/usr/loca/路径下
3、配置环境变量
添加环境变量$ vim /etc/profile
GOPATH=/usr/local/go
export PATH=$PATH:$GOPATH/bin
使配置生效$ source /etc/profile
4、测试go环境安装
查看版本$ go version,出现以下版本信息,表示安装正确
go version go1.12 linux/386
5、Zookeeper搭建
zookeeper安装比较简单,可自行查询,也可以参考之前之前的文章
https://blog.csdn.net/lzxlfly/article/details/80672284#t5
6、下载codis源码
创建路径,$ mkdir -p $GOPATH/src/github.com/CodisLabs
克隆源码,$ cd $_ && git clone https://github.com/CodisLabs/codis.git -b release3.2
7、编译codis源码
进入目录下 $ cd $GOPATH/src/github.com/CodisLabs/codis
编译源码 $ make
# Set Coordinator, only accept "zookeeper" & "etcd"
coordinator_name = "zookeeper"
coordinator_addr = "node01:2181,node02:2181,node03:2181" #zk地址
#coordinator_auth = ""
# Set Codis Product Name/Auth.
product_name = "codis-redis-uws" #集群名字
product_auth = "codis-auth" #集群密码
# Set bind address for admin(rpc), tcp only.
admin_addr = "0.0.0.0:18080"
.........................
# Set Codis Product Name/Auth.
product_name = "codis-redis-uws"
product_auth = ""
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" #codis-proxy客户端连接地址
jodis_name = "zookeeper"
jodis_addr = "node01:2181,node02:2181,node03:2181" #Jodis 注册 zookeeper 地址
jodis_auth = ""
jodis_timeout = "20s"
jodis_compatible = true
.................................
同redis的redis.conf配置一样
$ nohup ./codis-dashboard --ncpu=4 --config=conf/dashboard.toml \
--log=logs/dashboard.log --log-level=WARN &
$ nohup ./codis-proxy --ncpu=4 --config=conf/proxy.toml \
--log=logs/proxy.log --log-level=WARN &
codis-server和redis启动方式一样,如 $ ./bin/codis-server ./conf/redis.conf
$ nohup ./codis-fe --ncpu=4 --log=logs/fe.log --log-level=WARN \
--zookeeper=node01:2181,node02:2181,node03:2181 --listen=127.0.0.1:8000 &
如地址:http://192.168.17x.xxx:8000,点击下边配置文件中设置过的集群名字
刚进来没有配置集群时显示如下
先NEW GROUP添加组,后再添加 Codis Server。可以有添加多个组,一组内可添加多个server。另外要说的是添加Server之前,每个节点都要启动codis-server的。如下图
新增的集群 slot 状态是 offline,因此我们需要对它进行初始化(将 1024 个 slot 分配到各个 group),而最快的方法是通过 fe 提供的 rebalance all slots
按钮来做,如下图
codis-proxy 启动后,处于 waiting
状态,监听 proxy_addr
地址,但是不会 accept
连接,处于offline状态。需要添加到集群并完成集群状态的同步,才能改变状态为 online
。添加的方法有以下两种,admin_addr
有两种添加方式
(1)通过 codis-fe 添加:通过 Add Proxy
按钮,将 admin_addr
加入到集群中;
(2)通过 codis-admin 命令行工具添加,方法如下:
$ ./bin/codis-admin --dashboard=127.0.0.1:18080 --create-proxy -x 127.0.0.1:11080
其中 127.0.0.1:18080
以及 127.0.0.1:11080
分别为 dashboard 和 proxy 的 admin_addr
地址;
客户端通过Codis-proxy地址,如192.168.100.110:19000,就可以操作redis中数据了,就好像访问一个单机版的redis一样
如通过$ ./redis-cli -h 127.0.0.1 -p 19000 进入redis-cli,存取数据,如下图
至此,我们就完成了一个redis集群的搭建
参考:https://github.com/CodisLabs/codis
参考:https://github.com/CodisLabs/codis/blob/release3.2/doc/tutorial_zh.md