codis简介以及安装指导手册
2015-09-18 17:49
423 查看
1. Codis简介
Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到Codis Proxy 和连接原生的 Redis Server 没有明显的区别 (不支持的命令列表), 上层应用可以像使用单机的 Redis 一样使用, Codis 底层会处理请求的转发, 不停机的数据迁移等工作, 所有后边的一切事情, 对于前面的客户端来说是透明的, 可以简单的认为后边连接的是一个内存无限大的 Redis 服务.Codis 由四部分组成:Codis Proxy (codis-proxy)Codis Manager (codis-config)
Codis Redis (codis-server)
ZooKeeper
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.21 开发, 加入了 slot的支持和原子的数据迁移指令. Codis 上层的codis-proxy 和 codis-config 只能和这个版本的 Redis 交互才能正常运行.Codis 依赖 ZooKeeper 来存放数据路由表和 codis-proxy 节点的元信息, codis-config 发起的命令都会通过 ZooKeeper 同步到各个存活的 codis-proxy.Codis 支持按照Namespace 区分不同的产品, 拥有不同的product name 的产品, 各项配置都不会冲突.
2. Codis架构
![](https://github.com/wandoulabs/codis/raw/master/doc/pictures/architecture.png)
3. Codis部署
安装centos服务器3台:192.168.92.136,192.168.92.138,192.168.92.1383.1.部署架构
![](http://s3.51cto.com/wyfs02/M02/73/62/wKioL1X72weDG4vAAANSQ07yvC4837.jpg)
3.2.部署角色
3.2.1. Zookeeper集群
192.168.92.136:2181192.168.92.137:2181
192.168.92.138:2181
3.2.2. Codis-config
192.168.92.136:180783.2.3. Codis-proxy
192.168.92.137:19000192.168.92.138:19000
3.2.4. Codis-server
192.168.92.137:7000、192.168.92.137:7001(主、从)192.168.92.138:7000、192.168.92.138:7001(主、从)
3.3.部署
3.3.1. 关闭防火墙和selinux(略)
3.3.2. 安装jdk(略)
![](http://s3.51cto.com/wyfs02/M02/73/65/wKiom1X72PKCqE6cAADG4PFBrjk662.jpg)
3.3.3. 安装zookeeper
3.3.3.1. 下载zookeeper
下载地址:http://zookeeper.apache.org/releases.html3.3.3.2. 解压zookeeper
tar xf zookeeper-3.4.6.tar.gz -C /usr/local/![](http://s3.51cto.com/wyfs02/M00/73/62/wKioL1X7212C9FZWAABRIBDYteI893.jpg)
3.3.3.3. 编辑zookeeper文件
配置文件存放在$ZOOKEEPER_HOME/conf/目录下,将zoo_sample.cfg文件名称改为zoo.cfgmv zoo_sample.cfg zoo.cfg
![](http://s3.51cto.com/wyfs02/M01/73/62/wKioL1X723Cj87JkAADMU2OQB8M277.jpg)
编辑zoo.cfg: vizoo.cfg,添加节点
server.1=192.168.92.136:2888:3888
server.2=192.168.92.137:2888:3888
server.3=192.168.92.138:2888:3888
修改data路径:dataDir=/var/lib/zookeeper
![](http://s3.51cto.com/wyfs02/M00/73/62/wKioL1X72_7Dl4mZAAAw7yyyOOs733.jpg)
在data路径下添加myid文件,内容存放pid,与server.x一致
![](http://s3.51cto.com/wyfs02/M00/73/65/wKiom1X72d2SVHRXAAA_hTAwZKc690.jpg)
3.3.3.4. 启动zookeeper
执行:./bin/zkServer.sh start![](http://s3.51cto.com/wyfs02/M01/73/62/wKioL1X73CTw8c4vAACpLbdBXpg505.jpg)
3.4.安装go
3.4.1. 下载go
地址:http://golangtc.com/static/go/go1.4.2.linux-amd64.tar.gz3.4.2. 解压go
tar xf go1.4.2.linux-amd64.tar.gz -C/usr/local/![](http://s3.51cto.com/wyfs02/M01/73/62/wKioL1X73N6zU8AAAABtO7hnqk0041.jpg)
3.4.3. 添加go环境变量
vi /etc/profile,添加如下GOROOT=/usr/local/go
GOPATH=/usr/local/go/work
![](http://s3.51cto.com/wyfs02/M02/73/65/wKiom1X72lySLbunAAE6YL1Pb7I784.jpg)
source /etc/profile
![](http://s3.51cto.com/wyfs02/M00/73/62/wKioL1X73JWyUn-IAABDRkfmggA185.jpg)
3.5.安装Development Tool,git
yum install -y “Development Tool“
yum install –y git
3.6.安装codis
3.6.1. 下载编译codis
go get -u-d github.com/wandoulabs/codis![](http://s3.51cto.com/wyfs02/M00/73/62/wKioL1X73JbhWjNnAAEZ2EBDY_0585.jpg)
cd $GOPATH/src/github.com/wandoulabs/codis
./bootstrap.sh
![](http://s3.51cto.com/wyfs02/M00/73/65/wKiom1X72lyBGSl2AAM8zeFVZmM911.jpg)
make gotest
![](http://s3.51cto.com/wyfs02/M01/73/62/wKioL1X73JaTANkAAAJufD9OAR8174.jpg)
3.6.2. 编辑config.ini文件
修改zookeeper地址和dashboard地址:vi config.ini![](http://s3.51cto.com/wyfs02/M02/73/63/wKioL1X73dehW3QnAAGhfUdXR-4388.jpg)
![](http://s3.51cto.com/wyfs02/M00/73/65/wKiom1X7256jillkAABBbbAVCPA053.jpg)
![](http://s3.51cto.com/wyfs02/M01/73/63/wKioL1X73drDArVMAAA6lboN8-0138.jpg)
每个proxy的proxy_id必须不同
3.6.3. 启动dashboard
mkdir log./bin/codis-config-c config.ini -L ./log/dashboard.log dashboard &
![](http://s3.51cto.com/wyfs02/M02/73/63/wKioL1X73gTDLXB8AACkhwEBgRA199.jpg)
3.6.4. 初始化solts
./bin/codis-config -c config.ini slot init –f![](http://s3.51cto.com/wyfs02/M02/73/65/wKiom1X729zgUC-3AACkV0_i33Y004.jpg)
3.6.5. 启动codis-server
启动master:mkdir 7000cp extern/redis-2.8.21/redis.conf 7000/
修改port、bind、maxmemory:vi 7000/redis.conf
![](http://s3.51cto.com/wyfs02/M01/73/63/wKioL1X73kLxMAPUAAASLbt13o4618.jpg)
![](http://s3.51cto.com/wyfs02/M01/73/65/wKiom1X73Amx1rS2AAAj5edBwD4231.jpg)
![](http://s3.51cto.com/wyfs02/M02/73/65/wKiom1X73AnhRJsNAAAjmGzV868849.jpg)
启动:./bin/codis-server 7000/redis.conf
![](http://s3.51cto.com/wyfs02/M00/73/65/wKiom1X73CHB3Kd3AAEQWTBbAO8511.jpg)
启动slave: mkdir 7001
cp extern/redis-2.8.21/redis.conf 7001/
修改port、bind、maxmemory:vi 7001/redis.conf
![](http://s3.51cto.com/wyfs02/M02/73/63/wKioL1X73n-jx1ffAAARevVpVMA641.jpg)
![](http://s3.51cto.com/wyfs02/M01/73/65/wKiom1X73Amx1rS2AAAj5edBwD4231.jpg)
![](http://s3.51cto.com/wyfs02/M02/73/65/wKiom1X73AnhRJsNAAAjmGzV868849.jpg)
启动:./bin/codis-server 7001/redis.conf
![](http://s3.51cto.com/wyfs02/M02/73/65/wKiom1X73FvRKsdRAAEQWTBbAO8718.jpg)
3.6.6. 添加redis server group
./bin/codis-config -cconfig.ini server add 1 192.168.92.137:7000 master![](http://s3.51cto.com/wyfs02/M01/73/63/wKioL1X73rrhJ6mPAACfCHmLWQU813.jpg)
./bin/codis-config -c config.ini server add1 192.168.92.137:7001 slave
![](http://s3.51cto.com/wyfs02/M01/73/65/wKiom1X73KXB79k5AACLPZUSQGU947.jpg)
192.168.92.138节点启动redis如上
3.6.7. 设置server group 服务的 slot范围
./bin/codis-config -c config.ini slotrange-set 0 600 1 online./bin/codis-config -c config.ini slotrange-set 601 1023 2 online
![](http://s3.51cto.com/wyfs02/M00/73/65/wKiom1X73MaiodXZAAD4B0kNL6Y057.jpg)
3.6.8. 启动 codis-proxy
bin/codis-proxy -c config.ini -L ./log/proxy.log --cpu=1 --addr=0.0.0.0:19000--http-addr=0.0.0.0:11000 &![](http://s3.51cto.com/wyfs02/M02/73/63/wKioL1X73yDzdlbDAADxq9L8_sg880.jpg)
3.6.9. 浏览器访问
http://192.168.92.136:18087/admin/![](http://s3.51cto.com/wyfs02/M00/73/63/wKioL1X730bhT95nAAHjz4fU2d8294.jpg)
![](http://s3.51cto.com/wyfs02/M00/73/65/wKiom1X73Q2jftZfAAJBjCDht5I308.jpg)
4. 数据迁移
将group_1的solt:599,600迁移到group_2![](http://s3.51cto.com/wyfs02/M01/73/65/wKiom1X73S6ynCNPAADmKc3xtwo364.jpg)
4.1.命令行迁移方式
执行:bin/codis-config -c config.ini slot migrate 599 600 2 --delay=10
4.2.Dashboard迁移方式
![](http://s3.51cto.com/wyfs02/M02/73/65/wKiom1X73VKB0H3UAABYydOdvwI708.jpg)
![](http://s3.51cto.com/wyfs02/M00/73/63/wKioL1X734ygjx-YAAC63A-ap48581.jpg)
5. Auto Rebalance
Codis 支持动态的根据实例内存, 自动对slot进行迁移, 以均衡数据分布.要求:所有的codis-server都必须设置了maxmemory参数所有的 slots 都应该处于 online 状态, 即没有迁移任务正在执行
所有 server group 都必须有 Master
5.1.命令行方式:
$ bin/codis-config slot rebalance5.2.Dashboard方式
![](http://s3.51cto.com/wyfs02/M01/73/65/wKiom1X73XLSUhJsAABX2U1ffiQ395.jpg)
6. HA
当一个group的master挂掉的时候,codis不会自动的将某个slave升级成master该工具会在检测到master挂掉的时候将其下线并选择其中一个slave提升为master继续提供服务go get github.com/ngaut/codis-hacd /usr/local/go/work/src/github.com/ngaut/codis-hago build./codis-ha--codis-config=192.168.92.136:18087 --productName=test &
![](http://s3.51cto.com/wyfs02/M02/73/63/wKioL1X738LhXQ8NAABkWFcUjE0637.jpg)
7. Jodis客户端
使用循环调度策略方式多个proxy<dependency> <groupId>com.wandoulabs.jodis</groupId> <artifactId>jodis</artifactId> <version>0.1.2</version> </dependency>
JedisResourcePool jedisPool = new RoundRobinJedisPool("192.168.92.137:2181", 30000, "/zk/codis/db_test/proxy", new JedisPoolConfig()); try (Jedis jedis = jedisPool.getResource()) { jedis.set("key11", "bar"); String value = jedis.get("key11"); System.out.println(value); }
8. Codis不支持的命令
Command Type | Command Name |
Keys | KEYS |
MIGRATE | |
MOVE | |
OBJECT | |
RANDOMKEY | |
RENAME | |
RENAMENX | |
SCAN | |
Strings | BITOP |
MSETNX | |
Lists | BLPOP |
BRPOP | |
BRPOPLPUSH | |
Pub/Sub | PSUBSCRIBE |
PUBLISH | |
PUNSUBSCRIBE | |
SUBSCRIBE | |
UNSUBSCRIBE | |
Transactions | DISCARD |
EXEC | |
MULTI | |
UNWATCH | |
WATCH | |
Scripting | SCRIPT |
Server | BGREWRITEAOF |
BGSAVE | |
CLIENT | |
CONFIG | |
DBSIZE | |
DEBUG | |
FLUSHALL | |
FLUSHDB | |
LASTSAVE | |
MONITOR | |
RESTORE | |
SAVE | |
SHUTDOWN | |
SLAVEOF | |
SLOWLOG | |
SYNC | |
TIME | |
Codis Slot | SLOTSCHECK |
SLOTSDEL | |
SLOTSINFO | |
SLOTSMGRTONE | |
SLOTSMGRTSLOT | |
SLOTSMGRTTAGONE | |
SLOTSMGRTTAGSLOT |
9. Codis半支持的命令
需要将以下key放入同一slot才能支持,方式采用{},如key为“bar{zap}”,则只会对zap进行hashCommand Type | Command Name |
Lists | RPOPLPUSH |
Sets | SDIFF |
SINTER | |
SINTERSTORE | |
SMOVE | |
SUNION | |
SUNIONSTORE | |
Sorted Sets | ZINTERSTORE |
ZUNIONSTORE | |
HyperLogLog | PFMERGE |
Scripting | EVAL |
EVALSHA |
10. 附录
10.1.修改dashboard端口号
1.修改config文件dashboard_addr=192.168.92.136:19001 2.启动命令变更为:
./bin/codis-config -cconfig.ini -L ./log/dashboard.log dashboard --addr=192.168.92.136:19001 &
![](http://s4.51cto.com/wyfs02/M02/7B/19/wKiom1bG5kCxdkFTAAA93QWN0aU463.png)
![](http://s2.51cto.com/wyfs02/M02/7B/19/wKiom1bG5mvB5pVPAAD6tG9t6fE412.jpg)
相关文章推荐
- 从源码安装Mysql/Percona 5.5
- 在 AppImage、Flathub 和 Snapcraft 平台上搜索 Linux 应用
- 解决vc中unable to connect to the MKS:Internal error问题
- 杰奇一些安装详细说明文件,比官方更细
- 无线网卡安装DIY
- 网卡安装常见问题精解
- 春节长假安全手册
- DB2数据库的安装
- CentOS下DB2数据库安装过程详解
- 网吧组建完全手册
- ghost安装系统软件硬盘安装器 安装ghost图文教程
- CentOS 6.3下编译安装Ruby 2.0笔记
- FREEBSD安装POSTGRESQL笔记
- Redis总结笔记(一):安装和常用命令
- FreeBSD 6.2 安装全程图解教程
- 安装Apache和PHP的一些补充
- Lua在windows下的安装及环境配置
- PHP 5.3.0 安装分析心得
- 关于MSSQL 2005的安装与补丁
- sql2008安装教程 SQL Server 2008 R2 安装图解