【Redis 开发】Redis分片集群

分片集群

  • 分片集群
    • 搭建分片集群
  • 散列插槽
  • 集群伸缩
  • 故障转移
  • RedisTemplate访问分片集群

分片集群

在我们使用哨兵进行高并发读的问题,但是还有海量数据存储,高并发写的问题,使用分片集群可以解决:
特征:

  1. 集群中有多个master,每个master保存不同的数据
  2. 每个master都可以有多个slave节点
  3. master之间通过ping检测彼此健康状态
  4. 客户端请求可以访问集群的任意节点,最终都会被转发到正确节点中

搭建分片集群

  1. /tmp目录下创建7001 7002 7003 8001 8002 8003目录
  2. /tmp目录下创建一个新的redis.conf文件,重新创建配置信息
port 6379
# 开启集群功能
cluster-enabled yes
# 集群的配置文件名称,不需要我们创建,由redis自己维护
cluster-config-file /tmp/6379/nodes.conf
#节点心跳失败的超时时间
cluster-node-timeout 5000
#持久化文件存放目录
dir /tmp/6379
#绑定地址
bind 0.0.0.0
#让redis后台执行
daemonize yes
#注册的实例ip
replica-announce-ip 192.168.75.135
#保护模式	
protected-mode no
#数据库数量
databases 1
#日志
logfile /tmp/6379/run.log 
  1. redis.conf配置文件拷贝到各个目录中去
    echo 7001 7002 7003 8001 8002 8003 | xargs -t -n 1 cp redis.conf
  2. 修改每个目录下的redis.conf文件,将其中的6379修改为所在目录一致:
    printf '%s\n' 7001 7002 7003 8001 8002 8003 | xargs -I {} -t sed -i 's/6379/{}/g' {}/redis.conf
  3. /tmp目录下一键启动所有服务
    printf '%s\n' 7001 7002 7003 8001 8002 8003 | xargs -I {} -t redis-server {}/redis.conf
    关闭所有进程ps -ef | grep redis | awk '{print $2}'| xargs kill
  4. 创建集群:redis-cli --cluster create 192.168.75.135:7001 192.168.75.135:7002 192.168.75.135:7003 192.168.75.135:8001 192.168.75.135:8002 192.168.75.135:8003 --cluster-replicas 1

在这里插入图片描述
7. 通过redis-cli -p 7001 cluster nodes命令来查看集群的状态

散列插槽

Redis会把每一个master节点映射到0~16383共16384个插槽(hash slot)上

插槽的利用是为了分辨我们所添加的数据最后存储在了哪一个master上

数据key不是与节点绑定,而是与插槽绑定。redis会根据key的有效部分计算插槽值,分两种情况:

  1. key中包含{},且{}中至少包含一个字符,{}中的部分是有效的部分
  2. key中不包含{},整个key是有效部分

key是num,那么就根据num计算,如果是{itcast}num,则根据itcast计算。计算方式是利用CRC16算法得到一个hash值,然后对16384取余,得到的结果就是slot值

为什么key要与插槽进行绑定:
在主节点出现宕机的情况下,如果使用插槽,可以进行将宕机节点对应的插槽转移到对应或者的节点
在这里插入图片描述
注意:在集群模式下客户端连接redis命令:redis-cli -c -p 7001(-c表示集群模式)
在这里插入图片描述

集群伸缩

就是在集群已经建立好的情况下,添加和删除节点
向集群中添加一个新的节点master节点

  1. 在/tmp文件下创建目录7004 mkdir 7004

  2. 复制新的redis.conf文件到7004中

  3. 修改配置文件中的端口为7004

  4. 运行redis服务redis-server 7004/redis.conf

  5. 将该节点插入到集群当中
    redis-cli --cluster add-node 192.168.75.135:7004 192.168.75.135.7001
    在这里插入图片描述
    后边的--cluster-slave:参数将添加的节点设置为从节点,并可以指定对应的主节点,如果没有参数默认添加的节点为主节点

  6. 注意因为key是按照插槽存储,添加节点后还要重新分片
    redis-cli --cluster reshard 192.168.75.135:7001:将7001的主节点插槽分配
    redis-cli -p 7001 shutdown: 使一个Redis停机

故障转移

