豆瓣Redis解决方案Codis安装使用

豆瓣Redis解决方案Codis安装使用1.安装1.1 Golang环境

Golang的安装非常简单,因为官网被墙,可以从国内镜像如studygolang.com下载。

[root@vm root]$ tar -C /usr/local -zxf go1.4.2.linux-amd64.tar.gz[root@vm root]$ vim /etc/profileexport GOROOT=/usr/local/goexport PATH=$GOROOT/bin:$PATHexport GOPATH=/home/user/go[root@vm root]$ source /etc/profile[root@vm root]$ go version

注意:操作系统的软件仓库如apt-get或yum安装的Golang版本可能比较老,要卸载后重新手动安装。以我的Linux Mint为例,安装时apt-get install golang指定的其实是个meta,卸载时要指定apt-get remove golang-go才能卸载干净。

1.2 Codis源码包

GitHub上的官方安装指导是这样写的:

[root@vm root]$ go get -d github.com/wandoulabs/codis[root@vm root]$ cd $GOPATH/src/github.com/wandoulabs/codis[root@vm root]$ ./bootstrap.sh[root@vm root]$ make gotest

这种方式会从GitHub上master下载最新的代码,但实践发现有时master代码可能会有问题。所以保险起见,还是下载稳定的release包吧。

1.3 编译安装

下载stable包后,我这里用的是最新的2.0.0版本包。手动创建出go的下载目录,将源码包解压后放进去,这样就手动完成了通过go get下载源码一步,避免用master分支代码的不稳定性。

[root@vm root] mkdir -p /home/root/go/src/github.com/wandoulabs/codis[root@vm root] tar -xzvf …[root@vm root] cd codis[root@vm codis] find . -name “configure” | xargs chmod +x[root@vm codis] find . -name “*.sh” | xargs chmod +x[root@vm codis] ./bootstrap.shHint: It’s a good idea to run ‘make test’ ;)make[2]: Leaving directory `/home/root/go/src/github.com/wandoulabs/codis/extern/redis-2.8.21/src’make[1]: Leaving directory `/home/root/go/src/github.com/wandoulabs/codis/extern/redis-2.8.21’ln -s codis-server-2.8.21 bin/codis-servergo test ./pkg/… ./cmd/… -race?github.com/wandoulabs/codis/pkg/env[no test files]okgithub.com/wandoulabs/codis/pkg/models 5.057s?github.com/wandoulabs/codis/pkg/proxy/group[no test files]okgithub.com/wandoulabs/codis/pkg/proxy/redis3.061sokgithub.com/wandoulabs/codis/pkg/proxy/router 17.916s?github.com/wandoulabs/codis/pkg/proxy/router/topology [no test files]?github.com/wandoulabs/codis/pkg/utils [no test files]?github.com/wandoulabs/codis/pkg/utils/assert [no test files]?github.com/wandoulabs/codis/pkg/utils/atomic2 [no test files]okgithub.com/wandoulabs/codis/pkg/utils/bytesize 0.025s?github.com/wandoulabs/codis/pkg/utils/errors [no test files]?github.com/wandoulabs/codis/pkg/utils/log[no test files]?github.com/wandoulabs/codis/pkg/utils/trace[no test files]?github.com/wandoulabs/codis/cmd/cconfig [no test files]?github.com/wandoulabs/codis/cmd/proxy [no test files]2.启动

之前参照官网上的“流程”一节,被“坑”苦了…鼓捣了老半天也不行,要么就是Dashboard端口不对了,要么就是Slot初始化不了了,都要放弃了。发现正确的步骤在codis/sample/usage.md里,作者都写好了启动脚本。

[root@vm sample] ./start_dashboard.sh[root@vm sample] ./start_redis.sh[root@vm sample] ./add_group.sh[root@vm sample] ./initslot.sh[root@vm sample] ./start_proxy.sh[root@vm sample] ./set_proxy_online.sh

首先启动Dashboard,然后启动四个Redis实例,为这四个Redis实例创建四个Group,初始化Slot,,启动一个Proxy实例,将Proxy置为Online状态。其中像新建Group、置为Online这种操作其实在Dashboard上都能做,但作者造福大家都给准备好了。一气呵成啊!刚才还自己瞎鼓捣了半天…

3.观察ZooKeeper

Codis使用ZooKeeper做协调,下面就看一下ZooKeeper里存的到底都是些什么。

Codis会根据我们在config.ini中配置的product_name作为ZooKeeper中的路径。

[zk: localhost:2181(CONNECTED) 34] ls /zk/codis/db_test[fence, slots, servers, proxy, migrate_tasks, dashboard, LOCK, actions, ActionResponse]3.1 Slot信息

前面initslots初始化的所有Slot都保存在slots路径下,每个Slot是一个结点。

[zk: localhost:2181(CONNECTED) 35] ls /zk/codis/db_test/slots[slot_240, slot_241, slot_242, slot_244, slot_243, slot_246, slot_245, slot_248, slot_247, slot_249, slot_804, slot_803, slot_802, slot_801, slot_808, slot_807, slot_806, slot_805, slot_800, slot_230, slot_231,slot_832, slot_286, slot_672, slot_675, slot_674, slot_670, slot_671, slot_4, slot_3, slot_2, slot_1, slot_8, slot_7, slot_6, slot_5, slot_9, slot_0, slot_600, slot_602, slot_601, slot_608, slot_607, slot_609, slot_604, slot_603, slot_606, slot_605, slot_205, slot_206, slot_203, slot_204, slot_201, slot_202, slot_200, slot_209, slot_207, slot_208]

随便选取一个Slot结点,用get命令能够查看结点上附着的数据:

[(CONNECTED) 8] get /zk/codis/db_test/slots/slot_208{,,,,},”last_op_ts”:”0″}}3.2 Proxy信息[zk: localhost:2181(CONNECTED) 40] ls /zk/codis/db_test/proxy[proxy_1][zk: localhost:2181(CONNECTED) 12] get /zk/codis/db_test/proxy/proxy_1 {“id”:”proxy_1″,”addr”:”BC-VM-edce4ac67d304079868c0bb265337bd4:19000″,”last_event”:””,”last_event_ts”:0,”state”:”online”,”description”:””,”debug_var_addr”:”BC-VM-edce4ac67d304079868c0bb265337bd4:11000″,”pid”:2946,”start_at”:”2015-07-03 16:13:53.277706979 +0800 CST”}3.3 Server信息自己打败自己的远远多于比别人打败的。

豆瓣Redis解决方案Codis安装使用

相关文章:

你感兴趣的文章:

标签云: