这篇文章给大家分享的是有关codis有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
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架构
3.  Codis部署
安装centos服务器3台:192.168.92.136,192.168.92.138,192.168.92.138
3.1.部署架构

3.2.部署角色
3.2.1.  Zookeeper集群
192.168.92.136:2181
192.168.92.137:2181
192.168.92.138:2181
3.2.2.  Codis-config
192.168.92.136:18078
3.2.3.  Codis-proxy
192.168.92.137:19000
192.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(略)

3.3.3.  安装zookeeper
3.3.3.1.     下载zookeeper
下载地址:http://zookeeper.apache.org/releases.html
3.3.3.2.     解压zookeeper
tar xf zookeeper-3.4.6.tar.gz  -C /usr/local/

3.3.3.3.     编辑zookeeper文件
mv zoo_sample.cfg zoo.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


3.3.3.4.     启动zookeeper
执行:./bin/zkServer.sh start

3.4.安装go
3.4.1.  下载go
地址:http://golangtc.com/static/go/go1.4.2.linux-amd64.tar.gz
3.4.2.  解压go
tar xf go1.4.2.linux-amd64.tar.gz -C/usr/local/

3.4.3.  添加go环境变量
vi /etc/profile,添加如下
GOROOT=/usr/local/go
GOPATH=/usr/local/go/work

source /etc/profile

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

cd $GOPATH/src/github.com/wandoulabs/codis
./bootstrap.sh

make gotest

3.6.2.  编辑config.ini文件
修改zookeeper地址和dashboard地址:vi config.ini



每个proxy的proxy_id必须不同
3.6.3.  启动dashboard
mkdir log
./bin/codis-config-c config.ini -L ./log/dashboard.log dashboard &

3.6.4.  初始化solts
./bin/codis-config -c config.ini slot init –f

3.6.5.  启动codis-server
cp extern/redis-2.8.21/redis.conf 7000/
修改port、bind、maxmemory:vi 7000/redis.conf



启动:./bin/codis-server 7000/redis.conf

cp extern/redis-2.8.21/redis.conf 7001/
修改port、bind、maxmemory:vi 7001/redis.conf



启动:./bin/codis-server 7001/redis.conf

3.6.6.  添加redis server group
./bin/codis-config -cconfig.ini server add 1 192.168.92.137:7000 master

./bin/codis-config -c config.ini server add1 192.168.92.137:7001 slave

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

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 &

3.6.9.  浏览器访问
http://192.168.92.136:18087/admin/


4.  数据迁移
将group_1的solt:599,600迁移到group_2

4.1.命令行迁移方式
执行:bin/codis-config -c config.ini slot migrate 599 600 2 --delay=10
4.2.Dashboard迁移方式


5.  Auto Rebalance
Codis 支持动态的根据实例内存, 自动对slot进行迁移, 以均衡数据分布.
要求:
- 所有的codis-server都必须设置了maxmemory参数 
- 所有的 slots 都应该处于 online 状态, 即没有迁移任务正在执行 
- 所有 server     group 都必须有 Master 
5.1.命令行方式:
$ bin/codis-config slot rebalance
5.2.Dashboard方式

6.  HA
当一个group的master挂掉的时候,codis不会自动的将某个slave升级成master
该工具会在检测到master挂掉的时候将其下线并选择其中一个slave提升为master继续提供服务
go get github.com/ngaut/codis-ha
cd /usr/local/go/work/src/github.com/ngaut/codis-ha
go build
./codis-ha--codis-config=192.168.92.136:18087 --productName=test &

7.  Jodis客户端
使用循环调度策略方式多个proxy
<>
    <>com.wandoulabs.jodis</>
    <>jodis</>
    <>0.1.2</>
</>
JedisResourcePool jedisPool = RoundRobinJedisPool(, 30000, , JedisPoolConfig());
(Jedis jedis = jedisPool.getResource()) {
    jedis.set(, );
    String value = jedis.get();
    System..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进行hash
| Command 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 &


感谢各位的阅读!关于“codis有什么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!