Redis Cluster介绍
Redis Cluster集群是redis集群的一种方式,由官方提供,由多个节点组成的分布式网络集群,每个节点可以是主,也可以是从,但每个主节点都需要有对应的从节点,保证高可用,主节点提供数据读写,不支持同时处理多个键(如mset/mget命令),因为redis需要把键均匀分布在各个节点上,并发量很高的情况下同时创建键值会降低性能并导致不可预测的行为。支持在线增加、删除节点,客户端可以连任何一个主节点进行读写。
Redis Cluster采用了分布式系统的分片(分区)的思路,每个主节点为一个分片,这样也就意味着 存储的数据是分散在所有分片中的。当增加节点或删除主节点时,原存储在某个主节点中的数据 会自动再次分配到其他主节点。
如图,各节点间是相互通信的,通信端口为各节点Redis服务端口+10000,这个端口是固定的,所以注意防火墙设置, 节点之间通过二进制协议通信,这样的目的是减少带宽消耗。
在Redis Cluster中有一个概念slot,我们翻译为槽。Slot数量是固定的,为16384个。这些slot会均匀地分布到各个节点上,另外Redis的键和值会根据hash算法存储在对应的slot中。简单讲,对于一个键值对,存的时候在哪里是通过 hash算法算出来的,那么取得时候也会算一下,知道值在哪个slot上。根据slot编号再到对应的节点上去取。
Redis Cluster无法保证数据的强一致性,这是因为当数据存储时,只要在主节点上存好了,就会告诉客户端存好了, 如果等所有从节点上都同步完再跟客户端确认,那么会有很大的延迟,这个对于客户端来讲是无法容忍的。所以,最终Redis Cluster只好放弃了数据强一致性,而把性能放在了首位。
创建集群
由于机器有限,使用两台机器实现redis cluster集群,每台机器需要启动3个redis服务
机器A(192.168.234.128)的3个redis服务的端口:7000 7001 7002
机器B(192.168.234.130)的3个redis服务的端口:7003 7004 7005
在两台机器上编译安装redis后,每台机器复制并编辑3个配置文件redis.conf,设置不同的端口号,数据目录,cluster相关参数后,分别启动6个redis服务
在A机器(192.168.234.128)操作:
创建7000端口配置文件:
[root@linux ~]# vim /etc/redis_7000.conf
配置文件内容:
port 7000
bind 192.168.234.128
daemonize yes
pidfile /var/run/redis_7000.pid
dir /data/redis/7000
cluster-enabled yes
cluster-config-file nodes_7000.conf
cluster-node-timeout 10100
appendonly yes
创建7001端口配置文件:
[root@linux ~]# vim /etc/redis_7001.conf
配置文件内容:
port 7001
bind 192.168.234.128
daemonize yes
pidfile /var/run/redis_7001.pid
dir /data/redis/7001
cluster-enabled yes
cluster-config-file nodes_7001.conf
cluster-node-timeout 10100
appendonly yes
创建7002端口配置文件:
[root@linux ~]# vim /etc/redi