欢迎来到HugNew-拥抱变化,扫一扫右边二维码关注微信订阅号:Martin说 或 加QQ群:427697041互相交流,Stay hungry, Stay foolish.

Codis集群搭建实践

集群架构 Martin 8079℃ 3评论

1 概述

Codis是一个分布式的Redis解决方案,对于上层的应用来说,连接Codis Proxy和连接原生的Redis Server没有明显的区别(不支持的命令列表),上层应用可以像使用单机的Redis一样使用,Codis底层会处理请求的转发,不停机的数据迁移等工作,所有后边的一切事情,对于前面客户端来说是透明的,可以简单的认为后边连接是一个内存无限大的Redis服务。有关redis常见的集群技术,可以参考Redis集群技术及Codis实践

2 Codis架构图

111

codis-proxy 提供连接集群redis服务的入口

codis-redis-group 实现redis读写的水平扩展,高性能

codis-redis 实现redis实例服务,通过codis-ha实现服务的高可用

3 组件说明

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.13开发,加入了slot的支持和原子的数据迁移指令,Codis上层的codis-proxy和codis-config只能和这个版本的Redis交互才能正常运行。

ZooKeeper:用来存放数据路由表和codis-proxy节点的元信息,codis-config发起的命令都会通过ZooKeeper同步到各个存活的codis-proxy

说明: Codis支持按照Namespace区分不同的产品,拥有不同的product name 的产品,各项配置都不会冲突。

实验环境:

两主两从+一个proxy+一个zk

角色                   ip地址             主机名

codis-redis-master    192.168.3.104      redis-master1

codis-redis-slave     192.168.3.105      redis-slave1

codis-redis-master    192.168.3.106      redis-master2

codis-redis-slave     192.168.3.107      redis-slave2

codis-proxy           192.168.10.108     codis-proxy

zk                    192.168.3.111      zk-server1

4 安装配置

4.1 zk-server1服务器操作

4.1.1 安装JDK,自己在官网下载一个安装即可,版本要求不严格:

[root@codis-proxy ~]# sh jdk-6u34-fcs-bin-b04-linux-amd64-19_jul_2012.bin
[root@codis-proxy ~]# mv jdk1.6.0_34 /usr/local/
[root@codis-proxy ~]# mv /usr/local/jdk1.6.0_34 /usr/local/jdk

4.1.2 安装zookeeper

[root@codis-proxy ~]# wget    http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.6/zookeepe       r-3.4.6.tar.gz

[root@codis-proxy ~]# tar -xzf zookeeper-3.4.6.tar.gz -C /usr/local/

然后修改环境变量为 vim /etc/profile 在最后添加以下内容:

JAVA_HOME=/usr/local/jdk

CLASS_PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.6

export PATH=$PATH:$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin

然后执行 source /etc/profile

4.1.3 配置zookeeper

修改配置文件zoo.cfg:

[root@codis-proxy ~]# cp /usr/local/zookeeper-3.4.6/conf/zoo_sample.cfg        /usr/local/zookeeper-3.4.6/conf/zoo.cfg

[root@codis-proxy ~]# cd /usr/local/zookeeper-3.4.6/conf/

[root@codis-proxy conf]# vim zoo.cfg

tickTime=2000

initLimit=10

syncLimit=5

dataDir=/data/zookeeper/data

autopurge.snapRetainCount=500

autopurge.purgeInterval=24

clientPort=2181

#server.1=codis-1:2888:3888

#server.2=codis-2:2888:3888

#server.2=codis-3:2888:3888

设置myid:

设置myid在我们配置的dataDir指定的目录下面,创建一个myid文件,里面内容为一个数字,用来标识当前主机,conf/zoo.cfg文件配置的srver.X中的X为什么数字,则myid文件就输入这个数字,我只有一台zk,所以配置文件里可以不配置server.X,但还是要配置myid的,echo一个数字1进去即可。如果有多台zk,则分别在zk服务器上echo对应的数字进对应的myid文件

[root@codis-proxy conf]# mkdir -p /data/zookeeper/data

[root@codis-proxy conf]# echo "1" > /data/zookeeper/data/myid

4.1.4 启动zookeeper

因为环境变量里已经添加了路径,直接执行命令即可,执行zkServer.sh start后,要等一会再执行zkServer status:

[root@codis-proxy ~]# zkServer.sh start

JMX enabled by default

Using config: /usr/local/zookeeper-3.4.6/bin/../conf/zoo.cfg

Starting zookeeper ... STARTED

[root@codis-proxy ~]# zkServer.sh status

JMX enabled by default

Using config: /usr/local/zookeeper-3.4.6/bin/../conf/zoo.cfg

Mode: standalone

[root@codis-proxy ~]#

在那个目录下启动,就在那个目录下产生一个启动的日志zookeeper.out,查看这个日志可以查看是否正常启动了。由于单个zookeeper,所以这里指示Mode: standalone,如果有多个zk节点,就只有一个Mode: leader的状态,别的都是Mode: follower状态。

4.2 codis-proxy服务器操作(我这里只部署单个codis-proxy节点的环境)

4.2.1 安装go

下载安装包:

如果被墙或网速不稳定,可以通过vpn或下载离线源码包

wget https://storage.googleapis.com/golang/go1.4.1.linux-amd64.tar.gz

下载后,解压就可以用了:

[root@codis-proxy ~]# tar -zxf go1.4.1.linux-amd64.tar.gz -C /usr/local/

然后修改环境变量为 vim /etc/profile 在最后添加以下内容:

export GOROOT=/usr/local/go

export GOPATH=/usr/local/codis

export PATH=$PATH:$GOROOT/bin

然后执行 source /etc/profile

编辑一个文件来测试一下go是否正常使用了:

[root@codis-proxy ~]# cat hello.go

package main

import "fmt"

func main(){

fmt.Printf("hello,world\n")

}

[root@codis-proxy ~]# go run hello.go

hello,world

可以看到,正常打印hello,world了。

4.2.2 安装codis

安装codis时依赖go,所以在安装codis先装好go,上面已经装好。

获取codis:

[root@codis-proxy ~]# sudo apt-get install git

[root@codis-proxy ~]# go get github.com/wandoulabs/codis

package github.com/wandoulabs/codis

imports github.com/wandoulabs/codis

imports github.com/wandoulabs/codis: no buildable Go source      files in        /usr/local/codis/src/github.com/wandoulabs/codis

[root@codis-proxy ~]#

执行命令go get github.com/wandoulabs/codis的时候网络原因可能有点慢或者出现失败的情况,多试几遍或者使用vpn。执行完后可以看到no buildable Go source files in /usr/local/codis/src/github.com/wandoulabs/codis,   我们在上面环境就是设置GOAPTH=/usr/local/codis,所以只要执行上面的获取命令,就会下载在/usr/local/codis下。我们进到提示的路径进行安装,安装过程比较久,耐心等待:

[root@codis-proxy ~]# cd /usr/local/codis/src/github.com/wandoulabs/codis

[root@codis-proxy codis]# ls

bootstrap.sh  cmd  doc  docker  Dockerfile  extern  Godeps        Makefile  MIT-LICENSE.txt  pkg  README.md  sample  test  vitess_license

[root@codis-proxy codis]# sh bootstrap.sh

downloading dependcies, it may take a few minutes...

4.2.3 编译

执行脚本完成看执行make gotest会看到的结果:

Hint: To run 'make test' is a good idea ;

make[2]: Leaving directory `/usr/local/codis/src/github.com/wandoulabs/codis/extern/redis-2.8.13/src'

make[1]: Leaving directory `/usr/local/codis/src/github.com/wandoulabs/codis/extern/redis-2.8.13'

go test ./pkg/... ./cmd/... -race

?       github.com/wandoulabs/codis/pkg/env     [no test files]

ok      github.com/wandoulabs/codis/pkg/models  5.773s

ok      github.com/wandoulabs/codis/pkg/proxy/cachepool 0.009s

