您的位置:首页 > 其它

codis简介以及安装指导手册

2015-09-18 17:49 423 查看

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-hacd /usr/local/go/work/src/github.com/ngaut/codis-hago build
./codis-ha--codis-config=192.168.92.136:18087 --productName=test &



7. Jodis客户端

使用循环调度策略方式多个proxy
<dependency>
<groupId>com.wandoulabs.jodis</groupId>
<artifactId>jodis</artifactId>
<version>0.1.2</version>
</dependency>

JedisResourcePool jedisPool = new RoundRobinJedisPool("192.168.92.137:2181", 30000, "/zk/codis/db_test/proxy", new JedisPoolConfig());
try (Jedis jedis = jedisPool.getResource()) {
jedis.set("key11", "bar");
String value = jedis.get("key11");
System.out.println(value);
}

8. Codis不支持的命令

Command TypeCommand Name
KeysKEYS
MIGRATE
MOVE
OBJECT
RANDOMKEY
RENAME
RENAMENX
SCAN
StringsBITOP
MSETNX
ListsBLPOP
BRPOP
BRPOPLPUSH
Pub/SubPSUBSCRIBE
PUBLISH
PUNSUBSCRIBE
SUBSCRIBE
UNSUBSCRIBE
TransactionsDISCARD
EXEC
MULTI
UNWATCH
WATCH
ScriptingSCRIPT
ServerBGREWRITEAOF
BGSAVE
CLIENT
CONFIG
DBSIZE
DEBUG
FLUSHALL
FLUSHDB
LASTSAVE
MONITOR
RESTORE
SAVE
SHUTDOWN
SLAVEOF
SLOWLOG
SYNC
TIME
Codis SlotSLOTSCHECK
SLOTSDEL
SLOTSINFO
SLOTSMGRTONE
SLOTSMGRTSLOT
SLOTSMGRTTAGONE
SLOTSMGRTTAGSLOT

9. Codis半支持的命令

需要将以下key放入同一slot才能支持,方式采用{},如key为“bar{zap}”,则只会对zap进行hash
Command TypeCommand Name
ListsRPOPLPUSH
SetsSDIFF
SINTER
SINTERSTORE
SMOVE
SUNION
SUNIONSTORE
Sorted SetsZINTERSTORE
ZUNIONSTORE
HyperLogLogPFMERGE
ScriptingEVAL
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