目录

写在前面

一、数据库服务器高可用

二、 Sentinel (哨兵)是啥?

三、部署 Sentinel过程

1、初始化服务器

2、将普通的Redis服务器使用的代码替换成sentinel专用代码

3、初始化sentinel状态

4、创建连向主服务器的网络连接

5、哨兵监控实现原理

四、分布式数据库高并发

五、Redis集群是如何实现的?

1、【槽指派】

2、【重新分片】

3、【MOVED错误】

4、【ASK错误】


写在前面

最近博主学习数据库方面的知识,也算是小白入门,大家伙来一起学习交流,我边看书边记录总结,马上又开启新的一周,赶紧把过去一周零散学习的知识记录下来,以作备忘。

或许你了解高级开发运维知识,对高可用、高并发、分布式略知一二,或许你跟我一样刚刚入门,那就看完本篇,应该有所收获,其实这篇总结的知识点不难,是最基础的Redis多机数据库下的哨兵架构和集群架构。可能单纯的文字描述阅读起来有点枯燥,但内容算是干货总结,值得阅读,最后一键三连更好哈 :)

有趣的内容大家可以看看我的博客,例如这篇:我之前做的这个《口罩预约管理系统——数据库设计(前端+PHP+MySQL)》(有兴趣可以瞧瞧,完整项目源码和教程已上传CSDN)。

还有《Socket网络编程专栏》:https://blog.csdn.net/charzous/category_10465473.html  里面有好玩的小程序(模拟QQ邮箱、实时聊天小程序、C/S架构的通信等)。

一、数据库服务器高可用

高可用性(High Availability)是系统开发中是经常提到的一个名词,现在来看看它具体指的是什么,顾名思义,就是保证某种事物可用性很高,不容易出现问题,对于服务器来讲,那它指的就是来描述一个系统经过专门的设计,从而增加正常运行时间,减少故障或者宕机停工时间,而保持其服务的高度可用性

二、 Sentinel (哨兵)是啥?

出现的问题是:Redis主从复制模式下,当主服务器由于故障不能提供服务,需要人工将从节点晋升为主节点,同时需要更新应用方的主节点地址。这种故障处理方法明显是低效且繁琐的。

由此,Redis服务器为了保证高可用性,Sentinel(哨兵)架构诞生了!

sentinel架构就是Redis高可用的解决方案。(图片来源:Redis开发与运维)

  • 它是由一个或多个sentinel实例组成的sentinel系统,可以监视任意多个主服务器,以及其下从服务器
  • 在被监视的主服务器进入下线状态时,自动将下属的某个服务器升级为新的主服务器,代替下线的主服务器继续处理命令请求。

三、部署 Sentinel过程

sentinel系统的部署大概有下面几个步骤:启动和初始化sentinel命令:

redis-sentinel sentinel.conf 

sentinel架构部署如图:

1、初始化服务器

Sentinel 执行的工作和普通 Redis 服务器执行的工作不同, 所以 Sentinel 的初始化过程和普通 Redis 服务器的初始化过程并不完全相同。

比如说, 普通服务器在初始化时会通过载入 RDB 文件或者 AOF 文件来还原数据库状态, 但是Sentinel 并不使用数据库, 所以初始化 Sentinel 时就不会载入 RDB 文件或者 AOF 文件。

2、将普通的Redis服务器使用的代码替换成sentinel专用代码

使用REDIS_SENTINEL_PORT端口26379。命令列表包括:ping、sentinel、subscribe、unsubscribe、psubscribe、punsubscribe、info。

Sentinel 则使用 sentinel.c/sentinelcmds 作为服务器的命令表,具体如下:

struct redisCommand sentinelcmds[] = {{"ping",pingCommand,1,"",0,NULL,0,0,0,0,0},{"sentinel",sentinelCommand,-2,"",0,NULL,0,0,0,0,0},{"subscribe",subscribeCommand,-2,"",0,NULL,0,0,0,0,0},{"unsubscribe",unsubscribeCommand,-1,"",0,NULL,0,0,0,0,0},{"psubscribe",psubscribeCommand,-2,"",0,NULL,0,0,0,0,0},{"punsubscribe",punsubscribeCommand,-1,"",0,NULL,0,0,0,0,0},{"info",sentinelInfoCommand,-1,"",0,NULL,0,0,0,0,0}
};

3、初始化sentinel状态

其中,master属性记录了所有被监视的主服务器的相关信息,数据结构是字典。

  • 字典的键是被监视主服务器的名字
  • 而字典的值是被监视主服务器对应的 sentinel.c/sentinelRedisInstance 结构

