千家信息网

codis有什么用

发表于:2024-12-04 作者:千家信息网编辑
千家信息网最后更新 2024年12月04日,这篇文章给大家分享的是有关codis有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1. Codis简介Codis 是一个分布式 Redis 解决方案, 对于上层的应
千家信息网最后更新 2024年12月04日codis有什么用

这篇文章给大家分享的是有关codis有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

1. Codis简介

Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到Codis Proxy 和连接原生的 Redis Server 没有明显的区别 (不支持的命令列表), 上层应用可以像使用单机的 Redis 一样使用, Codis 底层会处理请求的转发, 不停机的数据迁移等工作, 所有后边的一切事情, 对于前面的客户端来说是透明的, 可以简单的认为后边连接的是一个内存无限大的 Redis 服务.

Codis 由四部分组成:

  • Codis Proxy (codis-proxy)

  • Codis Manager (codis-config)

  • Codis Redis (codis-server)

  • ZooKeeper

codis-proxy 是客户端连接的 Redis 代理服务, codis-proxy 本身实现了 Redis 协议, 表现得和一个原生的Redis 没什么区别 (就像 Twemproxy), 对于一个业务来说, 可以部署多个 codis-proxy, codis-proxy 本身是无状态的.

codis-config 是Codis 的管理工具, 支持包括, 添加/删除 Redis 节点, 添加/删除 Proxy 节点, 发起数据迁移等操作. codis-config 本身还自带了一个 http server, 会启动一个 dashboard, 用户可以直接在浏览器上观察 Codis 集群的运行状态.

codis-server 是Codis 项目维护的一个 Redis 分支, 基于 2.8.21 开发, 加入了 slot的支持和原子的数据迁移指令. Codis 上层的codis-proxy 和 codis-config 只能和这个版本的 Redis 交互才能正常运行.

Codis 依赖 ZooKeeper 来存放数据路由表和 codis-proxy 节点的元信息, codis-config 发起的命令都会通过 ZooKeeper 同步到各个存活的 codis-proxy.

Codis 支持按照Namespace 区分不同的产品, 拥有不同的product name 的产品, 各项配置都不会冲突.

2. Codis架构

3. Codis部署

安装centos服务器3台:192.168.92.136,192.168.92.138,192.168.92.138

3.1.部署架构

3.2.部署角色

3.2.1. Zookeeper集群

192.168.92.136:2181

192.168.92.137:2181

192.168.92.138:2181

3.2.2. Codis-config

192.168.92.136:18078

3.2.3. Codis-proxy

192.168.92.137:19000

192.168.92.138:19000

3.2.4. Codis-server

192.168.92.137:7000、192.168.92.137:7001(主、从)

192.168.92.138:7000、192.168.92.138:7001(主、从)

3.3.部署

3.3.1. 关闭防火墙和selinux(略)

3.3.2. 安装jdk(略)

3.3.3. 安装zookeeper

3.3.3.1. 下载zookeeper

下载地址:http://zookeeper.apache.org/releases.html

3.3.3.2. 解压zookeeper

tar xf zookeeper-3.4.6.tar.gz -C /usr/local/

3.3.3.3. 编辑zookeeper文件
  • 配置文件存放在$ZOOKEEPER_HOME/conf/目录下,将zoo_sample.cfg文件名称改为zoo.cfg

mv zoo_sample.cfg zoo.cfg

  • 编辑zoo.cfg: vizoo.cfg,添加节点

server.1=192.168.92.136:2888:3888

server.2=192.168.92.137:2888:3888

server.3=192.168.92.138:2888:3888

  • 修改data路径:dataDir=/var/lib/zookeeper

  • 在data路径下添加myid文件,内容存放pid,与server.x一致

3.3.3.4. 启动zookeeper

执行:./bin/zkServer.sh start

3.4.安装go

3.4.1. 下载go

地址:http://golangtc.com/static/go/go1.4.2.linux-amd64.tar.gz

3.4.2. 解压go

tar xf go1.4.2.linux-amd64.tar.gz -C/usr/local/

3.4.3. 添加go环境变量

vi /etc/profile,添加如下

GOROOT=/usr/local/go

GOPATH=/usr/local/go/work

source /etc/profile

3.5.安装Development Tool,git

yum install -y "Development Tool"

yum install -y git

3.6.安装codis

3.6.1. 下载编译codis

go get -u-d github.com/wandoulabs/codis

cd $GOPATH/src/github.com/wandoulabs/codis

./bootstrap.sh

make gotest

3.6.2. 编辑config.ini文件

修改zookeeper地址和dashboard地址:vi config.ini

每个proxy的proxy_id必须不同

3.6.3. 启动dashboard

mkdir log