?       github.com/wandoulabs/codis/pkg/proxy/group     [no test files]

ok      github.com/wandoulabs/codis/pkg/proxy/parser    0.016s

?       github.com/wandoulabs/codis/pkg/proxy/redisconn [no test files]

?       github.com/wandoulabs/codis/pkg/proxy/redispool [no test files]

ok      github.com/wandoulabs/codis/pkg/proxy/router    16.092s

?       github.com/wandoulabs/codis/pkg/proxy/router/topology   [no test files]

ok      github.com/wandoulabs/codis/pkg/utils   0.008s

ok      github.com/wandoulabs/codis/cmd/cconfig 0.016s

?       github.com/wandoulabs/codis/cmd/proxy   [no test files]

[root@codis-proxy codis]#

会在 codis/bin 文件夹生成 codis-config, codis-proxy 两个可执行文件, (另外, bin/assets 文件夹是 codis-config 的 dashboard http 服务需要的前端资源, 需要和 codis-config 放置在同一文件夹下)

4.2.4 配置文件修改及初始前操作

编译好后,把bin目录和一些脚本复制过去/usr/local/codis目录下:

[root@codis-proxy codis]# mkdir -p /usr/local/codis/{log,redis_conf}

[root@codis-proxy codis]# cp -rf bin /usr/local/codis/

[root@codis-proxy codis]# cp sample/config.ini /usr/local/codis/bin/

[root@codis-proxy codis]# cp sample/redis_conf/6381.conf /usr/local/codis/redis_conf/

[root@codis-proxy codis]# cp -rf src/github.com/wandoulabs/codis/sample/* ./

修改config.ini配置文件,由于我现在是做一个机器做zk,所以这里几乎不用修改:

[root@codis-proxy codis]# cd /usr/local/codis
[root@codis-proxy codis]# cat config.ini

zk=192.168.3.111:2181  //zookeeper的地址, 如果是zookeeper集群,可以这么写:        zk=hostname1:2181,hostname2:2181,hostname3:2181,hostname4:2181,hostname5      :2181,如果是etcd,则写成    http://hostname1:port,http://hostname2:port,http://hostname3:port

product=test     //产品名称, 这个codis集群的名字, 可以认为是命名空间, 不同命名 空间的codis没有交集

proxy_id=proxy_1  //proxy会读取, 用于标记proxy的名字, 针对多个proxy的情况,   可以使用不同的config.ini, 只需要更改 proxy_id 即可

net_timeout=5     //检测状态时间间隔

dashboard_addr=localhost:18087  //dashboard 服务的地址,CLI 的所有命令都依赖       于 dashboard 的 RESTful API,所以必须启动

coordinator=zookeeper   //如果用etcd,则将zookeeper替换为etcd

[root@codis-1 bin]#

到此,codis-proxy的环境搭建好了。

4.2.5查看启动流程

[root@codis-proxy codis]# cat usage.md 
0. start zookeeper       //启动zookeeper服务
1. change config items in config.ini  //修改codis配置文件
2. ./start_dashboard.sh  //启动 dashboard
3. ./start_redis.sh      //启动redis实例
4. ./add_group.sh        //添加redis组,一个redis组只能有一个master
5. ./initslot.sh         //初始化槽
6. ./start_proxy.sh      //启动proxy
7. ./set_proxy_online.sh  //上线proxy项目
8. open browser to http://localhost:18087/admin //访问web

[root@codis-proxy codis]#

这只是一个参考,有些顺序不是必须的,但启动dashboard前,必须启动zookeeper服务,这是必须的,后面有很多操作,都可以在web页面完成,例如添加/删除组,添加/删除redis实例等。

4.2.6 启动dashboard

我们到启动dashboard这一步了,我们修改一下脚本,运行即可启动,修改为如下:(由本来的../修改为./)

[root@codis-proxy codis]# cat start_dashboard.sh
#!/bin/sh

nohup ./bin/codis-config -c config.ini -L ./log/dashboard.log dashboard --addr=:18087 --http-log=./log/requests.log &>/dev/null &
 
