Codis的原理以及部署


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
[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 按钮来做,如下图所示,点击此按钮,我们即快速完成了一个集群的搭建。
    在这里插入图片描述
    在这里插入图片描述
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值