redis(二)redis的主从模式和集群模式
redis(二)redis的主从模式和集群模式
主从模式
redis的主从模式,指的是针对多台redis实例时候,只存在一台主服务器master,提供读写的功能,同时存在依附在这台主服务器的从服务器slaver,只提供读服务,且数据和主服务器保持一致。主服务器只能有一台,从服务器可以有多台,而且可以存在级联模式(从服务器下面也挂载从服务器)。主从的存在是为了分散访问量,提高访问可读性,同事保证数据的冗余和备份。
从服务器需要在配置文件中指定主服务的地址 slaveof 127.0.0.1 6379(主服务器的ip)。
redis的主从数据同步:
1、全量同步:
一般出现在从节点初始化阶段,全量数据需要从主节点上复制过来。
收到同步命令之后,master都会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存起来。如果master同时收到多个 slave发来的同步连接命令,只会使用启动一个进程来写数据库镜像,然后发送给所有slave,但是可能出现io剧增导致主服务器宕机。

2、增量同步:出现在从服务器初始化成功之后,开始正常提供服务之后,对主服务器发起增量同步,主服务器通过之前建立好的连接,发送写命令给从服务器。在增量同步失败的情况下,可以发起全量同步。
哨兵作用:
哨兵模式的出现,是为了弥补主服务突然宕机的情况下,能够及时选举出新的主服务器,使得服务依旧可用。 通过sentinel.conf配置文件进行配置 sentinel monitor mymast 192.168.110.133 6379 1 #主节点 名称 IP 端口号 选举次数
哨兵模式,指的是在原有主从的基础之上,增加sentinel系统来实时用来监听redis的健康状况。哨兵本质也是redis,用于监听redis服务,哨兵模式是集群模式,每个哨兵都是实时想其他哨兵,master,slaver发送心跳,来判断是都活着。当出现master不能访问的时候,采集其他哨兵对master的判断情况,当有半数以上的投票判断master死亡之后,哨兵集群会通过一定的算法来重新选举出一个slaver节点作为master,以保证整个reids服务的可用性。
选举结束之后,所有的配置文件都会发生修改。
正对死亡的reids实例,哨兵也会监听。当原来死亡的主服务器重新恢复之后,哨兵集群会把它当做从服务器加入到redis服务中。
自动切换ip漂移:
在主从模式下,客户端访问redis的服务器的ip地址是固定的,通过keepalived,可以使得客户端在redis故障切换之后,不需要修改ip,只需要访问固定的虚拟ip就可以。
集群模式
redis集群模式,指的是针对多个redis实例,去中心化,去中间件,集群中的每个节点都是平等的关系,都是对等的,每个节点都保存各自的数据和整个集群的状态,并且每个节点都和其他所有节点连接,而且这些连接保持活跃,这样就保证了我们只需要连接集群中的任意一个节点,就可以获取到其他节点的数据。
redis集群没有统一的ip入口,客户端与redis节点直连,不需要中间proxy层,客户端访问任意一个节点,都可以进入集群,访问集群的所有数据。节点内部使用PING-PONG机制来互相通信,当集群添加一个节点的时候,只需要连接集群中任意一个节点即可,不需要连接所有节点。(https://blog.csdn.net/nihao12323432/article/details/81204499)
当超过半数的master节点检测某个master节点失效时(通行超时),该节点才会失效,进行故障转移。因此必须要有3个以上的master才可以创建出集群。
如果一个master进行故障转移的时候,发现没有slaver来使用,那么整个集群fails。当整个集群有一半的master出现故障,无论有没有slaver,整个集群fails。
通过 redis-trib.rb create --replicas 1来创建集群。
哈希槽:
哈希槽的存在,是为了能快速找到key所在的节点。一个redis集群包含2^16=16384个哈希槽,会分配给各个节点。可以通过槽的分配来控制不同节点的数据量和请求数。哈希槽通过顺时针来分片,即一个节点顺时针到下一个几点之间的槽属于下一个节点。
每一个key,通过公式slot=CRC16(key)/16384来计算属于哪个槽。
扩容的时候,只需要动一个节点的数据即可。eg.A->B(顺时针),中间插入C节点,那么只修要迁移B的数据,重新分配到B和C中即可。
每一个redis实例节点都会保持元数据对应的哈希槽信息,数据会不断的同步。
redis(二)redis的主从模式和集群模式的更多相关文章
- Eclipse的下载、安装和WordCount的初步使用(本地模式和集群模式)
包括: Eclipse的下载 Eclipse的安装 Eclipse的使用 本地模式或集群模式 Scala IDE for Eclipse的下载.安装和WordCount的初步使用(本地模式和集群 ...
- IntelliJ IDEA的下载、安装和WordCount的初步使用(本地模式和集群模式)
包括: IntelliJ IDEA的下载 IntelliJ IDEA的安装 IntelliJ IDEA中的scala插件安装 用SBT方式来创建工程 或 选择Scala方式来创建工程 本地模式或集群 ...
- Scala IDE for Eclipse的下载、安装和WordCount的初步使用(本地模式和集群模式)
包括: Scala IDE for Eclipse的下载 Scala IDE for Eclipse的安装 本地模式或集群模式 我们知道,对于开发而言,IDE是有很多个选择的版本.如我们大部分人经常 ...
- IntelliJ IDEA(Ultimate版本)的下载、安装和WordCount的初步使用(本地模式和集群模式)
不多说,直接上干货! IntelliJ IDEA号称当前Java开发效率最高的IDE工具.IntelliJ IDEA有两个版本:社区版(Community)和旗舰版(Ultimate).社区版时免费的 ...
- IntelliJ IDEA(Community版本)的下载、安装和WordCount的初步使用(本地模式和集群模式)
不多说,直接上干货! 对于初学者来说,建议你先玩玩这个免费的社区版,但是,一段时间,还是去玩专业版吧,这个很简单哈,学聪明点,去搞到途径激活!可以看我的博客. 包括: IntelliJ IDEA(Co ...
- 【集群】Redis的哨兵模式和集群模式
哨兵模式 哨兵模式是redis高可用的实现方式之一 使用一个或者多个哨兵(Sentinel)实例组成的系统,对redis节点进行监控,在主节点出现故障的情况下,能将从节点中的一个升级为主节点,进行故障 ...
- Centos7安装Nacos单机模式以及集群模式(包含nignx安装以及实现集群)的相关配置
Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现.服务配置.服务元数据及流量管理. Nacos支持三种部署模式 单机模式 - 用于测试 ...
- Spring Cloud - Nacos注册中心入门单机模式及集群模式
近几年微服务很火,Spring Cloud提供了为服务领域的一整套解决方案.其中Spring Cloud Alibaba是我们SpringCloud的一个子项目,是提供微服务开发的一站式解决方案. 包 ...
- Redis搭建(四):Sharding集群模式
一. 方案 1. 介绍redis集群分为服务端集群(Cluster)和客户端分片(Sharding)服务端集群:redis3.0以上版本实现,使用哈希槽,计算key的CRC16结果再模16834.此处 ...
随机推荐
- SQL注入环境的搭建
使用Phpstudy搭建SQL注入环境: 1.下载phpstudy安装 2.下载sql实验环境 所用环境的代码是一个印度人的开源项目平台.里面包含了基本的各种注入类型,同时又有get和post类型,以 ...
- 为什么阿里、头条、美团这些互联网大厂都在用Spring Boot?
前言 自 2014 年发布至今,Spring Boot 的搜索指数 一路飙升.没错 Spring Boot 越来越火了,作为一名行走一线的 Java 程序员,你可能在各个方面感受到了 Spring B ...
- 3个月不发工资,拖延转正?2天跳槽软件测试成功,9.5k他不香吗!
今天聊到的小哥哥很悲催又很神奇,身处武汉的他,正好赶上了疫情,不仅长达3个月没有发工资,拖延转正,还要降薪,三重打击,实名悲催. 不破不立,试用期80%再打8折,怎么跳槽工资都得比这高,果然,仅仅两天 ...
- Arcgis api for js实现服务端地图的增删改查
< !DOCTYPE html > <html xmlns = "http://www.w3.org/1999/xhtml" > <head > ...
- Python Ethical Hacking - BACKDOORS(3)
BACKDOORS Sockets Problem: TCP is stream-based. Difficult to identify the end of message/batch. Solu ...
- CentOS8.0 Docker Repository
一.硬件软件准备 1.2台服务器或者电脑(使用云服务器1.阿里云 2.百度云各一台) ,系统均为CentOS 8.0 2.分别安装Docker 3.测试镜像准备(准备的是 ...
- C#中的类与对象
类:说白了就是类型,是对具体事物的一种抽象总结. 对象:一个具体的事物. 类与对象的关系,类实例化就会得到一个对象,同样一个对象也应该属于某一个类.例如张三这个人,他是一个对象,同时他属于人类,在程序 ...
- [jvm] -- 常用内存参数配置篇
新生代 ( Young ) 与老年代 ( Old ) 的比例的值为 1:2 ( 该值可以通过参数 –XX:NewRatio 来指定 ) Eden : from : to = 8 : 1 : 1 ( 可 ...
- 一些非常实用的git命令
阅读目录 一.前言 二.git branch 和 git checkout 三.git clone 和 git remote 四.git pull 和 git push 五.git merge 和 g ...
- Eclipse普通java Project文件路径问题
Eclipse普通java Project文件路径问题 项目的结构如图 读取src里某个包下的文件,代码如下 BufferedReader br=new BufferedReader(new File ...