Redis Cluster
- 它是Redis的分布式解决方案,在Redis 3.0版本正式推出的,有效解决了Redis分布式方面的需求。当遇到单机内存、并发、流量等瓶颈时,可以采用Cluster架构达到负载均衡的目的。
- 数据分布理论: 分布式数据库首要解决把整个数据集按照分区规则映射到多个节点的问题,即把数据集划分到多个节点上,每个节点负责整个数据的一个子集。常见的分区规则有哈希分区和顺序分区。Redis Cluster采用哈希分区规则,因此接下来会讨论哈希分区规则。
- 常见的哈希分区有以下几种: 节点取余分区;一致性哈希分区;虚拟槽分区
顺序分区
- 可以顺序访问
- 数据分散,容易倾斜
- 举例:HBase和bigtable
哈希分布
节点取余
- 数据节点关系变化很大,导致数据迁移,迁移的数量和添加节点有关
- 最好翻倍扩容
一致性哈希分区
- 只影响相邻节点,但还是会有数据迁移
redis采用的虚拟槽分区
- 每一个槽都会映射一个数据子集
- key会根据CRC16(哈希函数)来计算槽范围
redis集群功能限制
- key批量操作支持有限。如:MSET``MGET,目前只支持具有相同slot值的key执行批量操作
- key事务操作支持有限。支持多key在同一节点上的事务操作,不支持分布在多个节点的事务功能
- key作为数据分区的最小粒度,因此不能将一个大的键值对象映射到不同的节点。如:hash、list
- 不支持多数据库空间。单机下Redis支持16个数据库,集群模式下只能使用一个数据库空间,即db 0
集群安装 配置
- 需要最少六台redis节点,其中三台用来设置槽的范围(6380、6381、6382),其余三台用于Redis cluster(638{3-5})
- 6380,6381,6382作为主节点,6383,6384,6385作为从节点
- 和以往操作一样,新建一个文件夹,mkdir cluster作为集群安装的基础文件夹,在里面以端口进行文件夹的创建
- mkdir -pv {6380,6381,6382,6383,6384,6385}/{conf,data,logs}以端口建文件夹,以及对应的conf、data和logs配套文件夹
- 在6380的文件夹下的conf文件夹下,新建redis.conf文件,输入的内容如下
daemonize yespidfile /usr/local/redis-4.0.14/cluster/6380/redis.pidport 6380loglevel noticeprotected-mode nologfile "/usr/local/redis-4.0.14/cluster/6380/logs/redis.log"dir /usr/local/redis-4.0.14/cluster/6380/data## 集群模式配置cluster-enabled yescluster-node-timeout 15000cluster-config-file /usr/local/redis-4.0.14/cluster/6380/nodes.conf
- 将其拷贝到其余的集群文件所对应的文件夹下,cp 6380/conf/redis.conf 6381/conf/,此刻是在cluster的文件目录内进行此操作
- 将redis.conf里面的端口信息使用命令进行修改,别的不需要改变,sed -i 's/6380/6381/g' 6381/conf/redis.conf,以上的两个操作适用于全部的端口文件
- 在src目录下,启动所有的集群服务redis-server /usr/local/redis-4.0.14/cluster/6380/conf/redis.conf,其余的类似
- 使用命令查看状态ps -ef|grep redis,可以看到,redis的后年会标有【cluster】的标志
- 使用命令,连接到6380接口,redis-cli -p 6380
- 使用info命令查看相关信息,在redis-cli里面进行操作
- CLUSTER nodes查看集群的节点,前面的字符串是集群ID,在redis-cli里面进行操作
- cluster meet 192.168.33.130 6381,将其余的节点加入到集群中,在redis-cli里面进行操作
- 给每一个集群的节点分配槽,使用命令redis-cli -p 6380 cluster addslots {0..5461},需要退出redis-cli进行操作
- redis-cli -p 6381 cluster addslots {5462..10922}
- redis-cli -p 6382 cluster addslots {10923..16383}
- 将6383作为6380的从节点,redis-cli -p 6383 cluster replicate 6380的序列号
- 同理将6384和6385配置成为6381和6382的从节点
- 可以使用ruby可以简化集群配置的流程
集群模式的要求
- 安装ruby(大于2.2.2)
- 安装redis 集群配置
- 安装gem
- 安装ruby的redis包
- redis-trib.rb构建集群