4、创建连向主服务器的网络连接

一个是命令连接,专门用于向主服务器发送的命令,并接受命令回复。
一个是订阅连接,专用用于订阅主服务器的__sentinel__:hello频道,保证频道信息不丢失。

为什么有订阅连接?

在 Redis 目前的发布与订阅功能中, 被发送的信息都不会保存在 Redis 服务器里面, 如果在信息发送时, 想要接收信息的客户端不在线或者断线, 那么这个客户端就会丢失这条信息。

因此, 为了不丢失 __sentinel__:hello 频道的任何信息, Sentinel 必须专门用一个订阅连接来接收该频道的信息。

因为 Sentinel 需要与多个实例创建多个网络连接, 所以 Sentinel 使用的是异步连接。

5、哨兵监控实现原理

Redis Sentinel通过三个定时监控任务完成对各个节点发现和监控,是判定节点不可达的重要保证。

任务1:每隔10秒,每个Sentinel节点会向主节点和从节点发送info命令获取最新的拓扑结构,如图所示。

任务2:每隔2秒,定时任务可以完成以下两个工作:

  • 发现新的Sentinel节点:通过订阅主节点的__sentinel__:hello了解其他的Sentinel节点信息,如果是新加入的Sentinel节点,将该Sentinel节点信息保存起来,并与该Sentinel节点创建连接。
  • Sentinel节点之间交换主节点的状态,作为后面客观下线以及领导者选举的依据。

任务3:每隔1秒,每个Sentinel节点会向主节点、从节点、其余Sentinel节点发送一条ping命令做一次心跳检测,来确认这些节点当前是否可达。

四、分布式数据库高并发

高并发(High Concurrency)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求

高并发相关常用的一些指标有响应时间,吞吐量,每秒查询率QPS(Query Per Second),并发用户数等。

五、Redis集群是如何实现的?

Redis集群就是提供的分布式数据库方案。集群通过分片来进行数据共享,并提供复制和故障转移的功能

Redis的一个集群由多个节点组成,一个节点就是一个运行在集群模式下的Redis服务器,配置选项cluster-enabled决定是否开启集群模式。

集群的建立通过向一个节点发送cluster meet <ip> <port>命令,握手成功则添加到node节点当前所在的集群

Redis集群的知识非常丰富,这里简单介绍其中的几个重要的点。

1、【槽指派】

Redis集群通过分片的方式来保存数据库中的键值对。集群的整个数据库被分为16384个槽slot,数据库中的每个键都属于这些槽中的一个,集群中的每个节点可以处理0个或16384个槽。

2、【重新分片】

可以将任意数量的已经指派给某个节点的槽改为指派给另一个节点,并且相关槽所属的键值对也会移动到目标节点。

3、【MOVED错误】

当节点发现键所在的槽并非由自己处理时候,节点就会向客户端返回一个MOVED错误,指引客户端转向正在负责槽的节点。

集群模式下的客户端并不会打印出MOVED错误,而是自动进行节点转向,打印转向信息,单机模式下就会打印出错误信息。

4、【ASK错误】

在重新分片期间,可能出现部分分片存在于不同节点的情况,客户端向源节点发送键值对请求命令,出现ASK错误。同样的,集群模式下ASK错误会自动转向目标节点。


可能单纯的文字描述阅读起来有点枯燥,但内容算是干货总结,值得阅读,最后一键三连更好哈 :)

有趣的内容大家可以看看我的博客,例如这篇:我之前做的这个《口罩预约管理系统——数据库设计(前端+PHP+MySQL)》(有兴趣可以瞧瞧,完整项目源码和教程已上传CSDN)。

还有《Socket网络编程专栏》:https://blog.csdn.net/charzous/category_10465473.html  里面有好玩的小程序(模拟QQ邮箱、实时聊天小程序、C/S架构的通信等)。

如果觉得不错欢迎“一键三连”哦,点赞收藏关注,评论提问建议,欢迎交流学习!一起加油进步! 

本篇内容首发我的CSDN博客:https://csdn-czh.blog.csdn.net/article/details/116596657