./bin/codis-config-c config.ini -L ./log/dashboard.log dashboard &

3.6.4. 初始化solts

./bin/codis-config -c config.ini slot init -f

3.6.5. 启动codis-server

  • 启动master:mkdir 7000

cp extern/redis-2.8.21/redis.conf 7000/

修改port、bind、maxmemory:vi 7000/redis.conf

启动:./bin/codis-server 7000/redis.conf

  • 启动slave: mkdir 7001

cp extern/redis-2.8.21/redis.conf 7001/

修改port、bind、maxmemory:vi 7001/redis.conf

启动:./bin/codis-server 7001/redis.conf

3.6.6. 添加redis server group

./bin/codis-config -cconfig.ini server add 1 192.168.92.137:7000 master

./bin/codis-config -c config.ini server add1 192.168.92.137:7001 slave

192.168.92.138节点启动redis如上

3.6.7. 设置server group 服务的 slot范围

./bin/codis-config -c config.ini slotrange-set 0 600 1 online

./bin/codis-config -c config.ini slotrange-set 601 1023 2 online

3.6.8. 启动 codis-proxy

bin/codis-proxy -c config.ini -L ./log/proxy.log --cpu=1 --addr=0.0.0.0:19000--http-addr=0.0.0.0:11000 &

3.6.9. 浏览器访问

http://192.168.92.136:18087/admin/

4. 数据迁移

将group_1的solt:599,600迁移到group_2

4.1.命令行迁移方式

执行:bin/codis-config -c config.ini slot migrate 599 600 2 --delay=10

4.2.Dashboard迁移方式

5. Auto Rebalance

Codis 支持动态的根据实例内存, 自动对slot进行迁移, 以均衡数据分布.

要求:

  • 所有的codis-server都必须设置了maxmemory参数

  • 所有的 slots 都应该处于 online 状态, 即没有迁移任务正在执行

  • 所有 server group 都必须有 Master

5.1.命令行方式:

$ bin/codis-config slot rebalance

5.2.Dashboard方式

6. HA

当一个group的master挂掉的时候,codis不会自动的将某个slave升级成master

该工具会在检测到master挂掉的时候将其下线并选择其中一个slave提升为master继续提供服务

go get github.com/ngaut/codis-ha

cd /usr/local/go/work/src/github.com/ngaut/codis-ha

go build

./codis-ha--codis-config=192.168.92.136:18087 --productName=test &

7. Jodis客户端

使用循环调度策略方式多个proxy

<>    <>com.wandoulabs.jodis    <>jodis    <>0.1.2
JedisResourcePool jedisPool = RoundRobinJedisPool(, 30000, , JedisPoolConfig());(Jedis jedis = jedisPool.getResource()) {    jedis.set(, );    String value = jedis.get();    System..println(value);}

8. Codis不支持的命令

Command Type

Command Name

Keys

KEYS


MIGRATE


MOVE


OBJECT


RANDOMKEY


RENAME


RENAMENX


SCAN



Strings

BITOP


MSETNX



Lists

BLPOP


BRPOP


BRPOPLPUSH



Pub/Sub

PSUBSCRIBE


PUBLISH


PUNSUBSCRIBE


SUBSCRIBE


UNSUBSCRIBE



Transactions

DISCARD


EXEC


MULTI


UNWATCH


WATCH



Scripting

SCRIPT



Server

BGREWRITEAOF


BGSAVE


CLIENT


CONFIG


DBSIZE


DEBUG


FLUSHALL


FLUSHDB


LASTSAVE


MONITOR


RESTORE


SAVE


SHUTDOWN


SLAVEOF


SLOWLOG


SYNC


TIME



Codis Slot

SLOTSCHECK


SLOTSDEL


SLOTSINFO


SLOTSMGRTONE


SLOTSMGRTSLOT


SLOTSMGRTTAGONE


SLOTSMGRTTAGSLOT

9. Codis半支持的命令

需要将以下key放入同一slot才能支持,方式采用{},如key为"bar{zap}",则只会对zap进行hash

Command Type

Command Name

Lists

RPOPLPUSH

Sets

SDIFF


SINTER


SINTERSTORE


SMOVE


SUNION


SUNIONSTORE

Sorted Sets

ZINTERSTORE


ZUNIONSTORE

HyperLogLog

PFMERGE

Scripting

EVAL


EVALSHA

10. 附录

10.1.修改dashboard端口号

1.修改config文件

dashboard_addr=192.168.92.136:19001

2.启动命令变更为:

./bin/codis-config -cconfig.ini -L ./log/dashboard.log dashboard --addr=192.168.92.136:19001 &

感谢各位的阅读!关于"codis有什么用"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

0