Redis高可用集群架构

高可用集群架构

哨兵模式缺点

  1. 主从切换阶段, redis服务不可用,高可用不太友好
  2. 只有单个主节点对外服务,不能支持高并发
  3. 单节点如果设置内存过大,导致持久化文件很大,影响数据恢复,主从同步性能

高可用集群

        由多个主从节点群组成的分布式集群,具有复制,分片,高可用特性。并且支持水平扩展,官方建议水平扩展不超过1000个。redis集群的性能和高可用性均优于哨兵模式。

高可用集群搭建

redis集群需要至少三个master节点,这里搭建三个(一主一从)小集群,共6个redis节点

1. 把旧的redis.conf配置文件copy到8001文件夹下,并修改如下配置

port 8001    #端口
pidfile /var/run/redis_8001.pid  #把pid进程号写入pidfile配置的文件
#指定数据文件存放位置,必须要指定不同的目录位置
dir /home/kk/local/redis-7.2.3/high-cluster/8001 
cluster-enabled yes    #启动集群模式
cluster-config-file nodes-8001.conf    #集群节点信息文件,这里800x最好和port对应上
cluster-node-timeout 10000

2. 分别启动6个节点

src/redis-server high-cluster/8001/redis.conf
src/redis-server high-cluster/8002/redis.conf
src/redis-server high-cluster/8003/redis.conf
src/redis-server high-cluster/8004/redis.conf
src/redis-server high-cluster/8005/redis.conf
src/redis-server high-cluster/8006/redis.conf

3. 创建集群,系统会自动给每个节点分配槽位

src/redis-cli --cluster create --cluster-replicas 1 192.168.6.128:8001 192.168.6.128:8002 192.168.6.128:8003 192.168.6.128:8004 192.168.6.128:8005 192.168.6.128:8006

4. 验证集群

        连接任意一个客户端,查看集群信息和节点信息

[kk@localhost redis-7.2.3]$ src/redis-cli -p 8001
127.0.0.1:8001> cluster info
127.0.0.1:8001> cluster nodes

5. 关闭集群,依次关闭6个节点

src/redis-cli -p 8001 shutdown

槽位

概念

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

当 Redis Cluster 的客户端来连接集群时,它也会得到一份集群的槽位配置信息并将其缓存在客户端本地。这样当客户端要查找某个 key 时,可以直接定位到目标节点。同时因为槽位的信息可能会存在客户端与服务器不一致的情况,需要纠正机制来实现槽位信息的校验调整。

槽定位算法

Cluster 默认会对 key 值使用 crc16 算法进行 hash 得到一个整数值,然后用这个整数值对 16384 进行取模来得到具体槽位。

HASH_SLOT = CRC16(key) % 16384

跳转重定位

当客户端向一个错误的节点发出了指令,该节点会发现指令的 key 所在的槽位并不归自己管理,这时它会向客户端发送一个特殊的跳转指令携带目标操作的节点地址,告诉客户端去连这个节点去获取数据。客户端收到指令后除了跳转到正确的节点上去操作,还会同步更新纠正本地的槽位映射表缓存,后续所有 key 将使用新的槽位映射表。

示例

节点间通信机制

通信方式

集群的元数据(集群节点信息,主从角色,节点数量,各节点共享的数据等)通信方式

  • 集中式
  • gossip 

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

网络抖动

        当某个节点持续失联时间超过cluster-node-timeout,可以认定该节点出现故障,需要进行主从切换。如果没有这个选项,网络抖动会导致主从频繁切换 (数据的重新复制)。

脑裂数据丢失

        网络分区后, 主节点和从节点可能网络通讯中断, 会重新在从节点选举出一个新的主节点, 这个时候这两个主节点都能写数据, 网络恢复后, 旧的主节点会被更新成从节点, 这时旧主节点写入的数据就会丢失。

解决方案:

加上下面配置,往旧的主节点写数据时, 会失败,从节点数量小于1.

此配置虽然提升了一致性,但是会牺牲可用性

min-slaves-to-write 1  //写数据成功最少同步的slave数量

集群存在问题

1. 批量操作失败

mset/mget批量操作时, 如果hash槽位不在一个节点, 会写入/读取失败

解决:在key的前面加上{XX},这样参数数据分片hash计算的只会是大括号里的值,确保不同的key能落到同一slot里去

示例:

mset {user1}:1:name kk {user1}:1:age 18

水平扩容

集群命令

  1. create:创建一个集群环境host1:port1 ... hostN:portN
  2. call:可以执行redis命令
  3. add-node:将一个节点添加到集群里,第一个参数为新节点的ip:port,第二个参数为集群中任意一个已经存在的节点的ip:port
  4. del-node:移除一个节点
  5. reshard:重新分片
  6. check:检查集群状态

高峰时用add-node扩容, 高峰结束用del-node缩容,用reshard槽位迁移

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

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

相关文章

SSM项目管理系统开发oracle10g数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 SSM项目管理系统是一套完善的信息系统,结合springMVC框架完成本系统,对理解JSP java编程开发语言有帮助系统采用SSM框架(MVC模式开发),系统具有完整的源代码和数据库,系统 主要采用B/S模式开…

自研基于Xilinx PCIe的高性能多路视频采集与显示控制器

1 概述 视频采集与显示子系统可以实时采集多路视频信号,并存储到视频采集队列中,借助高效的硬实时视频帧出入队列管理和PCIe C2H DMA引擎,将采集到的视频帧实时传递到上位机采集缓冲区。在超带宽视频采集情况下,支持采集丢帧操作…

重温 re:Invent,分享十年成长:我和 re:Invent的故事

文章目录 前言背景我和re:Invent的交际历届峰会主题2012 突破技术垄断2013 革新数据服务2014 更好用的云服务2015 打通最后一-公里2016 迈向云上数据湖时代2017 重构云计算基础2018 云能力的再进化2019 赋能企业云架构服务2020 推动行业数据库服务的演进2021 无可比拟的云架构2…

【开源】基于Vue和SpringBoot的企业项目合同信息系统

项目编号: S 046 ,文末获取源码。 \color{red}{项目编号:S046,文末获取源码。} 项目编号:S046,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 合同审批模块2.3 合…

LLM、ChatGPT与多模态必读论文150篇

为了写本 ChatGPT 笔记,我和10来位博士、业界大佬,在过去半年翻了大量中英文资料/paper,读完 ChatGPT 相关技术的150篇论文,当然还在不断深入。 由此而感慨: 读的论文越多,你会发现大部分人对ChatGPT的技…

java List集合(ArrayList,LinkedList,Vector)

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍java List集合的三种实现类ArrayList,LinkedList,Vector以及部分理论知识 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍉博主收将持续更新学习…

HassOS使用nmcli设置静态IPv4地址及网关、DNS

