利用Docker安装运行Codis

本文详细介绍了如何利用Docker安装和运行Codis,对比了Codis与Twemproxy的区别,并提供了详细的步骤,包括Dockerfile的创建、配置文件的准备、启动各组件等,帮助读者理解Codis的架构并实践操作。
摘要由CSDN通过智能技术生成

最近打算对缓存中间进行专题性学习,之前使用过Redis Sentinal,后来认识到Codis,对Codis产生感兴趣,于是便有了下面的安装运行总结。


什么是Codis

目前基于Redis集群的方案有三种,第一种是Redis Sentinal,第二种是Redis Cluster,第三种是豌豆荚的Codis。
Redis Sentinal搭建简单,不过受Redis容量限制,普通应用个人觉得已经足够了;本来想分析一下Redis Cluster,不过由于个人没用过,不好说;至于Codis,第一次听说是大概一年前去唯品会面试的时候(原谅我当时的孤陋寡闻),后来就一直留意这个东西,对Codis的动态扩容缩容以及监控页面很甘兴趣,最后狠下心来搭一套起来玩玩。

Twemproxy与Codis

说到Codis不得不提Twemproxy,Twemproxy是twitter开发的redis代理,能够实现数据分片,通过keeplived来实现高可用。不过Twemproxy也有自己的一些痛点:

  • 无法平滑地扩容或缩容
    由于Twemproxy是静态sharding,当业务需要对redis进行扩容或缩容时会导致大量数据不能命中,需要resharding,这对缓存强依赖的应用来说比较致命。
  • 修改配置需要重启
    这个就不用多解释了…
  • 不可运维,没有Dashboard
    这点对运维人员比较痛苦,不能通过控制台对集群进行监控配置

相比而言,Codis比较好地克服了上面的缺点。

Codis概览

首先看看官网上Codis的架构图

这里写图片描述

下面是官方解释:
Codis 3.x 由以下组件组成:

Codis Server:基于 redis-2.8.21 分支开发。增加了额外的数据结构,以支持 slot 有关的操作以及数据迁移指令。具体的修改可以参考文档 redis 的修改。

Codis Proxy:客户端连接的 Redis 代理服务, 实现了 Redis 协议。 除部分命令不支持以外(不支持的命令列表),表现的和原生的 Redis 没有区别(就像 Twemproxy)。

对于同一个业务集群而言,可以同时部署多个 codis-proxy 实例;
不同 codis-proxy 之间由 codis-dashboard 保证状态同步。
Codis Dashboard:集群管理工具,支持 codis-proxy、codis-server 的添加、删除,以及据迁移等操作。在集群状态发生改变时,codis-dashboard 维护集群下所有 codis-proxy 的状态的一致性。

对于同一个业务集群而言,同一个时刻 codis-dashboard 只能有 0个或者1个;
所有对集群的修改都必须通过 codis-dashboard 完成。
Codis Admin:集群管理的命令行工具。

可用于控制 codis-proxy、codis-dashboard 状态以及访问外部存储。
Codis FE:集群管理界面。

多个集群实例共享可以共享同一个前端展示页面;
通过配置文件管理后端 codis-dashboard 列表,配置文件可自动更新。
Codis HA:为集群提供高可用。

依赖 codis-dashboard 实例,自动抓取集群各个组件的状态;
会根据当前集群状态自动生成主从切换策略,并在需要时通过 codis-dashboard 完成主从切换。
Storage:为集群状态提供外部存储。

对Codis架构有大概了解之后,下面我们就开始利用Docker来搭建Codis

利用Docker搭建Codis

首先上一幅描述各个组件之间连接关系的图
这里写图片描述
利用docker发布服务的时候,需要添加--host-admin来指定服务对外的访问地址。
如果不这样做的话,dashboard将不能正确获取到proxy对外的代理和管理端口。例如容器内proxy的管理端口是19000,不添加–host-admin情况下,dashboard会以为proxy的管理端口就是19000,此时是访问不通的(docker真正对外的地址是29000)。

1.准备Dockerfile

FROM golang:1.4

RUN apt-get update
RUN apt-get install -y vim bash golang
RUN apt-get clean
RUN rm -rf /var/lib/apt/lists/*

ENV GOPATH /gopath
ENV CODISLABS ${GOPATH}/src/github.com/CodisLabs  #存放Codis源码目录
ENV CODIS  ${CODISLABS}/codis
ENV GOX    ${GOPATH}/src/golang.org/x
ENV PATH   ${GOPATH}/bin:${PATH}:${CODIS}/bin

WORKDIR ${GOX}
RUN git clone https://github.com/golang/net.git  #获取gonet源码
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值