Redis-Cluster集群
Redis-Cluster集群简介
一、Redis-Cluster集群介绍
1、redis cluster集群是一个由多个主从节点群组成的分布式服务器群,它具有复制、高可用和分片特性。
2、Redis cluster集群不需要sentinel哨兵也能完成节点移除和故障转移的功能。需要将每个节点设置成集群模式,这种集群模式没有中心节点。
3、高达 1000 个节点的高性能和线性可扩展性。没有代理,使用异步复制,并且不对值执行合并操作。
二、为何使用Redis-Cluster集群
Redis集群演变过程
1.单机版
核心技术:持久化 持久化是最简单的高可用方法(有时甚至不被归为高可用的手段),主要作用是数据备份,即将数据存储在硬盘,保证数据不会因进程退出而丢失。
2.主从复制
复制是高可用Redis的基础,哨兵和集群都是在复制基础上实现高可用的。复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复。缺陷是故障恢复无法自动化;写操作无法负载均衡;存储能力受到单机的限制。
3.哨兵
在复制的基础上,哨兵实现了自动化的故障恢复。缺陷是写操作无法负载均衡;存储能力受到单机的限制。
4.集群
通过集群,Redis解决了写操作无法负载均衡,以及存储能力受到单机限制的问题,实现了较为完善的高可用方案
三、Redis-Cluster集群设计
Redis-Cluster采用无中心结构,其结构特点: 1、每个节点都和其它节点通过互ping保持连接,每个节点保存整个集群的状态信息,可以通过连接任意节点读取或者写入数据(甚至是没有数据的空节点)。 2、节点的fail是通过集群中超过半数的节点检测失效时才生效。 3、Redis集群预分好16384个槽,当需要在 Redis 集群中放置一个 key-value 时,根据公式HASH_SLOT=CRC16(key) mod 16384的值,决定将一个key放到哪个槽中。
四、Redis-Cluster集群缺点
-
数据通过异步复制,不保证数据的强一致性。
-
Redis Cluster 不支持像 Redis 的独立版本那样支持多个数据库。只有数据库 0 并且不允许使用SELECT命令。
-
Key 批量操作限制,如使用 mset、mget 目前只支持具有相同 slot 值的 Key 执行批量操作。对于映射为不同 slot 值的 Key 由于 Keys 不支持跨 slot 查询,所以执行 mset、mget、sunion 等操作支持不友好。
-
Key 事务操作支持有限,只支持多 key 在同一节点上的事务操作,当多个 Key 分布于不同的节点上时无法使用事务功能。
Redis-Cluster集群搭建
一、Cluster集群搭建
[详情参考博客] https://www.cnblogs.com/mafly/p/redis_cluster.html
1、创建目录
#创建集群目录 mkdir /usr/local/redis-cluster #创建实例目录 mkdir -p 900{1,2,3,4,5,6}/data
2、拷贝redis实例
cp /usr/local/redis/redis.conf /usr/local/redis-cluster/9001
3、修改实例配置文件
port 9001(每个节点的端口号) daemonize yes dir /usr/local/redis-cluster/9001/data/(数据文件存放位置) pidfile /var/run/redis_9001.pid(pid 9001和port要对应) cluster-enabled yes(启动集群模式) cluster-config-file nodes9001.conf(9001和port要对应)