(1)Redis集群方案(3)(3.4未完)

1、 高可用Sentinel(单主 Redis 足以支撑业务,保证数据安全,业务前期数据少可用,目)ps:主从只是备份,不支持HA

2、 Redis cluster(体量大10G+,分散读写压力到不同集群,分片用更多内存:

一次RDB 时间,内存越大越。 fork 时间也变久。重启通过RDB文件,AOF 日志恢复时间变长

3、代理分片(Twemproxy,redis集群没有时,使用最多)

4、 Codis集群(豌豆荚15年开源解决方案,用了2年之多,同期官网推出redis cluster)

5、 客户端分片(少,典型代表:Jedis。自主写分片算法,可控性强,技术和维护成本高)

概要:1、Redis Sentinel   2、Redis Cluster3.0   3、Twemproxy

4、Codis   5、客户端分片(Redis Cluster出现前用较多,目前很少用)

一、Sentinel(哨兵)

主从机制,可能单点故障,主宕机麻烦,Redis-Sentinel实现主从切换,类似zookeeper。监控多个master-slave集群宕机自动切换

    监控(Monitoring):不断检查主、从服务器是否运作正常。

    提醒(Notification)如发现通过 API 向管理员或者其程序发通知

    自动故障迁移(Automatic failover):自动切换。 客户端连接失效主, 集群返回新主。

缺点:一个主(写),不能缓解写压力

配置文件sentinel.conf,不指定将无法启动sentinel

官方典型的配置

不用配置slave,能够被自动检测到(master有slave消息)。运行期间是会被动态修改,如主备切时,如重启,根据配置恢复其之前监控redis集群的状态。

(1)sentinel monitor mymaster 127.0.0.1 6379 2

指示 Sentinel 监视mymaster主服务器,  IP 127.0.0.1 , 端口号 6300, 失效至少2 个 Sentinel 同意,不达标自动故障迁移不执行

获得多数(majority) Sentinel 支持, 才能发起自动故障迁移.集群gossip协议通信。

除了第一行剩下统一格式: sentinel

(2)down-after-milliseconds 服务器已断线所需毫秒

(3)parallel-syncs 执行故障转移时, 最多多少个从服务器同时对新主同步, 越小时间越长。

(4)redis-sentinel sentinel.conf 启动 Sentinel 系统

(5)redis-server sentinel.conf --sentinel 运行 Redis 服务器

4、5两种方式,指定sentinel.conf, 不指定无法启动。默认监听26379端口

开启两个Sentinel,关闭主,切换了

6300端口重启,会变成6301端口服务的slave。

二、Redis 3.0集群

P2P的模式,完全去中心化。多节点数据集自动分片,分区可用性。Hash Slot方案,不是一致性哈希。所有的Key分成16384个slot,每个Redis实例负责一部分slot。信息(节点、端口、slot等)节点之间定期交换更新。

所需数据不在实例中,重定向命令引导客户端访问所需实例。特性:

    节点自动发现

    slave->master 选举,集群容错

    Hot resharding:在线分片

    集群管理:cluster xxx

    基于配置(nodes-port.conf)的集群管理

    ASK /MOVED 转向机制

互联(PING-PONG机制),二进制协议优化传输速度和带宽。fail超半数才生效。与redis直连。客户端连任何节点。物理节点映射到[0-16383]slot上cluster负责维护node<->slot<->value

当前master没有slave 宕,集群进入fail状态

环境搭建:至少3个主节点。测试3主3从,修改配置文件,其它默认

创建集群:命令行工具redis-trib.rb完成。

1)下载 https://raw.githubusercontent.com/antirez/redis/unstable/src/redis-trib.rb。

2)搭建Redis 的 Ruby 支持环境

3)运行命令创建集群, –replicas 1:希望为集群中每个主节点创建一个从节点

redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006

测试

http://blog.720ui.com/2016/redis_action_04_cluster/#%E5%88%9B%E5%BB%BA%E9%9B%86%E7%BE%A4

五、客户端分片实现方式:

代码层实现,对 Key 进行 hash 计算,对应Redis 实例操作数据。

对 hash 层代码要求高,考虑节点失效后的替代算法,数据震荡后的自动脚本恢复实例监控等。


你可能感兴趣的:((1)Redis集群方案(3)(3.4未完))