[root@codis-proxy codis]#

启动后查看下是否正常启动了:

[root@codis-proxy codis]# sh start_dashboard.sh

[root@codis-proxy codis]# ps -ef |grep dashboard

root      1463     1  2 20:38 pts/0    00:00:00 ./bin/codis-config -c config.ini -L ./log/dashboard.log dashboard --addr=:18087 --http-log=./log/requests.log

root      1470  1277  0 20:38 pts/0    00:00:00 grep dashboard

[root@codis-proxy codis]#

4.2.7 初始化槽

修改脚本,把../修改为./以及把后面的一些暂时没用的东西注释掉

[root@codis-proxy codis]# cat initslot.sh

#!/bin/shecho "slots initializing..."

./bin/codis-config -c config.ini slot init -f

echo "done"

#echo "set slot ranges to server groups..."

#./bin/codis-config -c  config.ini slot range-set 0 511 1 online

#./bin/codis-config -c  config.ini slot range-set 512 1023 2 online

#echo "done"

[root@codis-proxy codis]#

执行初始化槽脚本:

[root@codis-proxy codis]# sh initslot.sh

slots initializing...

{

"msg": "OK",

"ret": 0

}

done

[root@codis-proxy codis]#

ok,codis-proxy服务器环境基本已搭建好。

4.3 redis-server服务器操作

分别在服务器redis-master和redis-slave上搭建好redis实例,主从服务器搭建流程一样,这里只选一个服务器的搭建过程进行说明:

4.3.1 安装redis及编译

如果服务器没安装gcc和make,先执行这两个命令sudo apt-get install gcc 和sudo apt-get install make

[root@redis-master ~]# wget http://download.redis.io/releases/redis-3.0.0.tar.gz

[root@redis-master ~]# tar zxf redis-3.0.0.tar.gz -C /usr/local/

[root@redis-master ~]# cd /usr/local/redis-3.0.0/

[root@redis-master redis-3.0.0]# make

[root@redis-master redis-3.0.0]# cd src

[root@redis-master src]# make install

注意:如果要上线到生产环境,配置文件根据需要修改,这里配置文件也不需要配置主从,当然如果sentinel方案搭建的话,主从复制(默认rdb持久化)肯定需要修改配置文件的。

4.3.2 启动实例

[root@redis-master redis-3.0.0]# redis-server redis.conf

[root@redis-master redis-3.0.0]# ps -ef |grep 6379

root      2902     1  0 21:18 ?        00:00:01 redis-server *:6379

root      2939  1183  0 21:37 pts/1    00:00:00 grep 7000

[root@redis-master redis-3.0.0]#

redis-master已经启动成功了。ok,实例已经配置完,可以去web页面操作了。

5 dashboard页面操作

访问codis-proxy的IP加端口:http://192.168.3.108:18087。点New Server Group添加组:

11

点Add New Redis Instance添加主机:(第一个添加的都是master,也只能有一个master)

12

添加redis-slave主机:

13

添加完成后可以看到:

14

设置 server group 服务的 slot 范围。 Codis 采用 Pre-sharding 的技术来实现数据的分片, 默认分成 1024 个 slots (0-1023), 对于每个key来说, 通过以下公式确定所属的 Slot Id : SlotId = crc32(key) % 1024 每一个 slot 都会有一个特定的 server group id 来表示这个 slot 的数据由哪个 server group 来提供.这里group_1分配范围为0~511,group_2分配范围为512~1023。

ps:redis集群方案slot有16348(2的14次方)个,也是采用了crc32算法分配slot

14

成功后返回success。

6.主从同步测试

在redis-master上写数据:

[root@redis-master src]# ./redis-cli

OK

127.0.0.1:6379> set age 24

OK

127.0.0.1:6379>

在redis-slave查看是否把数据同步过来了:

[root@redis-slave src]# ./redis-cli127.0.0.1:7001> get age

"24"

127.0.0.1:7001>

可以看到正常同步的。