当集群中有一个master宕机会发生什么?

  1. 首先是该实例与其他实例失去连接
  2. 然后疑似宕机
  3. 最后确定下线,自动提升一个slave为新的master

手动切换主从关系:
利用cluster failover命令可以让集群中的某个master宕机,切换到执行cluster failover命令的这个slave节点上,实现无感的数据迁移
在这里插入图片描述
手动的failover支持三种模式:
缺省:如上图的流程,首先发送请求,得到现在的offset值,判断是否一致,不一致进行追赶,然后进行故障转移
force:省略了对offset的一致性校验
takeover:直接执行第5步,忽略数据一致性,忽略master状态和其他master的意见

RedisTemplate访问分片集群

RedisTemplate底层同样基于lettuce实现了分片集群的支持,而使用的步骤与哨兵模式基本一致:

  1. 引入redis的starter依赖
  2. 配置分片集群地址
  3. 配置读写分离
    与哨兵模式相比,其中只有分片集群的配置方式将所有的主从节点都填写进去:
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/316582.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国内各种免费AI聊天机器人(ChatGPT)推荐(上)

作者主页:点击! 国内免费AI推荐专栏:点击! 创作时间:2024年4月27日11点25分 欢迎来到AI聊天机器人推荐系列的第一篇文章! 在这个系列中,我将引领您探索国内各种AI聊天机器人的精彩世界。 从…

更易使用,OceanBase开发者工具 ODC 4.2.4 版本升级

亲爱的朋友们,大家好!我们的ODC(OceanBase Developer Center )再次迎来了重要的升级V 4.2.4,这次我们诚意满满,从五个方面为大家精心打造了一个更加易用、贴心,且功能更强的新版本,相…

mySQL商城项目实战 (终)(全部表)(1-88张)

本章无sql语句,直接放转出的sql文件。 88张表结果如图! 资源在已经与文章绑定, 在navicat工具中,执行以下步骤 在新建的数据库中右键,点击【运行sql文件】,运行绑定的资源,之后您就可以在您的navicat中看到我建好的8…

2024 java easyexcel poi word模板填充数据,多个word合成一个word

先看效果 一、准备工作 1.word模版 2.文件路径 二、pom依赖 <!-- easyexcel --><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.1.7</version></dependency><depe…

mysql面试题九(SQL优化)

目录 1.一条 SQL 是如何执行的 2.索引失效的几种情况 3.EXPLAIN 4.Where 子句如何优化 5.超大分页或深度分页如何处理 6.大表查询如何优化 7.分库分表 基本概念 分库分表方法 水平拆分 垂直拆分 分库分表后的注意事项 1.一条 SQL 是如何执行的 在MySQL中&#xff0…

Flink checkpoint 源码分析- Flink Checkpoint 触发流程分析

序言 最近因为工作需要在阅读flink checkpoint处理机制&#xff0c;学习的过程中记录下来&#xff0c;并分享给大家。也算是学习并记录。 目前公司使用的flink版本为1.11。因此以下的分析都是基于1.11版本来的。 在分享前可以简单对flink checkpoint机制做一个大致的了解。 …

VSCode SSH连接远程主机失败,显示Server status check failed - waiting and retrying

vscode ssh连接远程主机突然连接不上了&#xff0c;终端中显示&#xff1a;Server status check failed - waiting and retrying 但是我用Xshell都可以连接成功&#xff0c;所以不是远程主机的问题&#xff0c;问题出在本地vscode&#xff1b; 现象一&#xff1a; 不停地输入…

软考-信息系统项目管理师-论文技术架构模板(60天备考第26天)

分享一段信息系统项目管理师论文项目技术架构描述的万能模板&#xff0c;供大家参考。距离考试还有二十八天&#xff0c;如果论文写不好的可以加微进论文指导群学习论文写作。 该系统前端基于Vue开发&#xff0c;后端基于java开发&#xff0c;前后端分离部署。整体采用B/S架构&…

STM32 学习13 低功耗模式与唤醒

STM32 学习13 低功耗模式与唤醒 一、介绍1. STM32低功耗模式功能介绍2. 常见的低功耗模式&#xff08;1&#xff09;**睡眠模式 (Sleep Mode)**:&#xff08;2&#xff09;**停止模式 (Stop Mode)**:&#xff08;3&#xff09;**待机模式 (Standby Mode)**: 二、睡眠模式1. 进入…

