MySQL行使Codis搭建redis集群服务

一. 运场景

redis 作为数据结构存储引擎,有着许多亮点

  • 高性能
    单机引擎可以达成5-10W qps
  • 数据结构全面,支持高速支付工作
    string,list,set,sorted set, hashes

问题:

  • 仓储容量受限单机最老容量即为单机内存最深容量
  • 单机数据的持久化依赖aof和rdb机制,如果机器整个down掉,服务不可用

二. redis集群选型

幸而出于单机redis引擎有着这样的题材,所以,基本每个互联网商家还起好的redis集群化方案。

  • 以redis客户端lib中实现数量的分片并基本部署redis实例
    优点:简单,性能损耗小
    缺陷:扩容方案复杂
  • 集群化候选方案

1、NetFlix对Dynamo的开源通用实现Dynomite
Dynomite是NetFlix对亚马逊分布式存储引擎Dynamo的一个开源通用实现,使用C/C++语言编写、以代办的章程贯彻之Redis缓存集群方案。Dynomite不仅能用根据内存的Redis和Memcached打招分布式数据库,还支持持久化的MySQL、BerkeleyDB、LevelDB等数据库,并装有简易、高效、支持过数据基本的数据复制等优点。Dynomite的最终目标是提供数据库存储引擎不克提供的简约、高效、跨数据基本的数目复制功能。Dynomite遵循Apache
License
2.0开端源协议发布,更多关于Dynomite的信要查看NetFlix技术博客对Dynomite的牵线。
2、Twitter的Redis/Memcached代理服务Twemproxy
Twemproxy是一个动C语言编写、以代办的艺术贯彻的、轻量级的Redis代理服务器,它通过引入一个代理层,将应用程序后端的多台Redis实例进行联合保管,使应用程序只待以Twemproxy上进展操作,而无用关爱后面具体产生略只实在的Redis或Memcached实例,从而实现了冲Redis和Memcached的集群服务。当有节点宕掉时,Twemproxy可以自动将它由集群中剔除,而当其过来服务经常,Twemproxy也会见自动连续。由于是代理,所以Twemproxy会有轻的性能损失。根据
Redis作者的测试结果,在大部分状态下,Twemproxy的性质相当对,同直接操作Redis相比,最多就发20%底特性损失。Twemproxy遵循Apache
License
2.0开头源协议发布,更多关于Twemproxy的信要登录该以GitHub的主页查看。
3、豌豆荚的 Redis 集群解决方案Codis
Codis是豌豆荚使用Go和C语言开发、以代办的计贯彻的一个Redis分布式集群解决方案,且全配合Twemproxy。Twemproxy对于上等同重合的利用来说,
连接Codis
Proxy(Redis代理服务)和连原生的Redis服务器无明确的区分,上同叠下会像以单机的
Redis一样对待。Codis底层会处理要的转化、不停机的数码迁移等工作,
所有根的整整处理,
对于客户端的话是透明的。总之,可以省略的以为后台连接的是一个内存无限好的Redis服务。Codis遵循MIT开源协议发布,更多关于Codis的信要登录该以GitHub的主页查看。
此外,还有一部分请勿开源的化解方案,比如新浪、百度、淘宝、腾讯等之Redis集群方案。在Redis官方正式生产可用来生产条件之集群方案前,以上三栽方案是坏值得考虑于生环境下的方案。

三. 豌豆荚Codis

优点:

  • codis-proxy基给GO和C语言,并作处理能力强大
  • 后端基于slot概念支持灵活,对用户透明底扩容和缩容操作,甚至一键式auto
    rebalance
  • 据悉zookeeper提供了高可用的codis-proxy代理服务
  • 集群管理工具丰富:页面及指令行工具集,如:redis-port可以拿老集群(redis单机或twemproxy集群)中多少好之动迁导入到Codis

完架构

Codis整体架构

