豌豆夹Redis解决方案Codis安装使用

 

1.安装

1.1 Golang环境

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

<code class="hljs d has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">[root<span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">@vm</span> root]$ tar -C /usr/local -zxf go1.4.2.linux-amd64.tar.gz
[root<span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">@vm</span> root]$ vim /etc/profile
<span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">export</span> GOROOT=/usr/local/go
<span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">export</span> PATH=$GOROOT/bin:$PATH
<span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">export</span> GOPATH=/home/user/go

[root<span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">@vm</span> root]$ source /etc/profile
[root<span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">@vm</span> root]$ go <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">version</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li></ul>

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

1.2 Codis源码包

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

<code class="hljs ruby has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">[root<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">@vm</span> root]<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">$ </span>go get -d github.com/wandoulabs/codis
[root<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">@vm</span> root]<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">$ </span>cd <span class="hljs-variable" style="color:#66066;box-sizing: border-box;">$GOPATH</span>/src/github.com/wandoulabs/codis
[root<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">@vm</span> root]<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">$ </span>./bootstrap.sh
[root<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">@vm</span> root]<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">$ </span>make gotest</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li></ul>

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

1.3 编译安装

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

<code class="hljs asciidoc has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">[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 "<span class="hljs-strong" style="box-sizing: border-box;">*.sh" | xargs chmod +x

</span>[root@vm codis] ./bootstrap.sh
<span class="hljs-code" style="box-sizing: border-box;">    CC hyperloglog.o</span>
<span class="hljs-code" style="box-sizing: border-box;">    CC latency.o</span>
<span class="hljs-code" style="box-sizing: border-box;">    CC sparkline.o</span>
<span class="hljs-code" style="box-sizing: border-box;">    CC slots.o</span>
<span class="hljs-code" style="box-sizing: border-box;">    CC redis-cli.o</span>
<span class="hljs-code" style="box-sizing: border-box;">    CC redis-benchmark.o</span>
<span class="hljs-code" style="box-sizing: border-box;">    CC redis-check-dump.o</span>
<span class="hljs-code" style="box-sizing: border-box;">    CC redis-check-aof.o</span>
<span class="hljs-code" style="box-sizing: border-box;">    LINK redis-benchmark</span>
<span class="hljs-code" style="box-sizing: border-box;">    LINK redis-check-dump</span>
<span class="hljs-code" style="box-sizing: border-box;">    LINK redis-check-aof</span>
<span class="hljs-code" style="box-sizing: border-box;">    LINK redis-server</span>
<span class="hljs-code" style="box-sizing: border-box;">    INSTALL redis-sentinel</span>
<span class="hljs-code" style="box-sizing: border-box;">    LINK redis-cli</span>

Hint: It's a good idea to run <span class="hljs-emphasis" style="box-sizing: border-box;">'make test'</span> ;)

make[2]: Leaving directory <span class="hljs-smartquote" style="box-sizing: border-box;">`/home/root/go/src/github.com/wandoulabs/codis/extern/redis-2.8.21/src'</span>
make[1]: Leaving directory <span class="hljs-smartquote" style="box-sizing: border-box;">`/home/root/go/src/github.com/wandoulabs/codis/extern/redis-2.8.21'</span>
ln -s codis-server-2.8.21 bin/codis-server
go test ./pkg/... ./cmd/... -race
?       github.com/wandoulabs/codis/pkg/env     [no test files]
ok      github.com/wandoulabs/codis/pkg/models  5.057s
?       github.com/wandoulabs/codis/pkg/proxy/group     [no test files]
ok      github.com/wandoulabs/codis/pkg/proxy/redis     3.061s
ok      github.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]
ok      github.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]</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li></ul>

2.启动

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

<code class="hljs ruby has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">[root<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">@vm</span> sample] ./start_dashboard.sh
[root<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">@vm</span> sample] ./start_redis.sh
[root<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">@vm</span> sample] ./add_group.sh
[root<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">@vm</span> sample] ./initslot.sh
[root<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">@vm</span> sample] ./start_proxy.sh
[root<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">@vm</span> sample] ./set_proxy_online.sh</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul>

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

3.观察ZooKeeper

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

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

<code class="hljs sql has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">[zk: localhost:2181(CONNECTED) 34] ls /zk/codis/db_test
[fence, slots, servers, proxy, migrate_tasks, dashboard, <span class="hljs-operator" style="box-sizing: border-box;"><span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">LOCK</span>, actions, ActionResponse]</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

3.1 Slot信息

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

<code class="hljs r has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">[zk: localhost:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">2181</span>(CONNECTED) <span class="hljs-number" style="color:#06666;box-sizing: border-box;">35</span>] 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, 
                        <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">...</span>     <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">...</span>     <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">...</span>
 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]</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li></ul>

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

<code class="hljs ruby has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">[<span class="hljs-symbol" style="color:#06666;box-sizing: border-box;">zk:</span> <span class="hljs-symbol" style="color:#06666;box-sizing: border-box;">localhost:</span><span class="hljs-number" style="color:#06666;box-sizing: border-box;">2181</span>(<span class="hljs-constant" style="box-sizing: border-box;">CONNECTED</span>) <span class="hljs-number" style="color:#06666;box-sizing: border-box;">8</span>] get /zk/codis/db_test/slots/slot_208
{<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"product_name"</span><span class="hljs-symbol" style="color:#06666;box-sizing: border-box;">:<span class="hljs-string" style="color:#06666;box-sizing: border-box;">"test"</span></span>,<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"id"</span><span class="hljs-symbol" style="color:#06666;box-sizing: border-box;">:</span><span class="hljs-number" style="color:#06666;box-sizing: border-box;">208</span>,<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"group_id"</span><span class="hljs-symbol" style="color:#06666;box-sizing: border-box;">:</span><span class="hljs-number" style="color:#06666;box-sizing: border-box;">5</span>,<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"state"</span><span class="hljs-symbol" style="color:#06666;box-sizing: border-box;">:</span>{<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"status"</span><span class="hljs-symbol" style="color:#06666;box-sizing: border-box;">:<span class="hljs-string" style="color:#06666;box-sizing: border-box;">"online"</span></span>,<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"migrate_status"</span><span class="hljs-symbol" style="color:#06666;box-sizing: border-box;">:</span>{<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"from"</span><span class="hljs-symbol" style="color:#06666;box-sizing: border-box;">:-</span><span class="hljs-number" style="color:#06666;box-sizing: border-box;">1</span>,<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"to"</span><span class="hljs-symbol" style="color:#06666;box-sizing: border-box;">:-</span><span class="hljs-number" style="color:#06666;box-sizing: border-box;">1</span>},<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"last_op_ts"</span><span class="hljs-symbol" style="color:#06666;box-sizing: border-box;">:<span class="hljs-string" style="color:#06666;box-sizing: border-box;">"0"</span></span>}}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

3.2 Proxy信息

<code class="hljs cs has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">[zk: localhost:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">2181</span>(CONNECTED) <span class="hljs-number" style="color:#06666;box-sizing: border-box;">40</span>] ls /zk/codis/db_test/proxy    
[proxy_1]
[zk: localhost:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">2181</span>(CONNECTED) <span class="hljs-number" style="color:#06666;box-sizing: border-box;">12</span>] <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">get</span> /zk/codis/db_test/proxy/proxy_1  
{<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"id"</span>:<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"proxy_1"</span>,<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"addr"</span>:<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"BC-VM-edce4ac67d304079868c0bb265337bd4:19000"</span>,<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"last_event"</span>:<span class="hljs-string" style="color:#0880;box-sizing: border-box;">""</span>,<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"last_event_ts"</span>:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">0</span>,<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"state"</span>:<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"online"</span>,<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"description"</span>:<span class="hljs-string" style="color:#0880;box-sizing: border-box;">""</span>,<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"debug_var_addr"</span>:<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"BC-VM-edce4ac67d304079868c0bb265337bd4:11000"</span>,<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"pid"</span>:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">2946</span>,<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"start_at"</span>:<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"2015-07-03 16:13:53.277706979 +0800 CST"</span>}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li></ul>

3.3 Server信息

Server的信息保存的只是Redis实例的IP地址和端口,所以并没有以JSON的形式附着在路径结点上,而是直接作为路径的一部分保存了。

<code class="hljs mel has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">[zk: localhost:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">2181</span>(CONNECTED) <span class="hljs-number" style="color:#06666;box-sizing: border-box;">43</span>] <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">ls</span> /zk/codis/db_test/servers
[group_1, group_2, group_3, group_4]
[zk: localhost:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">2181</span>(CONNECTED) <span class="hljs-number" style="color:#06666;box-sizing: border-box;">44</span>] <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">ls</span> /zk/codis/db_test/servers/group_1
[localhost:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">6380</span>]
[zk: localhost:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">2181</span>(CONNECTED) <span class="hljs-number" style="color:#06666;box-sizing: border-box;">45</span>] <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">ls</span> /zk/codis/db_test/servers/group_2
[localhost:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">6381</span>]
[zk: localhost:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">2181</span>(CONNECTED) <span class="hljs-number" style="color:#06666;box-sizing: border-box;">46</span>] <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">ls</span> /zk/codis/db_test/servers/group_3
[localhost:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">6382</span>]
[zk: localhost:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">2181</span>(CONNECTED) <span class="hljs-number" style="color:#06666;box-sizing: border-box;">47</span>] <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">ls</span> /zk/codis/db_test/servers/group_4
[localhost:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">6383</span>]</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li></ul>

3.4 其他信息

ZooKeeper中还保存了很多其他信息,这里就不一一解释了。

<code class="hljs vbscript has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">[zk: localhost:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">2181</span>(CONNECTED) <span class="hljs-number" style="color:#06666;box-sizing: border-box;">53</span>] ls /zk/codis/db_test/fence
[BC-VM-edce4ac67d304079868c0bb265337bd4:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">19000</span>]

[zk: localhost:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">2181</span>(CONNECTED) <span class="hljs-number" style="color:#06666;box-sizing: border-box;">24</span>] <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">get</span> /zk/codis/db_test/dashboard
{<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"addr"</span>: <span class="hljs-string" style="color:#0880;box-sizing: border-box;">"localhost:18087"</span>, <span class="hljs-string" style="color:#0880;box-sizing: border-box;">"pid"</span>: <span class="hljs-number" style="color:#06666;box-sizing: border-box;">2871</span>}

[zk: localhost:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">2181</span>(CONNECTED) <span class="hljs-number" style="color:#06666;box-sizing: border-box;">33</span>] <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">get</span> /zk/codis/db_test/actions/<span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000003698</span>
{<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"type"</span>:<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"slot_changed"</span>,<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"desc"</span>:<span class="hljs-string" style="color:#0880;box-sizing: border-box;">""</span>,<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"target"</span>:{<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"product_name"</span>:<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"test"</span>,<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"id"</span>:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">941</span>,<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"group_id"</span>:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">5</span>,<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"state"</span>:{<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"status"</span>:<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"online"</span>,<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"migrate_status"</span>:{<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"from"</span>:-<span class="hljs-number" style="color:#06666;box-sizing: border-box;">1</span>,<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"to"</span>:-<span class="hljs-number" style="color:#06666;box-sizing: border-box;">1</span>},<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"last_op_ts"</span>:<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"0"</span>}},<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"ts"</span>:<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"1435914788"</span>,<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"receivers"</span>:[<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"{\"</span>id\<span class="hljs-string" style="color:#0880;box-sizing: border-box;">":\"</span>proxy_1\<span class="hljs-string" style="color:#0880;box-sizing: border-box;">",\"</span>addr\<span class="hljs-string" style="color:#0880;box-sizing: border-box;">":\"</span>BC-VM-edce4ac67d304079868c0bb265337bd4:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">19000</span>\<span class="hljs-string" style="color:#0880;box-sizing: border-box;">",\"</span>last_event\<span class="hljs-string" style="color:#0880;box-sizing: border-box;">":\"</span>\<span class="hljs-string" style="color:#0880;box-sizing: border-box;">",\"</span>last_event_ts\<span class="hljs-string" style="color:#0880;box-sizing: border-box;">":0,\"</span>state\<span class="hljs-string" style="color:#0880;box-sizing: border-box;">":\"</span>online\<span class="hljs-string" style="color:#0880;box-sizing: border-box;">",\"</span>description\<span class="hljs-string" style="color:#0880;box-sizing: border-box;">":\"</span>\<span class="hljs-string" style="color:#0880;box-sizing: border-box;">",\"</span>debug_var_addr\<span class="hljs-string" style="color:#0880;box-sizing: border-box;">":\"</span>BC-VM-edce4ac67d304079868c0bb265337bd4:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">11000</span>\<span class="hljs-string" style="color:#0880;box-sizing: border-box;">",\"</span>pid\<span class="hljs-string" style="color:#0880;box-sizing: border-box;">":2946,\"</span>start_at\<span class="hljs-string" style="color:#0880;box-sizing: border-box;">":\"</span><span class="hljs-number" style="color:#06666;box-sizing: border-box;">2015</span>-<span class="hljs-number" style="color:#06666;box-sizing: border-box;">07</span>-<span class="hljs-number" style="color:#06666;box-sizing: border-box;">03</span> <span class="hljs-number" style="color:#06666;box-sizing: border-box;">16</span>:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">13</span>:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">53.277706979</span> +<span class="hljs-number" style="color:#06666;box-sizing: border-box;">0800</span> CST\<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"}"</span>]}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li></ul>

4.测试

4.1 简单测试

因为Codis兼容大部分Redis操作,所以这里用原版Redis客户端连接到Proxy,测试一下保存和查询。

<code class="hljs cs has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">[root@vm redis-<span class="hljs-number" style="color:#06666;box-sizing: border-box;">2.8</span><span class="hljs-number" style="color:#06666;box-sizing: border-box;">.19</span>] src/redis-cli -p <span class="hljs-number" style="color:#06666;box-sizing: border-box;">19000</span>
<span class="hljs-number" style="color:#06666;box-sizing: border-box;">127.0</span><span class="hljs-number" style="color:#06666;box-sizing: border-box;">.0</span><span class="hljs-number" style="color:#06666;box-sizing: border-box;">.1</span>:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">19000</span>> <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">set</span> person1 cdai
OK
<span class="hljs-number" style="color:#06666;box-sizing: border-box;">127.0</span><span class="hljs-number" style="color:#06666;box-sizing: border-box;">.0</span><span class="hljs-number" style="color:#06666;box-sizing: border-box;">.1</span>:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">19000</span>> <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">set</span> student2 hank
OK
<span class="hljs-number" style="color:#06666;box-sizing: border-box;">127.0</span><span class="hljs-number" style="color:#06666;box-sizing: border-box;">.0</span><span class="hljs-number" style="color:#06666;box-sizing: border-box;">.1</span>:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">19000</span>> <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">set</span> teacher3 carter
OK
<span class="hljs-number" style="color:#06666;box-sizing: border-box;">127.0</span><span class="hljs-number" style="color:#06666;box-sizing: border-box;">.0</span><span class="hljs-number" style="color:#06666;box-sizing: border-box;">.1</span>:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">19000</span>> <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">set</span> manager4 rachel
OK
<span class="hljs-number" style="color:#06666;box-sizing: border-box;">127.0</span><span class="hljs-number" style="color:#06666;box-sizing: border-box;">.0</span><span class="hljs-number" style="color:#06666;box-sizing: border-box;">.1</span>:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">19000</span>> <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">get</span> person1
<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"cdai"</span>
<span class="hljs-number" style="color:#06666;box-sizing: border-box;">127.0</span><span class="hljs-number" style="color:#06666;box-sizing: border-box;">.0</span><span class="hljs-number" style="color:#06666;box-sizing: border-box;">.1</span>:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">19000</span>> <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">get</span> student2
<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"hank"</span>
<span class="hljs-number" style="color:#06666;box-sizing: border-box;">127.0</span><span class="hljs-number" style="color:#06666;box-sizing: border-box;">.0</span><span class="hljs-number" style="color:#06666;box-sizing: border-box;">.1</span>:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">19000</span>> <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">get</span> teacher3
<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"carter"</span>
<span class="hljs-number" style="color:#06666;box-sizing: border-box;">127.0</span><span class="hljs-number" style="color:#06666;box-sizing: border-box;">.0</span><span class="hljs-number" style="color:#06666;box-sizing: border-box;">.1</span>:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">19000</span>> <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">get</span> manager4
<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"rachel"</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li></ul>

4.2 自动Rebalance

新添加一个Redis实例6379,并在Dashboard中为其新建Group 5,将新实例添加进去。

<code class="hljs asciidoc has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">[root@vm sample] cp redis<span class="hljs-emphasis" style="box-sizing: border-box;">_conf/6380.conf redis_</span>conf/6379.conf
[root@vm redis<span class="hljs-emphasis" style="box-sizing: border-box;">_conf] diff redis_</span>conf/6379.conf redis<span class="hljs-emphasis" style="box-sizing: border-box;">_conf/6380.conf 
41c41
< pidfile /var/run/redis_</span>6379.pid
<span class="hljs-bullet" style="box-sizing: border-box;">---
</span>> pidfile /var/run/redis.pid
45c45
<span class="hljs-header" style="box-sizing: border-box;">< port 6379
---</span>
> port 6380
177c177
<span class="hljs-header" style="box-sizing: border-box;">< dbfilename 6379.rdb
---</span>
> dbfilename 6380.rdb

[root@vm sample] nohup ../bin/codis-server ./redis<span class="hljs-emphasis" style="box-sizing: border-box;">_conf/6379.conf &> ./log/redis_</span>6379.log &</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li></ul>

重新balance之前先看一下目前四个key的分布情况:

  • 6380保存manager4和student2
  • 6381什么都没保存
  • 6382保存teacher3
  • 6383保存person1
<code class="hljs perl has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">[root<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">@vm</span> redis-<span class="hljs-number" style="color:#06666;box-sizing: border-box;">2.8</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">19</span>] src/redis-cli
<span class="hljs-number" style="color:#06666;box-sizing: border-box;">127.0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">1</span>:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">6379</span>> <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">keys</span> *
(empty list <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">or</span> set)
<span class="hljs-number" style="color:#06666;box-sizing: border-box;">127.0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">1</span>:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">6379</span>> quit
[root<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">@vm</span> redis-<span class="hljs-number" style="color:#06666;box-sizing: border-box;">2.8</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">19</span>] src/redis-cli -p <span class="hljs-number" style="color:#06666;box-sizing: border-box;">6380</span>
<span class="hljs-number" style="color:#06666;box-sizing: border-box;">127.0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">1</span>:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">6380</span>> <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">keys</span> *
<span class="hljs-number" style="color:#06666;box-sizing: border-box;">1</span>) <span class="hljs-string" style="color:#0880;box-sizing: border-box;">"manager4"</span>
<span class="hljs-number" style="color:#06666;box-sizing: border-box;">2</span>) <span class="hljs-string" style="color:#0880;box-sizing: border-box;">"student2"</span>
<span class="hljs-number" style="color:#06666;box-sizing: border-box;">127.0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">1</span>:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">6380</span>> quit
[root<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">@vm</span> redis-<span class="hljs-number" style="color:#06666;box-sizing: border-box;">2.8</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">19</span>] src/redis-cli -p <span class="hljs-number" style="color:#06666;box-sizing: border-box;">6381</span>
<span class="hljs-number" style="color:#06666;box-sizing: border-box;">127.0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">1</span>:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">6381</span>> <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">keys</span> *
(empty list <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">or</span> set)
<span class="hljs-number" style="color:#06666;box-sizing: border-box;">127.0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">1</span>:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">6381</span>> quit
[root<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">@vm</span> redis-<span class="hljs-number" style="color:#06666;box-sizing: border-box;">2.8</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">19</span>] src/redis-cli -p <span class="hljs-number" style="color:#06666;box-sizing: border-box;">6382</span>
<span class="hljs-number" style="color:#06666;box-sizing: border-box;">127.0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">1</span>:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">6382</span>> <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">keys</span> *
<span class="hljs-number" style="color:#06666;box-sizing: border-box;">1</span>) <span class="hljs-string" style="color:#0880;box-sizing: border-box;">"teacher3"</span>
<span class="hljs-number" style="color:#06666;box-sizing: border-box;">127.0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">1</span>:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">6382</span>> quit
[root<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">@vm</span> redis-<span class="hljs-number" style="color:#06666;box-sizing: border-box;">2.8</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">19</span>] src/redis-cli -p <span class="hljs-number" style="color:#06666;box-sizing: border-box;">6383</span>
<span class="hljs-number" style="color:#06666;box-sizing: border-box;">127.0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">1</span>:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">6383</span>> <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">keys</span> *
<span class="hljs-number" style="color:#06666;box-sizing: border-box;">1</span>) <span class="hljs-string" style="color:#0880;box-sizing: border-box;">"person1"</span>
<span class="hljs-number" style="color:#06666;box-sizing: border-box;">127.0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">1</span>:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">6383</span>> quit</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li></ul>

现在点”Auto Balance”看刚才保存的四个key会发生什么。

addgroup

migrating

在Migration过程中,ZooKeeper中的内容也有变化。/zk/codis/db_test/migrate_tasks保存了正在migrating的Slot:

<code class="hljs mel has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">[zk: localhost:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">2181</span>(CONNECTED) <span class="hljs-number" style="color:#06666;box-sizing: border-box;">61</span>] <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">ls</span> /zk/codis/db_test/migrate_tasks
[<span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000079</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000078</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000082</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000083</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000080</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000081</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000086</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000087</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000084</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000085</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000118</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000119</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000116</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000117</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000114</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000115</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000112</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000113</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000110</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000111</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000120</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000200</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000201</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000202</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000107</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000203</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000108</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000109</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000103</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000104</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000105</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000106</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000100</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000101</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000102</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000152</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000153</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000150</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000151</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000146</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000145</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000144</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000143</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000149</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000148</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000147</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000160</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000161</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000162</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000163</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000164</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000155</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000154</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000157</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000156</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000159</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000158</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000130</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000131</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000128</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000127</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000126</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000125</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000124</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000123</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000122</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000121</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000129</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000140</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000141</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000142</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000137</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000136</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000139</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000138</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000133</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000132</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000135</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000134</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000193</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000192</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000191</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000190</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000197</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000196</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000195</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000194</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000189</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000187</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000188</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000198</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000199</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000175</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000174</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000173</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000172</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000171</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000170</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000169</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000099</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000167</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000168</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000165</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000166</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000098</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000184</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000097</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000183</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000096</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000186</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000095</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000185</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000094</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000180</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000093</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000092</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000182</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000091</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000181</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000090</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000176</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000177</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000088</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000178</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000089</span>, <span class="hljs-number" style="color:#06666;box-sizing: border-box;">0000000179</span>]</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

迁移后的key分配是:

<code class="hljs perl has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">[root<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">@vm</span> redis-<span class="hljs-number" style="color:#06666;box-sizing: border-box;">2.8</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">19</span>] src/redis-cli
<span class="hljs-number" style="color:#06666;box-sizing: border-box;">127.0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">1</span>:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">6379</span>> <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">keys</span> *
<span class="hljs-number" style="color:#06666;box-sizing: border-box;">1</span>) <span class="hljs-string" style="color:#0880;box-sizing: border-box;">"student2"</span>
<span class="hljs-number" style="color:#06666;box-sizing: border-box;">127.0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">1</span>:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">6379</span>> quit
[root<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">@vm</span> redis-<span class="hljs-number" style="color:#06666;box-sizing: border-box;">2.8</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">19</span>] src/redis-cli -p <span class="hljs-number" style="color:#06666;box-sizing: border-box;">6380</span>
<span class="hljs-number" style="color:#06666;box-sizing: border-box;">127.0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">1</span>:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">6380</span>> <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">keys</span> *
<span class="hljs-number" style="color:#06666;box-sizing: border-box;">1</span>) <span class="hljs-string" style="color:#0880;box-sizing: border-box;">"manager4"</span>
<span class="hljs-number" style="color:#06666;box-sizing: border-box;">127.0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">1</span>:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">6380</span>> quit
[root<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">@vm</span> redis-<span class="hljs-number" style="color:#06666;box-sizing: border-box;">2.8</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">19</span>] src/redis-cli -p <span class="hljs-number" style="color:#06666;box-sizing: border-box;">6381</span>
<span class="hljs-number" style="color:#06666;box-sizing: border-box;">127.0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">1</span>:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">6381</span>> <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">keys</span> *
(empty list <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">or</span> set)
<span class="hljs-number" style="color:#06666;box-sizing: border-box;">127.0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">1</span>:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">6381</span>> quit
[root<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">@vm</span> redis-<span class="hljs-number" style="color:#06666;box-sizing: border-box;">2.8</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">19</span>] src/redis-cli -p <span class="hljs-number" style="color:#06666;box-sizing: border-box;">6382</span>
<span class="hljs-number" style="color:#06666;box-sizing: border-box;">127.0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">1</span>:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">6382</span>> <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">keys</span> *
<span class="hljs-number" style="color:#06666;box-sizing: border-box;">1</span>) <span class="hljs-string" style="color:#0880;box-sizing: border-box;">"teacher3"</span>
<span class="hljs-number" style="color:#06666;box-sizing: border-box;">127.0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">1</span>:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">6382</span>> quit
[root<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">@vm</span> redis-<span class="hljs-number" style="color:#06666;box-sizing: border-box;">2.8</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">19</span>] src/redis-cli -p <span class="hljs-number" style="color:#06666;box-sizing: border-box;">6383</span>
<span class="hljs-number" style="color:#06666;box-sizing: border-box;">127.0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">1</span>:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">6383</span>> <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">keys</span> *
<span class="hljs-number" style="color:#06666;box-sizing: border-box;">1</span>) <span class="hljs-string" style="color:#0880;box-sizing: border-box;">"person1"</span>
<span class="hljs-number" style="color:#06666;box-sizing: border-box;">127.0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">0</span>.<span class="hljs-number" style="color:#06666;box-sizing: border-box;">1</span>:<span class="hljs-number" style="color:#06666;box-sizing: border-box;">6383</span>> quit</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li></ul>
slotaftermigration

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值