Codis 使用 Go 语言开发,它是一个代理中间件,它和 Redis 一样也使用 Redis 协议 对外提供服务,当客户端向 Codis 发送指令时,Codis 负责将指令转发到后面的 Redis...Codis 上挂接的所有 Redis 实例构成一个 Redis 集群,当集群空间不足时,可以通过动 态增加 Redis 实例来实现扩容需求。...Codis 分片原理 Codis 要负责将特定的 key 转发到特定的 Redis 实例,那么这种对应关系 Codis 是如 何管理的呢?...Codis 的缺点 Codis 给 Redis 带来了扩容的同时,也损失了其它一些特性。...Codis 的尴尬 Codis 不是 Redis 官方项目,这意味着它的命运会无比曲折,它总是要被官方 Redis 牵 着牛鼻子走。
,社区的解决方案有 Codis 和Twemproxy,Codis是由我国的豌豆荚团队开源的,Twemproxy是Twitter团队的开源的;官方的集群解决方案就是 Redis Cluster,这是由 Redis...具体的修改可以参考文档 redis 的修改。 Codis Proxy:客户端连接的 Redis 代理服务, 实现了 Redis 协议。...Codis 分片原理 在Codis中,Codis会把所有的key分成1024个槽,这1024个槽对应着的就是Redis的集群,这个在Codis中是会在内存中维护着这1024个槽与Redis实例的映射关系...如图: [image.png] Codis中的扩容 因为Codis是一个代理中间件,所以这个当需要扩容Redis实例的时候,可以直接增加redis节点。...4.安装codis-server(优化版的Redis) codis-server的配置文件和redis一样,其本身就是在redis上改进而来。
出发点 因为线上多机房,然后有一个机房历史原因使用了Codis,这样就导致开发、QA、线上环境在缓存软件这块有点差异,为了因为这种差异化的东西,导致开发出来的软件对接缓存应用导致不同表现情况的话,线上统一用一个版本的...127.0.0.1:6379[common] listen: 0.0.0.0:8888 mbuf_size: 1024 192.168.1.100:6379和192.168.1.100:6380 指的是Codis...简单解释下原理: redis-migrate-tool 会作为 Codis 每个 Group 的 master 的 slave,接收到的数据以客户端的形式写入目标实例 迁移 启动 redis-migrate-tool...:1 # Codis group 数量 rdb_received_count:2 rdb_parsed_count:2 配置服务连接 Redis 实例,检查 Codis 连接,知道所有连接断开,执行 redis-cli...redis-cli -p 8888 shutdown 最后下架你的Codis机器即可,此方法你还可以原始至Redis到Redis之间的迁移,可以实践测试,注意支持的数据类型。
Codis架构 它的架构如上图所示,由codis-proxy对外提供Redis的服务。ZooKeeper用来存储数据路由表和codis-proxy节点的元信息。...codis-proxy会监听所有的redis集群,当Redis集群处理能力达到上限时,可以动态增加Redis实例来实现扩容的需求。...组件介绍 Codis Proxy:像刚才所说的,它对外提供Redis服务,除了一些不支持的命令外(不支持的命令列表),表现的和原生的Redis没有区别。...Codis分片原理 现在我们已经知道了Codis会将指定key的Redis命令转发给下层的Redis。那么Codis如何知道某个key在哪个Redis上呢。...此外,Codis还面临一个比较尴尬的情况就是,由于它不是Redis“亲生”的,因此,当Redis发布了new feature时,它总会慢一步,因此,它需要在Redis发布new feature后迅速赶上
API等功能 codis-group:基于Redis 3.2.8版本二次开发的Redis Server,增加了异步数据迁移功能 codis-fe:管理多个集群的UI界面 可见Codis的组件还是挺多的,...因此,要想使用Codis,必须使用它内置的Redis,这也就意味着Codis中的Redis是否能跟上官方最新版的功能特性,可能无法得到保障,这取决于Codis的维护方,目前Codis已经不再维护,所以使用...Codis时只能使用3.2.8版的Redis,这是一个痛点。...但这不影响它是一个优秀的集群化方案,由于我司使用Redis集群方案较早,那时Redis Cluster还不够成熟,所以我司使用的Redis集群方案就是Codis。...目前我的工作主要是围绕Codis展开的,我们公司对Codis进行了定制开发,还对Redis进行了一些改造,让Codis支持了跨多个数据中心的数据同步,因此我对Codis的代码比较熟悉,后面会专门写一些文章来剖析
在这次集群组建的过程中我们采用了豌豆荚开源的codis集群来承接业务需求,通过再开多个实例的方式来分担redis的业务压力。...具体的codis集群搭建的过程就不在此赘述,本文主要记录线上redis数据迁移到codis中的过程。.../6379/appendonly.aof | redis-cli -h codis地址 -p codis端口 --pipe 4、停止业务,禁用源redis端口,保证在切换过程中没有新的redis操作进行...tail -c 3796621870 /var/lib/redis/6379/appendonly.aof | redis-cli -h codis地址 -p codis端口 --pipe 6、修改业务代码中...redis的地址到codis的地址,启动服务,此时原redis的访问端口依然被封闭,待服务正常后就可以关闭原redis服务了。
Redis在豌豆荚的使用历程——单实例==》多实例,业务代码中做sharding==》单个Twemproxy==》多个Twemproxy==》Codis,豌豆荚自己开发的分布式Redis服务。...虽然我们有众多的选择,比如Tair、Couchbase等,但是如果你需要更复杂和优秀的数据结构,Redis可称为不二之选。基于这个原因,在Redis之上,豌豆荚设计了Codis,并将之开源。...Codis主要包含Codis Proxy(codis-proxy)、Codis Manager(codis-config)、Codis Redis(codis-server)和ZooKeeper四大组件...codis-proxy 。客户端连接的Redis代理服务,本身实现了Redis协议,表现很像原生的Redis (就像 Twemproxy)。...一个业务可以部署多个 codis-proxy,其本身是无状态的。 codis-config。Codis 的管理工具,支持添加/删除Redis节点、添加/删除Proxy节点、发起数据迁移等操作。
在前面,我们提到了 Redis 集群方案 Redis Cluster,今天我们来聊聊 Redis 另外一种比较受欢迎的集群方案:Codis。...Codis 是豌豆荚开源的 Redis 分布式中间件,使用 Go 语言开发,其拥有不停机数据迁移、对客户端透明、平滑扩容、拥有管理后台等特点。...下面我们从几个方向聊聊这一集群方案: 1 架构 首先,一起来看看 Codis 的架构图: 这里简单介绍各个组件的作用: Codis Server:Codis 3.x 是由 Redis 3.2.8 分支开发而来...Codis Proxy:客户端连接 Redis 的代理,需要注意的是,有部分命令不支持:不支持的命令列表。...集群方案 优点 缺点 Codis 平滑扩容支持读写分离拥有管理平台多线程 Codis 集群整体性能比单个 Redis 性能有所下降依赖 zk跟不上官方高版本 Redis 的新功能 Twemproxy
前言 Codis 是一个使用Go语言编写的Redis集群代理,是一种 Redis 的分布式集群解决方案,支持管道和动态弹性扩容 redis集群方案对比 除了 Codis ,Twemproxy 和 Redis...Cluster 也能实现Redis集群,下面是它们的对比 Feature Codis Twemproxy Redis Cluster resharding without restarting cluster...hash tags for multi-key operations Yes Yes Yes multi-key operations while resharding Yes - No(details) Redis...Any clients Any clients Clients have to support cluster protocol 架构图 其它特性 具备GUI网页管理界面 支持绝大部分(并非所有)Redis
Codis Codis 是由豌豆荚于2014年11月开源的 redis 集群解决方案,他针对 Twemproxy 上述弱点,实现了一套。...Codis 的架构 Codis引入了Group的概念,每个Group包括1个Redis Master及至少1个Redis Slave。...Codis 的优势 Codis 有着以下优点: 数据热迁移 — 这是 Redis 最大的优势,这也是他被广为使用的最大原因, 运维界面友好 — 提供 slot状态、Proxy状态、group状态、lock...Codis 的缺点 Codis 也具有以下明显的缺点: 版本滞后 — 因为在 redis 源码基础上进行二次开发,所以很难跟上最新版 redis 的脚步,目前最新的 Codis-3.2 基于 Redis...codis-server,性能低于原生 redis 20% 左右 更新频率低 4.
打开浏览器进入 http://ip:11000/debug/vars 可以获取一些debug信息
初始化 slots [root@h102 codis]# bin/codis-config slot help usage: codis-config slot init [-f] codis-config...slot info codis-config slot set codis-config slot range-set...初始化之前是空白的) ---- 启动 Codis Server extern 目录中包含一整个 redis-2.8.21 的版本 [root@h102 codis]# grep -v "^#" extern.../redis-2.8.21/redis.conf | grep -v "^$" daemonize yes pidfile /var/run/redis.pid port 6379 tcp-backlog...]# bin/codis-server extern/redis-2.8.21/redis.conf [root@h102 codis]#
发现此时,slave的同步关系已经自动建立好了 [root@h102 codis]# extern/redis-2.8.21/src/redis-cli -p 6390 info replication...repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0 [root@h102 codis...]# 查看配置信息 [root@h102 codis]# bin/codis-config server list [ { "id": 1, "product_name": "test...": "localhost:6389", "group_id": 2, "type": "master" } ] } ] [root@h102 codis
配置Go环境 [root@h102 ~]# export GOROOT=/usr/local/go [root@h102 ~]# export PATH=$PA...
启动 codis-proxy [root@h102 codis]# bin/codis-proxy -c config.ini -L /tmp/proxy.log --cpu=2 --addr=0.0.0.0...修改codis-proxy状态 [root@h102 codis]# bin/codis-config proxy help usage: codis-config proxy list codis-config...proxy offline codis-config proxy online [root@h102 codis]# bin/codis-config..."start_at": "2015-12-04 22:37:24.576758464 +0800 CST", "state": "offline" } ] [root@h102 codis...]# bin/codis-config -c config.ini proxy online proxy_1 { "msg": "OK", "ret": 0 } [root@h102 codis
修改此值 [root@h102 codis]# extern/redis-2.8.21/src/redis-cli -p 6379 CONFIG set maxmemory 100 OK [root@h102...codis]# extern/redis-2.8.21/src/redis-cli -p 6389 CONFIG set maxmemory 100 OK [root@h102 codis]# extern.../redis-2.8.21/src/redis-cli -p 6390 CONFIG set maxmemory 100 OK [root@h102 codis]# extern/redis-2.8.21.../src/redis-cli -p 6380 CONFIG set maxmemory 100 OK [root@h102 codis]# extern/redis-2.8.21/src/redis-cli...-p 6379 CONFIG GET maxmemory 1) "maxmemory" 2) "100" [root@h102 codis]# extern/redis-2.8.21/src/redis-cli
添加到group [root@h102 codis]# bin/codis-config server add 1 localhost:6379 master { "msg": "OK", "ret...": 0 } [root@h102 codis]# [root@h102 codis]# bin/codis-config server add 1 localhost:6380 slave 2015...[root@h102 codis]# echo $?...pass config.ini #password=codis [root@h102 codis]# 再次尝试添加 [root@h102 codis]# bin/codis-config server...add 1 localhost:6380 slave { "msg": "OK", "ret": 0 } [root@h102 codis]# bin/codis-config server
9.242s ok github.com/wandoulabs/codis/pkg/proxy/redis 12.355s ok github.com/wandoulabs/codis/pkg.../redis-server [/path/to/redis.conf] [options] ..../redis-server - (read config from stdin) ./redis-server -v or --version ..../redis-server (run the server with default conf) ./redis-server /etc/redis/6379.conf ..../redis-server /etc/sentinel.conf --sentinel [root@h102 codis]#
下面分享一下它的基础操作,详细可以参考 官方文档 Tip: 貌似没有自己的版本信息,不过当前的版本基于 Redis 2.8.21 开发的 [root@h101 bin]# ..../codis-server --version Redis server v=2.8.21 sha=4a332efd:0 malloc=jemalloc-3.6.0 bits=64 build=569d3bc356356f21...[root@h101 bin]# ---- 概要 ---- 安装Codis 由于 Codis 是基于Go语言的,所以得先安装Go ---- 安装Go Tip: Go当前最新版本为 go1.5.2 [
设置 server group 服务的 slot 范围 [root@h102 codis]# bin/codis-config slot range-set 0 500 1 online { "msg...": "OK", "ret": 0 } [root@h102 codis]# bin/codis-config slot range-set 501 1023 2 online { "msg":..."OK", "ret": 0 } [root@h102 codis]# 执行完第一条命令后,会发现管理界面里slot状态发生了变化 执行完第二条命令后,管理界面里slot状态又发生了变化 双击其中一个
领取专属 10元无门槛券
手把手带您无忧上云