目录 显示hass在使用的默认连接显示此连接的所有配置编辑hass默认连接添加静态IP地址添加DNS和网关删除DNS查看IPv4属性保存配置并退出nmcli重载配置 首先控制台登陆Home Assistant OS Welcome to Home Assistant homeassistant login:使用root用户登录(无需密码&a…

【数据结构】树与二叉树(廿五):树搜索给定结点的父亲(算法FindFather)

文章目录 5.3.1 树的存储结构5. 左儿子右兄弟链接结构 5.3.2 获取结点的算法1. 获取大儿子、大兄弟结点2. 搜索给定结点的父亲a. 算法FindFatherb. 算法解析c. 代码实现 3. 代码整合 5.3.1 树的存储结构 5. 左儿子右兄弟链接结构 【数据结构】树与二叉树(十九&…

vue实现动态路由菜单!!!

目录 总结一、步骤1.编写静态路由编写router.jsmain.js注册 2.编写permisstions.js权限文件编写permisstions.jsaxios封装的APIstore.js状态库system.js Axios-APIrequest.js axios请求实例封装 3.编写菜单树组件MenuTree.vue 4.主页中使用菜单树组件 总结 递归处理后端响应的…

量子力学:科技前沿的探索与挑战

量子力学:科技前沿的探索与挑战 一、量子力学的魅力与挑战 量子力学是研究微观粒子如电子、光子等行为的物理学分支。与经典力学不同,量子力学描述了一个充满不确定性和概率性的世界。在这个世界里,粒子可以同时处于多个状态,只有当我们对其进行测量时,它才会“选择”一个…

【古月居《ros入门21讲》学习笔记】11_客户端Client的编程实现

目录 说明: 1. 服务模型 2. 实现过程(C) 创建功能包 创建客户端代码(C) 配置客户端代码编译规则 编译 运行 3. 实现过程(Python) 创建客户端代码(Python) 运行…

Find My电容笔|苹果Find My技术与电容笔结合,智能防丢,全球定位

随着平板电脑的流行,有不少厂商都投入到了电容笔的开发当中,现在的电容笔不仅在精度上有了提高,甚至在笔触和压感上的研究都有进步。电容笔是利用导体材料制作的具有导电特性、用来触控电容式屏幕完成人机对话操作用的笔,电容笔通…

线性可分SVM摘记

线性可分SVM摘记 0. 线性可分1. 训练样本到分类面的距离2. 函数间隔和几何间隔、(硬)间隔最大化3. 支持向量 \qquad 线性可分的支持向量机是一种二分类模型,支持向量机通过核技巧可以成为非线性分类器。本文主要分析了线性可分的支持向量机模型,主要取自…

【藏经阁一起读】(78)__《Apache Tomcat 的云原生演进》

【藏经阁一起读】(78) __《Apache Tomcat 的云原生演进》 目录 __《Apache Tomcat 的云原生演进》 一、读后感 二、文章知识点摘要 2.1、Tomcat的技术内幕和在喜马拉雅的实践 2.2、GraalVM static compilation in web container application&…

重生奇迹MU魔法师操作技能

重生奇迹MU魔法师增加伤害加点方式 一、智力敏捷加点:2点智力1点敏捷,这种加点就是智敏结合的加点了,属性是不错的,提升了非常多的属性点,智力是偏重输出的,也是法师最常见的一种加点了,输出伤…

随笔(持续更新)

随笔(持续更新) 1、某个网络有没有连通 要获取某个网站的ip地址,可以通过ping它的域名就可以得到IP地址 例如:我想获取百度的ip地址(Windows环境) C:\Users\tq>ping www.baidu.com正在 Ping www.a.s…

pdf文件编辑,[增删改查]

pdf文件是投标文件中必不可少的格式,传统的方式先编辑word格式,最后生成pdf,但是有时候需要直接编辑pdf文件,编辑pdf的工具无疑 “adobe acrobat dc”是最好用的之一了 1.把图片文件添加到pdf指定位置,例如把一张图片添…

C++数据结构:图

目录 一. 图的基本概念 二. 图的存储结构 2.1 邻接矩阵 2.2 邻接表 三. 图的遍历 3.1 广度优先遍历 3.2 深度优先遍历 四. 最小生成树 4.1 最小生成树获取策略 4.2 Kruskal算法 4.3 Prim算法 五. 最短路径问题 5.1 Dijkstra算法 5.2 Bellman-Ford算法 5.3 Floyd-…

HCIP-十二、BGP常用属性

十二、BGP常用属性 实验拓扑实验需求及解法1.IP 地址已配置,自行测试直连。2.AS100 中运行 OSPF3.AS200 中运行 ISIS4.运行 BGP5.发布 BGP 路由6.修改起源属性 Origin7.修改 AS-path8.修改本地优先 Local-preference9.修改 MED 实验拓扑 实验需求及解法 本实验模拟…

【算法】滑动窗口题单——1.定长滑动窗口⭐

文章目录 1456. 定长子串中元音的最大数目2269. 找到一个数字的 K 美丽值1984. 学生分数的最小差值(排序)643. 子数组最大平均数 I1343. 大小为 K 且平均值大于等于阈值的子数组数目2090. 半径为 k 的子数组平均值2379. 得到 K 个黑块的最少涂色次数1052…