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架构

architecture.png

3.  Codis部署

安装centos服务器3台:192.168.92.136192.168.92.138192.168.92.138

3.1.部署架构

wKioL1X72weDG4vAAANSQ07yvC4837.jpg

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:7000192.168.92.137:7001(主、从)

192.168.92.138:7000192.168.92.138:7001(主、从)

3.3.部署

3.3.1.  关闭防火墙和selinux()

3.3.2.  安装jdk()

wKiom1X72PKCqE6cAADG4PFBrjk662.jpg

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/

wKioL1X7212C9FZWAABRIBDYteI893.jpg

3.3.3.3.     编辑zookeeper文件

  • 配置文件存放在$ZOOKEEPER_HOME/conf/目录下,将zoo_sample.cfg文件名称改为zoo.cfg

mv zoo_sample.cfg zoo.cfg

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

wKioL1X72_7Dl4mZAAAw7yyyOOs733.jpg

  • data路径下添加myid文件,内容存放pid,与server.x一致

wKiom1X72d2SVHRXAAA_hTAwZKc690.jpg

3.3.3.4.     启动zookeeper

执行:./bin/zkServer.sh start

wKioL1X73CTw8c4vAACpLbdBXpg505.jpg

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/


wKioL1X73N6zU8AAAABtO7hnqk0041.jpg

3.4.3.  添加go环境变量

vi /etc/profile,添加如下

GOROOT=/usr/local/go

GOPATH=/usr/local/go/work

wKiom1X72lySLbunAAE6YL1Pb7I784.jpg

source /etc/profile

wKioL1X73JWyUn-IAABDRkfmggA185.jpg

3.5.安装Development Tool,git

yum install -y “Development Tool

yum install �Cy git

3.6.安装codis

3.6.1.  下载编译codis

    go get -u-d github.com/wandoulabs/codis

wKioL1X73JbhWjNnAAEZ2EBDY_0585.jpg

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

./bootstrap.sh

wKiom1X72lyBGSl2AAM8zeFVZmM911.jpg


make gotest

wKioL1X73JaTANkAAAJufD9OAR8174.jpg

3.6.2.  编辑config.ini文件

修改zookeeper地址和dashboard地址:vi config.ini

wKioL1X73dehW3QnAAGhfUdXR-4388.jpg


wKiom1X7256jillkAABBbbAVCPA053.jpg


wKioL1X73drDArVMAAA6lboN8-0138.jpg


每个proxyproxy_id必须不同

3.6.3.  启动dashboard

mkdir log

./bin/codis-config-c config.ini -L ./log/dashboard.log dashboard &

wKioL1X73gTDLXB8AACkhwEBgRA199.jpg

3.6.4.  初始化solts

./bin/codis-config -c config.ini slot init �Cf

wKiom1X729zgUC-3AACkV0_i33Y004.jpg

3.6.5.  启动codis-server

  • 启动mastermkdir 7000

cp extern/redis-2.8.21/redis.conf 7000/

修改portbindmaxmemoryvi 7000/redis.conf

wKioL1X73kLxMAPUAAASLbt13o4618.jpg

wKiom1X73Amx1rS2AAAj5edBwD4231.jpg

wKiom1X73AnhRJsNAAAjmGzV868849.jpg


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

wKiom1X73CHB3Kd3AAEQWTBbAO8511.jpg

  • 启动slave mkdir 7001

cp extern/redis-2.8.21/redis.conf 7001/

修改portbindmaxmemoryvi 7001/redis.conf

wKioL1X73n-jx1ffAAARevVpVMA641.jpg

wKiom1X73Amx1rS2AAAj5edBwD4231.jpg

wKiom1X73AnhRJsNAAAjmGzV868849.jpg

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

wKiom1X73FvRKsdRAAEQWTBbAO8718.jpg

3.6.6.  添加redis server group

./bin/codis-config -cconfig.ini server add 1 192.168.92.137:7000 master

wKioL1X73rrhJ6mPAACfCHmLWQU813.jpg

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

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

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 &

wKioL1X73yDzdlbDAADxq9L8_sg880.jpg

3.6.9.  浏览器访问

http://192.168.92.136:18087/admin/


wKioL1X730bhT95nAAHjz4fU2d8294.jpg

wKiom1X73Q2jftZfAAJBjCDht5I308.jpg

4.  数据迁移

group_1solt599600迁移到group_2

wKiom1X73S6ynCNPAADmKc3xtwo364.jpg

4.1.命令行迁移方式

执行:bin/codis-config -c config.ini slot migrate 599 600 2 --delay=10

4.2.Dashboard迁移方式

wKiom1X73VKB0H3UAABYydOdvwI708.jpg

wKioL1X734ygjx-YAAC63A-ap48581.jpg


5.  Auto Rebalance

Codis 支持动态的根据实例内存, 自动对slot进行迁移, 以均衡数据分布.

要求:

  • 所有的codis-server都必须设置了maxmemory参数

  • 所有的 slots 都应该处于 online 状态, 即没有迁移任务正在执行

  • 所有 server     group 都必须有 Master

5.1.命令行方式:

$ bin/codis-config slot rebalance

5.2.Dashboard方式

wKiom1X73XLSUhJsAABX2U1ffiQ395.jpg

6.  HA

当一个groupmaster挂掉的时候,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 &

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);
}

 


你可能感兴趣的:(安装,手册,codis)