文章目录
github中文文档: https://github.com/CodisLabs/codis/blob/release3.2/doc/tutorial_zh.md
可以阅读这篇文章了解更多: https://juejin.im/post/5c132b076fb9a04a08218eef
原理
codis介绍
- Codis是一个分布式Redis解决方案,对于上层的应用来说,连接到Codis Proxy和连接原生的RedisServer没有明显的区别,有部分命令不支持。
- Codis底层会处理请求的转发,不停机的数据迁移等工作,所有后边的一切事情,对于前面的客户端来说是透明的,可以简单的认为后边连接的是一个内存无限大的Redis服务.
- Codis由四部分组成:
- Codis-proxy:实现redis协议,由于本身是无状态的,因此可以部署很多个节点。
- Codis-config :是codis的管理工具,包括添加/删除redis节点添加删除proxy节点,发起数据迁移等操作,自带httpserver,支持管理后台方式管理配置
- Codis-server :是codis维护的redis分支,基于2.8.21分支,加入了slot的支持和原子的数据迁移指令; codis-proxy和codis-config只能和这个版本的redis交互才能正常运行
- Zookeeper,用于codis集群元数据的存储,维护codis集群节点
Codis架构
Codis优缺点
优点
- 对客户端透明,与codis交互方式和redis本身交互一样
- 支持在线数据迁移,迁移过程对客户端透明有简单的管理和监控界面
- 支持高可用,无论是redis数据存储还是代理节点
- 自动进行数据的均衡分配
- 最大支持1024个redis实例,存储容量海量
- 高性能
缺点
- 采用自有的redis分支,不能与原版的redis保持同步
- 如果codis的proxy只有一个的情况下, redis的性能会下降20%左右
- 某些命令不支持,比如事务命令muti
- 国内开源产品,活跃度相对弱一些
下载与编译
安装GO的运行环境
- 下载并解压go的压缩包,安装完成后可以运行下列命令进行检测。
[root@server1 ~]# tar zxf go1.8.linux-amd64.tar.gz
[root@server1 ~]# mv go /usr/local/
设置编译环境
- 设置环境变量,查看go的版本。
[root@server1 src]# cat >> ~/.bashrc << _bashrc_export
> export GOROOT=/usr/local/go
> export PATH=\$PATH:\$GOROOT/bin
> export GOARCH=amd64
> export GOOS=linux
> _bashrc_export
[root@server1 src]# source ~/.bashrc
[root@server1 src]# go version
go version go1.8 linux/amd64
下载Godis安装包并解压
- Codis 源代码需要下载到 $GOPATH/src/github.com/CodisLabs/codis:
- 虚拟机联网。
[root@server1 ~]# mkdir -p /usr/local/go/src/github.com/CodisLabs
[root@server1 ~]# cd /usr/local/go/src/github.com/CodisLabs/
[root@server1 CodisLabs]# git clone https://github.com/CodisLabs/codis.git -b release3.2
[root@server1 CodisLabs]# yum install git -y
[root@server1 CodisLabs]# git clone https://github.com/CodisLabs/codis.git -b release3.2
编译Codis源代码
- 直接通过 make 进行编译,会看到如下输出:
[root@server1 CodisLabs]# pwd
/usr/local/go/src/github.com/CodisLabs
[root@server1 CodisLabs]# ls
codis
[root@server1 CodisLabs]# cd codis/
[root@server1 codis]# ls
[root@server1 codis]# make
- 上图可以看到编译出错,原因是缺乏所需的依赖性,我们需要安装:
[root@server1 codis]# yum install autoconf automake libtool -y
- 重新编译
make
[root@server1 codis]# cat bin/version
[root@server1 codis]# ll bin/
快速启动
- 2分钟快速构建一个单机版测试 codis 集群,无任何外部组件依赖.
源码中 admin 文件夹提供了一系列脚本以便快速启动、停止各个组件,提高运维效率。
启动codis-dashboard
- 使用 codis-dashboard-admin.sh 脚本启动 dashboard,并查看 dashboard 日志确认启动是否有异常。
[root@server1 codis]# ./admin/codis-dashboard-admin.sh start
[root@server1 codis]# tail -10 ./log/codis-dashboard.log.2019-08-14
- 快速启动集群元数据存储使用 filesystem,默认数据路径保存在 /tmp/codis,若启动失败,请检查当前用户是否对该路径拥有读写权限。
启动codis-proxy
- 使用 codis-proxy-admin.sh 脚本启动 codis-proxy,并查看 proxy 日志确认启动是否有异常。
[root@server1 codis]# ./admin/codis-proxy-admin.sh start
[root@server1 codis]# tail -n 10 ./log/codis-proxy.log.2019-08-14
启动codis-server
- 使用 codis-server-admin.sh 脚本启动 codis-server,并查看 redis 日志确认启动是否有异常。
[root@server1 codis]# ./admin/codis-server-admin.sh start
[root@server1 codis]# tail -10 /tmp/redis_6379.log
- redis.conf 配置中 pidfile、logfile 默认保存在 /tmp 目录,若启动失败,请检查当前用户是否有该目录的读写权限。
启动codis-fe
- 使用 codis-fe-admin.sh 脚本启动 codis-fe,并查看 fe 日志确认启动是否有异常。
[root@server1 codis]# ./admin/codis-fe-admin.sh start
[root@server1 codis]# tail -10 ./log/codis-fe.log.2019-08-14
通过fe添加group
- 通过web浏览器访问集群管理页面(fe地址:127.0.0.1:9090) 选择我们刚搭建的集群 codis-demo,在 Proxy 栏可看到我们已经启动的 Proxy, 但是 Group 栏为空,因为我们启动的 codis-server 并未加入到集群 添加 NEW GROUP,NEW GROUP 行输入 1,再点击 NEW GROUP 即可 添加 Codis Server,Add Server 行输入我们刚刚启动的 codis-server 地址,添加到我们刚新建的 Group,然后再点击 Add Server 按钮即可,如下图所示
- 浏览器中访问:
http://172.25.11.1:9090/#codis-demo
(本机IP+9090端口)
通过fe初始化slot
- 新增的集群 slot 状态是 offline,因此我们需要对它进行初始化(将 1024 个 slot 分配到各个 group),而初始化最快的方法可通过 fe 提供的 rebalance all slots 按钮来做,如下图所示,点击此按钮,我们即快速完成了一个集群的搭建。