Codis 由四片构成:

  • Codis Proxy (codis-proxy)
    codis-proxy 是客户端连接的 Redis 代理服务, codis-proxy 本身实现了
    Redis 协议, 表现得及一个原生的 Redis 没什么区别 (就像 Twemproxy),
    对于一个事务以来, 可以配备多独 codis-proxy, codis-proxy
    本身是随便状态的.
  • Codis Manager (codis-config)
    codis-config 是 Codis 的管理工具, 支持包括, 添加/删除 Redis 节点,
    添加/删除 Proxy 节点, 发起数迁移等操作. codis-config
    本身还于带了一个 http server, 会启动一个 dashboard,
    用户可一直当浏览器上观测 Codis 集群的运转状态.
  • Codis Redis (codis-server)
    codis-server 是 Codis 项目保护的一个 Redis 分支, 基于 2.8.13 开发,
    加入了 slot 的支持及原子的多寡迁移指令. Codis 上层之 codis-proxy 和
    codis-config 只能与之版本的 Redis 交互才能够健康运行.
  • ZooKeeper
    Codis 依赖 ZooKeeper 来存放数据路由表和 codis-proxy 节点的头信息,
    codis-config 发起的通令还见面透过 ZooKeeper 同步到各个存活的
    codis-proxy.

一旦要发生双重简便易行的顾方式和再胜似之安居:可以应用搭建HAProxy,但是会尤其充实延迟。

装&管理集群
小心遵循如下顺序部署启动集群

  1. 启动 dashboard *, 执行 ../bin/codis-config dashboard,
    该令会启动 dashboard *
  2. 初始化 slots , 执行 ../bin/codis-config slot
    init,该命令会在zookeeper上创办slot相关消息
  3. 起步 Codis Redis , 和法定的Redis Server参数一样
  4. 增长 Redis Server Group , 每一个 Server Group 作为一个 Redis
    服务器组存在, 只允许发生一个 master, 可以发差不多单 slave, group id
    仅支持逾等于1底平头
    $ ../bin/codis-config server -h usage:
    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>
    而: 添加点儿只 server group, 每个 group 有些许个 redis
    实例,group的id分别吗1跟2, redis实例为同一主一打。
    添加一个group,group的id为1, 并添加一个redis master到拖欠group
    $ ../bin/codis-config server add 1 localhost:6379 master
    长一个redis slave到拖欠group
    $ ../bin/codis-config server add 1 localhost:6380 slave
    类似的,再添加group,group的id为2
    $ ../bin/codis-config server add 2 localhost:6479 master
    $ ../bin/codis-config server add 2 localhost:6479 slave
  5. 安 server group 服务之 slot 范围 Codis 采用 Pre-sharding
    的技艺来落实数量的分片, 默认分成 1024 个 slots (0-1023),
    对于每个key来说, 通过以下公式确定所属之 Slot Id : SlotId =
    crc32(key) % 1024 每一个 slot 都见面发生一个特定的 server group id
    来代表这个 slot 的数额由何人 server group 来提供.
    $ ../bin/codis-config slot -h
    usage:
    codis-config slot init
    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>]
    如:
    安编号为[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
  6. 启动 codis-proxy
    ../bin/codis-proxy -c config.ini -L ./log/proxy.log –cpu=8
    –addr=0.0.0.0:19000 –http-addr=0.0.0.0:11000
    恰恰起步之 codis-proxy 默认是居于 offline状态的, 然后安 proxy 为
    online 状态, 只发处 online 状态的 proxy 才会对外提供服务
    ../bin/codis-config -c config.ini proxy online <proxy_name>
    <—- proxy的id, 如 proxy_1
  7. 打开浏览器
    http://localhost:18087/admin
    兹得以于浏览器中完成各种操作了, 玩得开心

性能
8 core Xeon 2.10GHz, 多线程的 benchmark, 单 proxy 的 ops 是 12w. 而且
proxy 是可动态水平扩展的, 理论上的性质瓶颈应该是百万级别的

网站地图xml地图