7.启动codis-proxy(在codis-proxy服务器上操作)

修改脚本start_proxy.sh脚本,把../修改为./(该脚本意思是如果有启动的proxy,先停了,再启动;proxy_1是config.ini里定义的,如果有多个Proxy,只需要修改proxy_id即可):

[root@codis-proxy codis]# cat start_proxy.sh

#!/bin/shecho "shut down proxy_1..."

./bin/codis-config -c config.ini proxy offline proxy_1

echo "done"

echo "start new proxy..."

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

echo "done"

 

echo "sleep 3s"sleep 3tail -n 30 ./log/proxy.log

 

[root@codis-proxy codis]#

启动并检查进程:

[root@codis-proxy codis]# sh start_proxy.sh

shut down proxy_1...

{

"msg": "OK",

"ret": 0

}

done

start new proxy...

donesleep 3s

nohup: 把输出追加到"nohup.out"

"state": {

"status": "offline",

"migrate_status": {

"from": -1,

"to": -1

},

"last_op_ts": "0"

}

} Ts:1429609783 Receivers:[{"id":"proxy_1","addr":"codis-3:19000","last_event":"","last_event_ts":0,"state":"online","description":"","debug_var_addr":"codis-3:11000","pid":18984,"start_at":"2015-04-20 19:50:28.584939619 +0800 CST"}]}

2015/04/21 17:49:43 topology.go:50: [error] slot not online, {

"product_name": "test",

"id": 0,

"group_id": -1,

"state": {

"status": "offline",

"migrate_status": {

"from": -1,

"to": -1

},

"last_op_ts": "0"

}

}

2015/04/21 17:49:43 router.go:98: [fatal] github.com/wandoulabs/codis/pkg/models/server_group.go:92: group -1 not found

github.com/wandoulabs/codis/pkg/proxy/router/topology/topology.go:55:

2015/04/23 14:34:54 main.go:98: [info] dump file path: /usr/local/codis/bin

2015/04/23 14:34:54 main.go:106: [info] running on  0.0.0.0:19000

2015/04/23 14:34:54 helper.go:317: [info] &{proxyId:proxy_1 productName:test zkAddr:localhost:2181 f:<nil> netTimeout:5 proto:tcp provider:zookeeper}

2015/04/23 14:34:54 router.go:642: [info] start with configuration: &{proxyId:proxy_1 productName:test zkAddr:localhost:2181 f:<nil> netTimeout:5 proto:tcp provider:zookeeper}

2015/04/23 14:34:54 router.go:669: [info] proxy_info:{Id:proxy_1 Addr:codis-proxy:19000 LastEvent: LastEventTs:0 State:offline Description: DebugVarAddr:codis-proxy:11000 Pid:4016 StartAt:2015-04-23 14:34:54.53585951 +0800 CST}

2015/04/23 14:34:54 router.go:614: [warning] proxy_1 wait to be online

[root@codis-proxy codis]#

看到日志有点小报错,但可以忽略,后面出现[warning] proxy_1 wait to be online,意思是等待上线。

查看进程:

[root@codis-proxy codis]# ps -ef |grep proxy

avahi     1087     1  0 Apr22 ?        00:00:00 avahi-daemon: running [codis-proxy.local]

root      4016     1  0 14:34 pts/0    00:00:00 ./bin/codis-proxy --log-level info -c config.ini -L ./log/proxy.log --cpu=8 --addr=0.0.0.0:19000 --http-addr=0.0.0.0:11000

root      4028  1277  0 14:39 pts/0    00:00:00 grep proxy

[root@codis-proxy codis]#

上线proxy_1,修改脚本并运行脚本(把../修改为./):

[root@codis-proxy codis]# cat set_proxy_online.sh

#!/bin/shecho "set proxy_1 online"

./bin/codis-config -c config.ini proxy online proxy_1

echo "done"

[root@codis-proxy codis]# sh set_proxy_online.sh
{
"msg": "OK",
"ret": 0
}
[root@codis-proxy codis]#

去web面面刷新即可看到proxy_1:

16

 8.容灾测试

下面做个测试,测试大体内容是:

1)假设redis-master有问题,也可以理解为挂了

2)在页面把redis-slave手动提升为master

3)把有问题的master下线

4)假如刚刚有问题的master已经正常恢复服务了,转为slave

现在模拟redis-master down机了:

[root@redis-master redis-3.0.0]# ps -ef |grep 7000

root      3063     1  0 Apr15 ?        00:00:18 redis-server *:7000

root      3460  1183  0 02:21 pts/1    00:00:00 grep 7000

[root@redis-master redis-3.0.0]# kill -9 3063

[root@redis-master redis-3.0.0]#

在web页面刷新可以看到master已经挂了:

2

我们把redis-slave提升master,点Promote to Master按钮即可:

1

可以看到本来的master已经变成offline下线状态了,这时我们把它删除掉,点后面的X删除主机。假如刚刚下线的redis服务器恢复正常了,再点上面的Add New Redis Instance按钮添加主机:

17

可以看到刚刚下线redis服务器,现在变成了redis-slave的角色了。

我们测试下数据是否正常同步,在新redis-master上set数据:

[root@redis-slave src]# ./redis-cli

127.0.0.1:6379> set aa bb

OK

127.0.0.1:6379> set cc dd

OK

127.0.0.1:6379>

新的redis-slave上查看数据:

[root@redis-master src]# ./redis-cli

127.0.0.1:6379> get aa

"bb"

127.0.0.1:6379> get cc

"dd"

127.0.0.1:6379>

可以看到是正常同步的。

9 redis压力测试说明和样例

[root@redis-master ~]# redis-benchmark --help

Usage: redis-benchmark [-h <host>] [-p <port>] [-c <clients>] [-n <requests]> [-k <boolean>]

-h <hostname>      Server hostname (default 127.0.0.1)  --主机ip地址

-p <port>          Server port (default 6379) --端口

-s <socket>        Server socket (overrides host and port) --socket(如果测试在服务器上测可以用socket方式)

-a <password>      Password for Redis Auth --redis的认证密码

-c <clients>       Number of parallel connections (default 50) --客户端连接数

-n <requests>      Total number of requests (default 100000)  --总请求数

-d <size>          Data size of SET/GET value in bytes (default 2) --set、get的value大小

-dbnum <db>        SELECT the specified db number (default 0) --选择哪个数据库测试(一般0-15)

-k <boolean>       1=keep alive 0=reconnect (default 1) --是否采用keep alive模式

-r <keyspacelen>   Use random keys for SET/GET/INCR, random values for SADD --随机产生键值时的随机数范围

Using this option the benchmark will expand the string __rand_int__

inside an argument with a 12 digits number in the specified range

from 0 to keyspacelen-1. The substitution changes every time a command

is executed. Default tests use this to hit random keys in the

specified range.

-P <numreq>        Pipeline <numreq> requests. Default 1 (no pipeline). --pipeline的个数(如果使用pipeline会把多个命令封装在一起提高效率)

-q                 Quiet. Just show query/sec values --仅仅查看每秒的查询数

--csv              Output in CSV format --用csv方式输出

-l                 Loop. Run the tests forever --循环次数

-t <tests>         Only run the comma separated list of tests. The test --指定命令

names are the same as the ones produced as output.

-I                 Idle mode. Just open N idle connections and wait.      --仅打开n个空闲链接

Examples:
Run the benchmark with the default configuration against 127.0.0.1:6379:

$ redis-benchmark

Use 20 parallel clients, for a total of 100k requests, against 192.168.1.1:

$ redis-benchmark -h 192.168.1.1 -p 6379 -n 100000 -c 20 --测试set、get、mset、sadd等场景下的性能

Fill 127.0.0.1:6379 with about 1 million keys only using the SET test:

$ redis-benchmark -t set -n 1000000 -r 100000000 --测试set随机数的性能

Benchmark 127.0.0.1:6379 for a few commands producing CSV output:

$ redis-benchmark -t ping,set,get -n 100000 --csv  --使用csv的输出方式测试

