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 流程
- 启动
dashboard
, 执行bin/codis-config dashboard
, 该命令会启动dashboard
- 初始化 slots , 执行 bin/codis-config slot init,该命令会在zookeeper上创建slot相关信息
- 启动 Codis Redis , 和官方的Redis Server参数一样
- 添加 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
- 设置 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
评论区