概念

Redis的主从复制解决了数据的可靠性问题,但仍存在如下问题:

  • 容量不够,redis如何进行扩展?
  • 并发写操作,redis如何实现分摊?

这就需要redis集群来解决。

什么是集群?

  • Redis集群实现了对Redis的水平扩容,即启动n个节点,将整个数据库分布存储在这n个节点中,每个节点存储总数的1/n。
  • Redis通过分区来保存多份数据,当部分节点失效时,不影响数据的可用性。

集群安装步骤

注意:至少3个节点,低于3个无法创建集群。

  • 安装Ruby文件,配置Ruby环境变量。
  • 安装Ruby-Redis的驱动。
  • 下载Redis提供的redis-trib.rb集群ruby脚本。
  • 修改redis的配置文件,支持集群方式
  • cluster-enabled yes    #打开集群方式
  • cluster-config-file node-xxx.conf    #设置节点的配置文件
  • cluster-node-timeout 15000    #设置节点失联时间,毫秒
  • 启动redis服务(所有服务器)
  • /redis-trib.rb create --replicas 1    #创建集群,1:为一个主机配置1个从机
  • redis-trib.rb check 127.0.0.1:6380:检查集群是否启动成功
  • cluster nodes:查看集群节点情况
  • 分配的原则是:保证每个主库运行在不同的ip地址上;每个从库和主库不在一个ip地址上。

数据块(slots)

  • 一个Redis集群包含16384个插槽,数据库中每个键都属于这16384槽中的一个,集群使用公司CRC16%16384来计算键属于哪一个槽。
  • 每个节点负责处理一部分插槽,如一个集群有3个节点,A节点负责处理0-5500号插槽,节点B负责处理5501-11000号插槽,节点C负责处理11001-16383号插槽。
  • redis-cli查询键值时,如客户端对应的服务器中不存在该键,则Redis会报错。而是用redis-cli -c -p port中的-c参数就可以实现自动重定向。
  • 不在一个slot中的数据,不能使用mget和mset等多键操作。
  • cluster-require-full-converage:16384个slot都正常时才能对外提供服务。