Benchmark a specific command line:

$ redis-benchmark -r 10000 -n 10000 eval 'return redis.call("ping")' 0 --测试基本命令的速度

Fill a list with 10000 random elements:

$ redis-benchmark -r 10000 -n 10000 lpush mylist __rand_int__ --测试list入队的速度

On user specified command lines __rand_int__ is replaced with a random integer

with a range of values selected by the -r option.

10 维护命令说明

5.1.1 server:

主要用来添加,删除,提权,查找 server group(实际操作zookeeper)
root@codis-3:/usr/local/codis/bin# ./codis-config server --help

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> 

5.1.2 slot:

主要用来初始化,迁移,设置range-set,查询slot

 

[root@redis-slave bin]# ./codis-config slot --help

usage:

codis-config slot init [-f]

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>]

codis-config slot rebalance [--delay=<delay_time_in_ms>]

5.1.3 dashboard:

主要用来启动dashboard

[root@redis-slave bin]# ./codis-config dashboard --help

usage: codis-config dashboard [--addr=<address>] [--http-log=<log_file>]

options:

--addr listen ip:port, e.g. localhost:12345, :8086, [default: :8086]

--http-log http request log [default: request.log ]

5.1.4 action:

主要用来操作codis保存的事件记录,并解除zk锁(迁移异常会出现锁)

[root@redis-slave bin]# ./codis-config action --help 

usage: codis-config action (gc [-n <num> | -s <seconds>] | remove-lock)

options:

gc:

gc -n N

gc -s Sec

keep last N actions;

keep last Sec seconds actions;

remove-lock force remove zookeeper lock;

5.1.5 proxy:

主要用来实现proxy上线,下线,查询

[root@redis-slave bin]# ./codis-config proxy

usage:

codis-config proxy list

codis-config proxy offline <proxy_name>

codis-config proxy online <proxy_name>

5.2 codis-proxy

主要用来启动 proxy 进程

[root@redis-slave bin]# ./codis-proxy --help

usage: proxy [-c <config_file>] [-L <log_file>] [--log-level=<loglevel>] [--cpu=<cpu_num>]

[--addr=<proxy_listen_addr>] [--http-addr=<debug_http_server_addr>] 

options:

-cset config file

-Lset output log file, default is stdout

--log-level=<loglevel> set log level: info, warn, error, debug [default: info]

--cpu=<cpu_num>

num of cpu cores that proxy can use

--addr=<proxy_listen_addr>

proxy listen address, example: 0.0.0.0:9000

--http-addr=<debug_http_server_addr>

debug vars http server
 
5.3 codis-server

主要用来启动 codis(redis 实例)

[root@redis-slave bin]# ./codis-server --help

Usage: ./redis-server [/path/to/redis.conf] [options]

./redis-server - (read config from stdin)

./redis-server -v or --version

./redis-server -h or --help

./redis-server --test-memory <megabytes>

Examples:

./redis-server (run the server with default conf)

./redis-server /etc/redis/6379.conf

./redis-server --port 7777

./redis-server --port 7777 --slaveof 127.0.0.1 8888

./redis-server /etc/myredis.conf --loglevel verbose

Sentinel mode:

./redis-server /etc/sentinel.conf –sentinel

5.4 codis-ha

主要来实现 server_group 中的主从 ha

[root@redis-slave bin]# ./codis-ha --help

Usage of ./codis-ha:

-codis-config="localhost:18087": api server address

-productName="test": product name, can be found in codis-proxy's config

[root@redis-slave bin]#

参考资料:

codis官网:https://github.com/wandoulabs/codis

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

https://github.com/wandoulabs/codis/blob/master/doc/FAQ_zh.md

转载请注明:HugNew » Codis集群搭建实践

喜欢 (6)or分享 (0)
发表我的评论
取消评论

表情
(3)个小伙伴在吐槽
  1. ....
    匿名2015-06-15 09:47 回复
  2. 666 ❗
    匿名2016-05-10 09:52 回复