IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Redis Cluster集群(三) -> 正文阅读

[大数据]Redis Cluster集群(三)

Redis笔记

Redis集群方案

  • 哨兵模式
  • 高可用集群模式

高可用集群模式

定义:

因为哨兵模式在主从节点切换的瞬间存在 访问瞬断 的情况,而且哨兵只有一个主节点对外提供服务,没办法支持很高的并发,所以redis提供了cluster集群模式

redis内置cluster 集群模式,称为redis集群,具有 **高可用、分片**的特性,具有良好的水平扩展性。

redis集群

redis集群原理

概念:

Redis Cluster 将所有数据划分为16384个slots(槽位),集群中的每个节点负责其中一部分槽位,槽位的信息存储在每个节点中。

当客户端连接集群时,得到一份**集群槽位配置信息缓存在客户端本地**

槽位定位算法:

当查找某个key时, key位置为:CRC16(key) mod 16384CRC16是一个hash算法

跳转重定位:

由于客户端会缓存 槽位配置信息 在本地,当客户端计算出key的槽位,发到redis,节点会发现key所在槽位不归自己管理,这时候会向客户端发送一个特殊的跳转指令携带目标操作的节点地址,告诉客户端从这个节点获取数据,同时会更新本地槽位配置信息。 【因为缓存信息过时了,节点让客户端重定位】

节点间的通信机制

  • 集中式
  • gossip

redis cluster节点间采用gossip协议进行通信

集中式:

优点:元数据的更新和读取,其他节点可以立即感知

缺点:所有元数据的更新压力全部集中在一个地方,导致元数据的存储压力

很多中间件使用zookeeper来集中式存储元数据

gossip:

  • meet —— 集群内的节点发送meet给新节点,让它加入
  • ping —— 每个节点频繁给其他节点发送ping,包含自己的状态还有自己维护的集群元数据
  • pong —— 对meet和ping消息的返回,包含自己的状态和其他信息信息广播和更新
  • fail —— 发送fail给其他节点告诉指定节点宕机。

优点:元数据的更新比较分散,降低压力

缺点:元数据的更新有延时可能导致 集群的一些操作会滞后

gossip通信的10000端口

每个节点都有一个专门用于节点间通信的端口,是它的端口号加上10000防火墙记得配置

gossip心跳同步

网络抖动

真实的网络世界会突然出现不可访问的情况

Redis Cluster 提供了一种选项cluster-node-timeout,表示当某个节点持续 timeout 的时间失联时,才可以认定该节点出现故障,需要进行主从切换。

※ Redis集群选举原理分析

  • slave发现master变为FAIL状态
  • 将自己记录的集群currentEpoch++,并广播FAILOVER_AUTH_REQUEST 信息 【不会立即广播,有延迟
  • 只有其他主节点master会响应,判断请求合法性,并发送FAILOVER_AUTH_ACK,对每一个epoch只发送一次ack
  • slave收集master返回的FAILOVER_AUTH_ACK
  • slave 收到**超过原来半数的master的ack,才会变成新的master** 【至少三个master
  • slave广播pong信息通知其他集群节点

第二点的延迟计算公式

DELAY = 500ms + random(0 ~ 500ms) + SLAVE_RANK * 1000ms

SLAVE_RANK —— slave从master中复制数据总量的排名rank,排名越前,代表数据越新,更有机会首先发起选举

集群脑裂数据丢失问题

问题:

出现 master 和 slave 连接丢失时,此时slave发起选举,就有两个master对外服务,【产生脑裂问题】当网络恢复后,其中一个master变为slave,丢失大量数据

解决:

# 写数据成功的最少同步slave数量 假设结点数为3 1主2从
min-replicas-to-write 1

## 当主节点写入数据时,【根据配置】需要同步写入至少1个从节点的数据,才能写入成功

是否完整才能对外提供服务

当redis.conf的配置cluster-require-full-coverage为no时,表示当负责一个slot的master下线且没有相应的slave进行故障恢复时,【有一部分不能读写】 集群仍然可用,如果为yes则集群不可用。

Redis集群为什么至少需要三个master节点,并且推荐节点数为奇数?

因为新master的选举,需要得到 超过半数的master同意,slave才能变为master,如果只有两个master节点,选举无法进行。

奇数个master节点可以满足选举条件且节省一个节点,

比如3个master节点和4个master节点集群

  • 3节点只允许一个master宕机
  • 4节点有一个master宕机后,如果宕机一个,无法选取新的master【因为此时最大票数为2,master节点半数也为4/2=2】

奇数个节点是从 节省机器资源角度 考虑的

Redis集群对批量操作命令的支持

mset、mget

mset name summer age 18 # 报错,因为name和age落在不同的slot里,无法批量操作
# 解决
# key的前面加上{XX},这样参数数据分片hash计算的只会是大括号里的值,这样能确保不同的key能落到同一slot里去
mset {user1}:name summer {user1}:age 18 
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-04 15:39:43  更:2022-03-04 15:43:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:45:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码