redis 笔记05 Sentinel、集群
Sentinel
1. Sentinel只是一个运行在特殊模式下的Redis服务器,它使用了和普通模式不同的命令表,所以Sentinel模式能够使用的命令和普通的Redis服务器能够使用的命令不同。
2. Sentinel会读入用户指定的配置文件,为每个要被监控的主服务器创建相应的实例结构,并创建连向主服务器的命令连接和订阅连接,其中命令连接用于向主服务器发送命令请求,
而订阅连接则用于接收指定频道的消息。
3. Sentinel通过向主服务器发送INFO命令来获得主服务器属下所有从服务器的地址信息,并为这些从服务器创建相应的实例结构,以及连向这些从服务器命令连接和订阅连接。
4. 在一般情况下,Sentinel以每十秒一次的频率向被监视的主服务器和从服务器发送INFO命令,当主服务器处于下线状态,或者Sentinel正在对主服务器进行故障转移操作时,
Sentinel向从服务器发送INFO命令的频率改为每秒一次。
5. 对于监视同一个主服务器和从服务器的多个Sentinel来说,他们会以每两秒一次的频率,通过向被监视服务器的_sentinel_:hello频道发送消息来向其他Sentinel宣告自己的存在。
6. 每个Sentinel也会从_sentinel_:hello频道中接收其他Sentinel发来的而信息,并根据这些信息为其他Sentinel创建相应的实例结构,以及命令连接。
7. Sentinel只会与主服务器和从服务器创建命令连接和订阅连接,Sentinel与Sentinel之间则只会创建命令连接。
8. Sentinel以每秒一次的频率向实例(包括主服务器、从服务器、其他Sentinel)发送PING命令,并根据实例对PING命令的回复来判断实例是否在线,当一个实例在指定时长中连续向Sentinel
发送无效回复时,Sentinel会将这个实例判断为主观下线。
9. 当Sentinel将一个主服务判断为主观下线时,它会向同样监视这个主服务器的其他Sentinel进行询问,看他们是否同意这个主服务器已经进入主观下线状态。(多次确认)
10. 当Sentinel收集到足够多的主观下线投票之后,它会将主服务器判断为客观下线,并发起一次针对主服务器的故障转移操作。
11. 主服务器下线后,通过一系列筛选条件过滤从服务器,最后比较复制偏移量,如果也相等,则根据主键。
集群
1. 节点通过握手来将其他节点添加到自己所处的集群当中 (双方确认)
2. 集群中的16384个槽可以分别指派给集群中的各个节点,每个节点都会记录哪些槽指派给了自己,而哪些槽又被指派给了其他节点。
3. 节点在接收到一个命令请求时,会先检查这个命令请求要处理的键所在的槽是否由自己负责,如果不是的话,节点向客户端返回一个MOVED错误,MOVED错误携带的信息可以指引客户端转向
至正在负责相关槽的节点。
4. 对Redis集群的重新分片工作是由redis-trib负责执行的,重新分片的关键是将属于某个槽的所有键值对从一个节点转移至另一个节点。
5. 如果节点A正在迁移槽i至节点B,那么当节点A没能在自己的数据库找到命令指定的数据库键时,节点A会向客户端返回一个ASK错误,指引客户端到节点B继续查询指定的数据库键。
6. MOVED错误表示槽的负责权已经从一个节点转移到了另一个节点,而ASK错误只是两个节点在迁移槽的过程中使用一种临时措施。
7. 集群里的从节点用于复制主节点,并在主节点下线时,代替主节点继续处理命令请求。
8. 集群中的节点通过发送和接收消息来进行通信,常见的消息包括MEET 、PING 、PONG 、PUBLISH 、FAIL五种。
9. Redis集群是Redis提供的分布式数据库方案,集群通过分片来进行数据库共享,并提供复制和故障转移功能。
10. 一个Redis集群通常由多个节点组成,连接各个节点的工作可以使用CLUSTER MEET命令来完成:CLUSTER MEET <ip> <port> 。向一个节点node发送CLUSTER MEET命令,可以让node
节点与ip和port所指定的节点进行握手,当握手成功时,node节点就会将ip和port所指定的节点添加到node节点当前所在的集群中。
11. Redis 需要设置custer_enabled为yes来启动集群模式。
12. Redis集群通过分片的方式来保存数据库中的键值对:集群的整个数据库被分为16384个槽(slot),数据库中的每个键都属于整个16384个槽的其中一个,集群中的每个节点可以处理0个到16384个槽。
当数据库中的16384个槽都有节点在处理时,集群处于上线状态。如果有一个槽没有得到处理,那么集群处于下线状态(fail)。
13. 通过CLUSTER ADDSLOTS命令,我们可以将一个或多个槽指派给节点负责:CLUSTER ADDSLOTS <slot> [slot.....] 例如:CLUSTER ADDSLOTS 0 1 2 3 ... 5000
14. clusterNode结构的slots(标记节点是否负责槽,如果值为1,负责,值为0,不负责)属性和numslot(槽的数量)属性记录了所有节点负责处理哪些槽。
15. 节点会将自己的slots数组通过消息发送给进群中的其他节点。其他节点将信息存储到自己的clusterNode中
16. clusterState结构中的slots数组记录了集群中所有16384个槽指派信息。
17. clusterState.slots数组记录了集群中的所有槽的指派信息,而clusterNode.slots数组只记录clusterNode结构所代表的节点的槽指派信息,这是两个slots数据的关键区别。
18. 向一个节点发送:CLUSTER REPICATE <node_id> 可以让接收命令的节点成为node_id所指定节点的从节点,并开始对主节点进行复制。
redis 笔记05 Sentinel、集群的更多相关文章
- Redis Sentinel 集群安装 step by step
一. 准备材料 服务器 IP address 操作系统 位数 Redis 版本 CNT06CAH05 192.168.3.47 CentOS 6.5 x64 Redis-3.2.6 sentine ...
- redis sentinel 集群监控 配置
环境: ip 172.16.1.31 26379 redis sentinel ip 172.16.1.30 6379 主 1 ip 172.16.1.31 6380 从 1 ip ...
- Redis Sentinel集群双机房容灾实施步骤
概要目标防止双机房情况下任一个机房完全无法提供服务时如何让Redis继续提供服务.架构设计A.B两机房,其中A机房有一Master一Slave和两个Sentinel,B机房只有2个Sentinel,如 ...
- redis sentinel集群的搭建
背景说明: 这里采用1主2从的redis集群,3个sentinel搭建高可用redis集群. 一,关于搭建redis-sentinel高可用之前,我们必须要了解redis主从搭建redis-senti ...
- Redis学习笔记八:集群模式
作者:Grey 原文地址:Redis学习笔记八:集群模式 前面提到的Redis学习笔记七:主从复制和哨兵只能解决Redis的单点压力大和单点故障问题,接下来要讲的Redis Cluster模式,主要是 ...
- Redis学习笔记~conf自主集群模式
回到目录 Redis自主提供了集群模式,当然也只是比较简单的读写分离模式,或者叫主从模式,它在各个redis服务端自己做数据同步机制,当然就是将主服务端的信息同步到各个slave服务器上,在客户端集成 ...
- redis解决方案之三种集群模式的概念与部署
上篇文章为大家总结了redis命令并讲述了持久化,今天我们来看一下redis的三种集群模式:主从复制,哨兵集群,Cluster集群 本篇文章先介绍redis-cluster集群模式,然后再依次介绍它的 ...
- Redis 3.0 Cluster集群配置
Redis 3.0 Cluster集群配置 安装环境依赖 安装gcc:yum install gcc 安装zlib:yum install zib 安装ruby:yum install ruby 安装 ...
- 分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...
随机推荐
- python文件的编译
背景知识 pyc文件: .pyc 是一种二进制文件,是由 .py 文件经过编译后,生成一种byte code文件. .py 文件变成 .pyc 文件后,加载的速度有所提高,而且 .pyc 是一种跨平台 ...
- 第二百零五节,jQuery EasyUI,Messager(消息窗口)组件
jQuery EasyUI,Messager(消息窗口)组件 学习要点: 1.加载方式 2.属性列表 3.方法列表 本节课重点了解 EasyUI 中 Messager(消息窗口)组件的使用方法,这个组 ...
- 重写ListView解决ListView内部ViewPaper滑动事件冲突问题
非常easy 重写ListView 其它类似问题解决ScrollView嵌套ViewPager出现的滑动冲突问题 http://blog.csdn.net/zhangyiacm/article/det ...
- java web 登录框
我们会骂 12306 的网站界面挫,效果差,速度慢,回头看看自己写的代码,是不是也一样的狗血!在前端,很多看似简单的东西,内藏无数玄机.本文将以一个小小的登录框为入口,谈一谈如何完善自己的程序. 在很 ...
- shell基础(二)
echo命令 Shell 的 echo 指令是用于字符串的输出. #!/bin/sh read name #读取标准输入的行 echo "$name It is a test" e ...
- IOS-添加分段控件SegmentControl
本文转载至 http://www.cnblogs.com/tx8899/archive/2012/06/05/2537020.html 添加分段控件 控件是一种小型的.自包含的UI组件,可以用在各种U ...
- 将坐标转化为与X轴正半轴夹角模板
//还需加PI 和 mabs 函数 double chg(double x,double y) { double tmps; )<1e-) { ) tmps=90.0; else tmps=27 ...
- 搭建一个简单的基于web的网络流量监控可视化系统
本文转载于我的个人博客,转载请标明出处. 初衷 在腾讯云的学生认证申请提交上去n天之后,终于得到了审批,所以迫不及待的想玩玩腾讯云,作为一个搞网络的,自然有一些关于网络应用的小玩意,所以把以前部署过的 ...
- [Algorithms] KMP
KMP is a classic and yet notoriously hard-to-understand algorithm. However, I think the following tw ...
- 在DO搭建自己的ss
前期准备: 1.一个paypal账户 2.国外的一台VPS paypal的注册需要一个邮箱和一张信用卡即可. VPS的话经过搜索对比,决定使用DigitalOcean的.(点击此链接注册DO可获得10 ...