概念
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都正常时才能对外提供服务。