高级开发运维从简单学:Redis哨兵和集群小贴士相关推荐

  1. Redis开发运维实践问题处理只内存检查

    8.3.1 系统内存查看 script/下的memstat.sh或者ps_mem.py都可以查看系统的内存情况,两个工具都需要root权限. 8.3.2 系统swap内存查看 #!/bin/bash ...

  2. Redis开发运维实践上线部署规划之持久化设置

    5.4 持久化设置 RDB和AOF两者毫无关系,完全独立运行,如果使用了AOF,重启时只会从AOF文件载入数据,不会再管RDB文件.在配置上有三种选择:不持久化,RDB,RDB+AOF.官方不推荐只开 ...

  3. Terraform实战 | 实用云部署编程入门指南,DevOps软件开发运维必备

    Terraform是一种部署技术,任何想要通过基础设施即代码(Infrastructure as Code,IaC)方法来置备和管理基础设施的人,都可以使用这种技术.基础设施指的主要是基于云的基础设施 ...

  4. DevOps 开发运维一体化~EXIN

    当我们谈到DevOps时,可能讨论的是:流程和管理,运维和自动化,架构和服务,以及文化和组织等等概念.那么,到底什么是'DevOps'呢? 随着软件发布迭代的频率越来越高,传统的「瀑布型」(开发一 测 ...

  5. 开发运维效率提升 80%,计算成本下降 50%,分众传媒的 Serverless 实践

    作者:吴松 本文总结于分众传媒研发总监吴松在阿里云云原生实战峰会上的分享,从三个方面讲述了对 Serverless 技术的探索. 分众传媒的业务现状 分众传媒的业务场景很简单,就是广告主买量,然后进行 ...

  6. 首次公开!阿里搜索中台开发运维一体化实践

    阿里妹导读:2015年底,阿里宣布启动阿里巴巴集团中台战略.战略定义为:构建符合DT时代的更具创新性.灵活性的"大中台.小前台"组织机制和业务机制.其中,前台作为一线业务,更敏捷更 ...

  7. devops开发运维训练营_软件开发训练营生存指南

    devops开发运维训练营 教学网站开发 在多个新手训练营培训了数百名开发人员后,我相信我有责任分享我的学习成果,包括什么才是优秀学生,以及在密集的软件开发新手训练营中可以采取哪些步骤生存和发展. 在 ...

  8. devops开发运维训练营_嗨,网络开发人员训练营的毕业生:这是您第一份工作需要了解的内容。...

    devops开发运维训练营 by Rachel Bird 雷切尔·伯德(Rachel Bird) 嗨,网络开发人员训练营的毕业生:这是您第一份工作需要了解的内容. (Hey web dev bootc ...

  9. 什么是devops开发运维_为什么假设驱动的开发是DevOps的关键

    什么是devops开发运维 DevOps的定义,由Donovan Brown提供 是" 人员 , 流程和产品的结合,以实现向客户不断交付价值 . "它强调了持续交付价值的重要性. ...

最新文章

  1. 杂乱场景中的尺度层次三维目标识别
  2. 优化应用不可不知道的知识
  3. 深度学习之 Cascade R-CNN
  4. linux内核线程绑定到单个核,linux 将进程或者线程绑定到指定的cpu上
  5. 10kv线路负载率计算_10kV配电线路保护的整定计算
  6. 数据分析之 缺失值分析
  7. REMIX 本地环境搭建指南
  8. 微信测试公众号-jssdk基本配置和使用-thinkphp
  9. Android Paint类属性说明
  10. Gitlab管理Create Merge Request,new Merge Request创建合并请求
  11. [转载] vscode python导入模块
  12. for 循环 与forEach 里面return 的区别
  13. 5. Linux 设备文件名
  14. thymeleaf 消息推送_SpringBoot整合WebSocket实现消息推送
  15. adb shell循环命令_Android adb 命令使用总结
  16. 关于quartus ii 破解失败的问题
  17. Windows电脑怎么卸载服务/删除服务?
  18. jsencrypt加密,并解决Message too long for RSA
  19. Vue设置浏览器title-icon
  20. Python爬取页游火线精英全区挑战排行榜

热门文章

  1. 全球智能手机销量下滑 国产手机奋力“逆生长”
  2. 【做题】CF1045(ABH)
  3. 高可用解决方案:同城双活?异地双活?异地多活?搞定了!
  4. Python--栈和队列
  5. 2018慕尼黑上海电子展
  6. 西门子1200PLC实用定位控制程序案例
  7. 概率p输出1,概率1-p输出0,等概率输出0和1 【LeetCode】470. rand7()构造rand10() 系列变形(新浪、字节面试题)
  8. 3310 4g版 支持java吗,诺基亚3310 4G版发布:运行YunOS系统,支持WLAN热点
  9. Visual C++编程实现摄像头视频捕捉
  10. CIH病毒1.4版本之中文注释