为什么需要Redis Cluster?
- 并发量
redis 本身 10w/s,但的业务已经需要100 w/s 了 - 数据量
一个 redis 及其内存 16~256G,但我们的业务就是强,需要 500G 了
解决问题的办法不止于简单地加机器。
并发量大了 =》 主从复制解决 =》主从稳定性 =》哨兵解决 =》单节点的写能力、存储能力、动态扩容都很麻烦 =》集群Cluster解决。
Redis Cluster集群模式具有高可用、可扩展性、分布式、容错等特性,在 3.0 闪亮发布。
那你介绍下Redis Cluster的架构?
- 单机架构
- 分布式架构
- Redis Cluster 架构
节点
meet
指派槽
复制 - 节点
- meet
- 指派槽
- 客户端与指派槽
Redis Cluster特性:
复制、高可用、分片
Redis分布式服务端及客户端启动
修改两个redis的配置文件redis.conf
修改端口一个为6379,另一个为6380
通过配置文件启动redis-server
redis-server ${redis[0-1]}
的${redis.conf}
集群 V.S 分布式
- 分布式:不同的业务模块拆分到不同机器,解决高并发的问题。 工作形态 redis服务器各工作方式不同一般称为Redis分布式
- 集群(cluster)
同一个业务部署在多台机器上,提高系统可用性。是物理形态,一般称Tomcat集群。集群就是一组计算机,它们作为整体向用户提供一组网络资源, 这些单个的计算机系统就是集群的节点(node)。
集群可能运行着一个或多个分布式系统,也可能根本没有运行分布式系统;分布式系统可能运行在一个集群上,也可能运行在不属于一个集群的多台(2台也算多台)机器上。
集群提供了以下关键的特性:
- 可扩展性
- 高可用性
- 负载均衡
- 错误恢复
分布式与集群的联系与区别:
- 分布式即分开部署。集群指的是将几台服务器集中在一起,实现同一业务
- 分布式的每一个节点,都可以做集群,而集群并不一定就是分布式的
比如客户端有10个用户,同时分别发送了1个请求,若不是集群,则这10个请求需要并行在一台机器上处理,如果每个请求都是1s,则有一人要等待10s,有一个人等待9s…
而在集群下,10个任务并分发到10台机器同时进行,则每人等待时间都是1s。
Redis Cluster 安装配置
两种安装:
原生命令安装
理解架构
1.配置开启节点
2. meet
3.指派槽
4.主从
官方工具安装
1.配置开启节点
2. meet
3.指派槽
4.主从
配置开启Redis-1:
port ${port} daemonize yes dir "/opt/redis/redis/data/" dbfilename "dump-${port}.rdb" logfile "${port}.log" cluster-enabled yes cluster-config-file nodes-${port}.conf
配置开启Redis-2
redis-server redis-7000.conf redis-server redis-7001.conf redis-server redis-7002.conf redis-server redis-7003.conf redis-server redis-7004.conf redis-server redis-7005.conf
Redis 3.0后,节点之间通过去中心化,提供了完整的sharding
、replication
(复制机制仍使用原有机制,并且具备感知主备的能力)、failover解决方案,称为Redis Cluster。
即:将proxy/sentinel的工作融合到了普通Redis节点。
Redis Cluster 集群架构
Redis Cluster采用无中心结构,每个节点都可以保存数据和整个集群状态,每个节点都和其他所有节点连接。要让集群正常运作至少需要三个主节点,即Cluster 至少为6个才能保证组成完整高可用的集群,三主三从:
- 主节点分配槽,处理客户端的命令请求
- 从节点可用在主节点故障后,顶替主节点
集群架构为拓扑结构。一个Redis Cluster由多个Redis节点组成。不同的节点组服务的数据无交集,每个节点对应数据sharding的一个分片。
节点组内部分为主备2类,对应master和slave。两者数据准实时一致,通过异步的主备复制保证。
一个节点组有且仅有一个master,同时有0到多个slave。只有master对外提供写服务,读服务可由master/slave提供