Golang基础1-基本类型、if、switch、string

基本类型 bool 整数&#xff1a;byte(相当于uint8), rune(相当于int32), int/uint ,int8/uint8 ,int16/uint16 ,int32/uint32 ,int64/uint64 浮点数: float32 ,float64, complex64 ,complex128 array&#xff08;值类型&#xff09;、slice、map、chan&#xff08;引用类型…

西瓜书学习——决策树形状、熵和决策树的本质

文章目录 决策树形状监督学习算法分类与回归 熵信息熵香农熵 (Shannon Entropy) - H(X)联合熵 (Joint Entropy) - H(X, Y)条件熵 (Conditional Entropy) - H(Y|X)互信息 (Mutual Information) - I(X; Y)相对熵 (Relative Entropy) / KL散度 (Kullback-Leibler Divergence) - DK…

小程序使用阿里巴巴矢量图标库

一、登录官网 www.iconfont.cn 二、在搜索框中搜索想要的图标&#xff0c;将鼠标移动到图标上会看到三个标记 可以使用下载&#xff0c;直接使用&#xff1a; 可以使用css文件使用&#xff1a; 首先点击购物车样式的选项&#xff0c;而后点击下图位置&#xff1a; 点击自己创…

【python笔记】datafram的时间动态可视化 pyecharts地图

import pandas as pd# 假设DataFrame是这样的&#xff1a; df pd.DataFrame({ year: [2014, 2015, 2016, 2014, 2015, 2016, 2014, 2015, 2016], province: [广东省, 广东省, 河南省, 湖南省, 北京市, 北京市, 上海市, 新疆维吾尔自治区, 上海市], values: [100, 150, 75…

tomcat 配置支持 ssl 附效果图

1、修改tomcat配置文件server.xml: vim ./conf/server.xml 把配置文件&#xff1a; <Connector port"8088" Server" " protocol"HTTP/1.1"connectionTimeout"20000"redirectPort"8443" URIEncoding"UTF-8" …

可平滑替代FTP的FTP替代解决方案,具有哪些强大功能?

FTP是一种广泛使用的文件传输协议&#xff0c;主要用于在网络上的计算机之间传输文件。具有以下特点&#xff1a; 1.简单易用&#xff1a;FTP协议相对简单&#xff0c;易于设置和使用&#xff0c;许多操作系统和应用程序都内置了对FTP的支持。 2.广泛的客户端支持&#xff1a…

Vue生命周期都有哪些?

定义 Vue的生命周期就是实例从创建到销毁的一个过程&#xff0c;即从创建、初始化数据、编译模板、挂载Dom($el)->渲染、更新->渲染&#xff0c;卸载等一系列的过程。el是挂载点如<div id"app"></div>。 Vue的生命周期分为八个阶段 1.beforeCreate…

Spring Data JPA数据批量插入、批量更新真的用对了吗

Spring Data JPA系列 1、SpringBoot集成JPA及基本使用 2、Spring Data JPA Criteria查询、部分字段查询 3、Spring Data JPA数据批量插入、批量更新真的用对了吗 前言 在前两篇文章已经介绍过&#xff0c;在使用Spring Data JPA时&#xff0c;DAO层的Respository通过继承J…

【基础算法总结】双指针算法二

双指针 1.有效三角形的个数2.和为S的两个数字3. 三数之和4.四数之和 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; 1.有效三角形的个数 题目…

react实现时钟翻牌效果

需求&#xff1a;随着数字的变动要求有时钟翻动动效 问题&#xff1a;只在加载时有动效 解决方案&#xff1a;通过判断数字改变&#xff08;这里通过新旧数值变动来判断&#xff0c;不贴代码啦&#xff09;&#xff0c;每次变动的时候手动把animationIterationCount设置为inf…

Android --- 网络请求

通常在 Android 中进行网络连接一般使用 Scoket 和HTTP&#xff0c;HTTP 请求方式比 Scoket 多。HTTP 请求一般采用原生的 HttpClient 和 HttpUrlConnection 的两种网络访问方式&#xff08;系统自带的&#xff09;。但是在 Android 5.0 的时候 Google 就不推荐使用 HttpClient…