您的位置:首页 > 数据库 > Redis

redis codis 安装部署

2016-05-02 12:47 856 查看
摘要: redis 3.x 版本加入了 cluster 功能,codis 作为 cluster 出现之前的 redis 集群管理和监控解决方案

codis 的整个安装还是比较简单,详细的步骤参考官方说明:

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

依赖环境安装 go + zookeeper

先安装go环境

$ wget https://storage.googleapis.com/golang/go1.4.1.linux-amd64.tar.gz $ tar -zxvf go1.4.1.linux-amd64.tar.gz -C /usr/local/

配置go境变量

export GOROOT=/usr/local/go
export GOPATH=/usr/local/codis
PATH=$PATH:$GOROOT/bin:$GOPATH/bin


安装 zookeeper 环境

$ tar -zxvf zookeeper-3.4.6.tar.gz

配置环境变量

ZOOKEEPER_HOME=/usr/local/zookeeper
PATH=$PATH:$ZOOKEEPER_HOME/bin

启动 zookeeper 服务

$ ./bin/zkServer.sh start


安装 codis

执行go get下载codis代码

$ go get -u -d github.com/CodisLabs/codis

提示 git 未安装,安装 git

$ yum install git

代码下载完成之后,切换到$GOPATH/src/github.com/CodisLabs/codis目录执行make命令编译代码,并执行make gotest来跑测试

$ make

提示 gcc 未安装

/bin/sh: cc: command not found

$ yum install gcc

codis安装成功之后,会在 bin 文件夹内生成 codis-config、codis-proxy、codis-server三个可执行文件。另外, bin/assets 文件夹是 codis-config 的 dashboard http 服务需要的前端资源, 需要和 codis-config 放置在同一文件夹下



启动 codis

执行 bin/codis-config dashboard, 该命令会启动 dashboard

$ cd /usr/local/codis/src/github.com/CodisLabs/codis
$ ./bin/codis-config -c ./config.ini dashboard &

有时kill方式停止codis时,再次启动会出现下面的错误提示,因为zookeeper中的相关配置没有删除,连接上zookeeper删除相关文件夹

[root@bogon codis]# ./bin/codis-config -c ./config.ini dashboard &
2016/05/02 06:58:45 dashboard.go:160: [INFO] dashboard listening on addr: :18087
2016/05/02 06:58:46 dashboard.go:234: [PANIC] create zk node failed
[error]: dashboard already exists: {"addr": "192.168.1.161:18087", "pid": 6231}

解决办法:

[root@bogon codis]# cd /usr/local/zookeeper/
[root@bogon zookeeper]# ./bin/zkCli.sh -server 127.0.0.1:2181
…
[zk: 127.0.0.1:2181(CONNECTED) 1] ls /zk/codis/db_test
[fence, slots, servers, proxy, migrate_tasks, dashboard, LOCK, actions, ActionResponse]
[zk: 127.0.0.1:2181(CONNECTED) 2] rmr /zk/codis/db_test/dashboard

重新启动即可

初始化 slots

执行 bin/codis-config slot init,该命令会在zookeeper上创建slot相关信息

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




启动 Codis Redis

Codis redis 在extern目录下可以找到,具体的配置和启动过程和官方的reids启动一样

注:因为 codis 采用的 redis 服务时基于 redis 的2.x版本的分支,所以这里不能使用官方下载的 redis 来作为 redis service

本次实验启动4个redis服务,两组主从

192.186.1.161 6379 (master) -- > 192.168.1.161 6380 (slave)

192.168.1.161 6479 (master) -- > 192.168.1.161 6480 (slave)



添加 Redis Server Group

每一个 Server Group 作为一个 Redis 服务器组存在, 只允许有一个 master, 可以有多个 slave, group id 仅支持大于等于1的整数,例如:

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

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

添加一个redis slave到该group

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

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

$ bin/codis-config server add 2 192.168.1.161:6479 master
$ bin/codis-config server add 2 192.168.1.161:6480 slave


设置 server group 服务的 slot 范围

Codis 采用 Pre-sharding 的技术来实现数据的分片, 默认分成 1024 个 slots (0-1023), 对于每个key来说, 通过以下公式确定所属的 Slot Id : SlotId = crc32(key) % 1024 每一个 slot 都会有一个且必须有一个特定的 server group id 来表示这个 slot 的数据由哪个 server group 来提供.

例如:

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

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


启动 codis-proxy

$ bin/codis-proxy -c config.ini -L ./log/proxy.log  --cpu=4 --addr=192.168.1.161:19000 --http-addr=192.168.1.161:11000

--addr理绑定的ip和端口

--cpu理使用的cpu数,虚拟机的配置有关,一般跟数相同

--http-addr用于测试的地址

-L 指定理的日志文件

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

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


安装 codis-ha

Codis-ha 用来做codis的高可用及故障自动转移功能,但是codis-ha不是codis的官方功能插件,默认如果codis group 如果配置了主从,当该 group 中的主宕机后,从不会自动切换

Codis-ha github 官方地址:https://github.com/ngaut/codis-ha

$ go get github.com/ngaut/codis-ha
$ cd codis-ha  // /usr/local/codis/src/github.com/ngaut/codis-ha
$ go build
$ ./codis-ha --codis-config=192.168.1.161:18087 --productName=test

启动之后,查看



连接并测试

redis-cli -h 192.168.1.161 -p 19000



验证 codis 的故障转移

注:前提需要安装并启动 codis-ha

测试将 group1 下面的 6379 服务停止后,6380 是否可以自动升级为主

6379 在停止服务之前为 group_1 的 mster



kill掉6379服务后,看到 codis-ha 的日志输出





6380 成功升级为 group_1 的新主

再次重启 6379 的 redis 服务,验证启动后的 6379 会作为 6380 的从节点





6380 还是 master,6379作为了 6380 的 slave 加入了 group_1

Codis dashboard 相关操作

codis 启动之后,可以通过浏览器中访问: http://192.168.1.161:18087/admin/





Server Groups 可以添加新的 group 和 添加 redis 服务

Slot Control可以给 group 分配槽位

Migrate Status 可以用来槽位迁移

Proxy status 用来监控 proxy 的状态

codis 不支持的命令

Codis可以完美的解决Redis集群问题,在目前Redis 3.0版本还不是很稳定的情况下,是非常不错的解决方案。支持数据扩展。 但是并不是所有的redis命令都支持。

如果你使用以下命令:

KEYS, MOVE, OBJECT, RENAME, RENAMENX, SORT, SCAN, BITOP,MSETNX, BLPOP, BRPOP, BRPOPLPUSH, PSUBSCRIBE,PUBLISH, PUNSUBSCRIBE, SUBSCRIBE, UNSUBSCRIBE, DISCARD, EXEC, MULTI, UNWATCH, WATCH, SCRIPT EXISTS, SCRIPT FLUSH, SCRIPT KILL, SCRIPT LOAD, AUTH, ECHO, SELECT, BGREWRITEAOF, BGSAVE, CLIENT KILL, CLIENT LIST, CONFIG GET, CONFIG SET, CONFIG RESETSTAT, DBSIZE, DEBUG OBJECT, DEBUG SEGFAULT, FLUSHALL, FLUSHDB, INFO, LASTSAVE, MONITOR, SAVE, SHUTDOWN, SLAVEOF, SLOWLOG, SYNC, TIME

是无法直接迁移到 Codis 上的. 你需要修改你的代码, 用其他的方式实现.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息