Codis搭建

1.先安装go

访问https://golang.org/doc/install 下载go

tar -C /usr/local -xzf go$VERSION.$OS-$ARCH.tar.gz  
#修改`/etc/profile`
vi /etc/profile  
export PATH=$PATH:/usr/local/go/bin  
#设置gopath
mkdir /opt/gopath  
export GOPATH=/opt/gopath  
#修改完后 运行以下命令是配置立即生效
source /etc/profile  

2.安装zookeeper

启动codis之前需要安装并启动zookeeper 下载地址:http://zookeeper.apache.org/releases.html#download 安装目录/opt/zookeeper

mkdir /opt/zookeeper/logs  
vi /opt/zookeeper/conf/zoo.cfg  
#配置文件
tickTime=2000  
clientPort=2181  
dataDir=/opt/zookeeper/data  
dataLogDir=/opt/zookeeper/logs  
#启动zookeeper
sh /opt/zookeeper/bin/zkServer.sh start  

3.配置codis

go get -u -d github.com/wandoulabs/codis  
cd $GOPATH/src/github.com/wandoulabs/codis  
./bootstrap.sh
make gotest  

修改codis目录下config.ini文件中ip为本机ip

3.1 流程

  1. 启动 dashboard, 执行 bin/codis-config dashboard, 该命令会启动 dashboard
  2. 初始化 slots , 执行 bin/codis-config slot init,该命令会在zookeeper上创建slot相关信息
  3. 启动 Codis Redis , 和官方的Redis Server参数一样
  4. 添加 Redis Server Group , 每一个 Server Group 作为一个 Redis 服务器组存在, 只允许有一个 master, 可以有多个 slave, group id 仅支持大于等于1的整数
$ bin/codis-config server -h                                                                                                                                                                                                                   usage:
    codis-config server list
    codis-config server add <group_id> <redis_addr> <role>
    codis-config server remove <group_id> <redis_addr>
    codis-config server promote <group_id> <redis_addr>
    codis-config server add-group <group_id>
    codis-config server remove-group <group_id>

如: 添加两个 server group, 每个 group 有两个 redis 实例,group的id分别为1和2, redis实例为一主一从。

添加一个group,group的id为1, 并添加一个redis master到该group

$ bin/codis-config server add 1 138.128.205.216:6379 master

添加一个redis slave到该group

$ bin/codis-config server add 1 138.128.205.216:6380 slave

类似的,再添加group,group的id为2

$ bin/codis-config server add 2 138.128.205.216:6479 master
$ bin/codis-config server add 2 138.128.205.216:6480 slave
  1. 设置 server group 服务的 slot 范围 Codis 采用 Pre-sharding 的技术来实现数据的分片, 默认分成 1024 个 slots (0-1023), 对于每个key来说, 通过以下公式确定所属的 Slot Id : SlotId = crc32(key) % 1024 每一个 slot 都会有一个且必须有一个特定的 server group id 来表示这个 slot 的数据由哪个 server group 来提供.
$ bin/codis-config slot -h                                                                                                                                                                                                                     
usage:  
    codis-config slot init
    codis-config slot info <slot_id>
    codis-config slot set <slot_id> <group_id> <status>
    codis-config slot range-set <slot_from> <slot_to> <group_id> <status>
    codis-config slot migrate <slot_from> <slot_to> <group_id> [--delay=<delay_time_in_ms>]

如:

设置编号为[0, 511]的 slot 由 server group 1 提供服务, 编号 [512, 1023] 的 slot 由 server group 2 提供服务

$ bin/codis-config slot range-set 0 511 1 online
$ bin/codis-config slot range-set 512 1023 2 online

5. 启动 codis-proxy

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

刚启动的 codis-proxy 默认是处于 offline状态的, 然后设置 proxy 为 online 状态, 只有处于 online 状态的 proxy 才会对外提供服务

 bin/codis-config -c config.ini proxy online <proxy_name>  <---- proxy的id, 如 proxy_1

6. 打开浏览器 http://localhost:18087/admin 现在可以在浏览器里面完成各种操作了, 玩得开心

4.重新启动codis

每次启动codis都需要启动zookepper

有时候开始开启好了,把进程kill后还再执行

.../bin/codis-config dashboard
2015/07/03 11:41:17 dashboard.go:170: [info] dashboard listening on addr:  :8086  
2015/07/03 11:41:17 dashboard.go:244: [fatal] dashboard already exists: {"addr": "localhost:18087", "pid": 29013}  

提示已经启动,但是没有进程没有端口,奇怪了,既然在本机上面没有到zk上面看看有没有呢

.../bin/zkCli.sh -server 138.128.205.216:2181
[zk: 138.128.205.216:2181(CONNECTED) 0]  ls /zk/codis/db_test
[migrate_tasks, dashboard, actions, slots, ActionResponse]
[zk: 138.128.205.216:2181(CONNECTED) 1] rmr /zk/codis/db_test/dashboard
#删除后再启动就能启动了

参考

[1] https://github.com/wandoulabs/codis/blob/master/doc/tutorial_zh.md

[2] http://blog.csdn.net/dc_726/article/details/47052607