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高级应用( ...
随机推荐
- php socket编程入门
服务端 <?php /** * File name server.php * 服务器端代码 * * @author guisu.huang * @since 2012-04-11 * */ // ...
- <!>贴图/音乐
<img src=图片位址>贴图 <img src=图片位址 width=’180’>设定图片宽度 <img src=图片位址 height=’30’>设定图片高度 ...
- 《转》openstack中删除虚拟主机,状态一直deleting
一.我重新启动了该机器.之后想删除没有创建成功的虚拟机(没有打开cpu的vt).结果发现状态一直为deleting状态.在这个状态下创建虚拟机也失败. 二.分析:在/var/log/nova/nova ...
- mac 干掉Dashboard
打开终端,输入下面的命令: defaults write com.apple.dashboard mcx-disabled -boolean YES 然后再重启一下 Dock,在终端输入 kill ...
- java调用oracle函数
/** * 调用函数取得数据表的ID值 * @param tableName 表名 * @return * @throws SQLException */ public String callFun( ...
- CSS样式设置
转载来自:http://www.imooc.com/article/2067水平居中设置-行内元素 水平居中 如果被设置元素为文本.图片等行内元素时,水平居中是通过给父元素设置 text-align: ...
- OpenSSL Heart Bleed 如何修复
一 . 前言 这两天这个事件沸沸扬扬啊,有了这个bug黑客在电脑前动动手指就能获取各大电商网站.各大银行用户的用户名和密码了,屌爆了 BUG具体内容 : http://heartbleed.com ...
- [转]C#自定义控件属性与行为
原文链接:http://blog.csdn.net/a237428367/article/details/5926445 控件应该定义属性而不是公共字段,因为可视化设计器在属性浏览器中显示属性,而不显 ...
- jQuery选择器概览
层级 ancestor descendant parent > child prev + next prev ~ siblings 基本筛选器 :first :not(selector) :ev ...
- ETCD数据空间压缩清理
场景:做etcd数据镜像的时候出现如下错误 Error: etcdserver: mvcc: database space exceeded 通过查找官方文档https://coreos.com/e ...