本文摘自PHP中文网,作者青灯夜游,侵删。
本篇文章给大家介绍一下Redis中的Cluster集群,看看TCP端口、数据分片,了解一下如何利用docker搭建一个三主三从的Redis集群。Redis Cluster (Redis集群)
Redis Cluster是Redis的分布式实现。 当我们传输数据到 Redis Cluster,数据会自动分片,存储到各个Redis节点上。【相关推荐:Redis视频教程】
Redis Cluster相对于单点Redis,可以在一些节点出现故障或无法通信时继续运行。但是,如果服务器出现较大故障(例如,超过一半以上的服务器不可用),群集将停止运行。
Redis Cluster TCP端口
每个Redis群集节点都需要打开两个TCP连接。 一是用于服务客户端的常规TCP端口,默认为6379。 第二个端口用于群集总线,默认设置16379,二进制协议的节点到节点通信通道。节点利用群集总线用于故障检测,配置更新,故障转移授权等。
- 客户端永远不要尝试与群集总线端口进行通信,而应始终与普通的Redis命令端口进行通信,但是请确保同时打开防火墙中的两个端口,否则Redis群集节点将无法进行通信。命令端口和集群总线端口的偏移量是固定的,并且始终为10000。
- 如果没有同时打开两个TCP端口,则群集将无法正常工作。
- 集群总线使用不同的二进制协议进行节点到节点的数据交换,它更适合于用很少的带宽和处理时间在节点之间交换信息。
Redis Cluster数据分片
Redis Cluster不使用一致性哈希,而是使用一种叫哈希槽hash_slot的东西。
Redis群集中有16384个哈希槽,当我们在Redis中存储一对Key-Value时,要计算给定Key的哈希槽。方法是先计算Key的CRC16,然后对计算出的结果取模16384:
hash_slot = CRC16(key) mod 16384
Redis群集中的每个Redis节点都负责哈希槽的子集,因此,如果有一个包含3个节点的群集,其中:
- 节点A包含从0到5500的哈希槽。
- 节点B包含从5501到11000的哈希槽。
- 节点C包含从11001到16383的哈希槽。
这样可以轻松添加和删除集群中的节点。例如,如果我想添加一个新节点D,则需要将一些哈希槽从节点A,B,C移到D。类似地,如果我想从群集中删除节点A,则只需移动A所服务的哈希槽到B和C。当节点A为空时,我可以将其从群集中完全删除。
因为将哈希槽从一个节点移动到另一个节点不需要停止操作,所以添加或删除或者更改节点持有的哈希槽的占比不需要任何停机时间。
接下来我们利用docker搭建一个三主三从的Redis集群。
使用Docker搭建RedisCluster
Redis配置
1 2 3 4 5 6 7 8 9 |
|
创建自定义network
1 |
|
自定义路径
1 2 |
|
在自定义路径下生成成conf和data目标,并生成配置信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
- cluster-announce-ip 192.168.1.XX 中的IP必须是容器间通信的ip,之后可以在之前新增的network中查看。
- 共生成6个文件夹,从6001到6006,每个文件夹下包含data和conf文件夹,同时conf里面有redis.conf配置文件。
启动Redis容器
1 2 3 4 5 6 7 |
|
启动集群
1 2 3 4 |
|
- 创建成功后我们可以使用redis-cli命令连接到其中一个Redis服务.
1 2 3 4 |
|
- 之后通过cluster nodes命令可以查看节点信息,发现符合3主3从的预期
参考文档
Redis官方文档
更多编程相关知识,请访问:编程视频!!
以上就是一文聊聊Redis中的Cluster集群的详细内容,更多文章请关注木庄网络博客!
相关阅读 >>
Redis运维之shell的使用――统计内存、定期备份、基准测试
更多相关阅读请进入《Redis》频道 >>

数据库系统概念 第6版
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。