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的主从模式和集群模式的更多相关文章

  1. Eclipse的下载、安装和WordCount的初步使用(本地模式和集群模式)

    包括:    Eclipse的下载 Eclipse的安装 Eclipse的使用 本地模式或集群模式 Scala IDE for Eclipse的下载.安装和WordCount的初步使用(本地模式和集群 ...

  2. IntelliJ IDEA的下载、安装和WordCount的初步使用(本地模式和集群模式)

    包括: IntelliJ IDEA的下载  IntelliJ IDEA的安装 IntelliJ IDEA中的scala插件安装 用SBT方式来创建工程 或 选择Scala方式来创建工程 本地模式或集群 ...

  3. Scala IDE for Eclipse的下载、安装和WordCount的初步使用(本地模式和集群模式)

    包括: Scala IDE for Eclipse的下载  Scala IDE for Eclipse的安装 本地模式或集群模式 我们知道,对于开发而言,IDE是有很多个选择的版本.如我们大部分人经常 ...

  4. IntelliJ IDEA(Ultimate版本)的下载、安装和WordCount的初步使用(本地模式和集群模式)

    不多说,直接上干货! IntelliJ IDEA号称当前Java开发效率最高的IDE工具.IntelliJ IDEA有两个版本:社区版(Community)和旗舰版(Ultimate).社区版时免费的 ...

  5. IntelliJ IDEA(Community版本)的下载、安装和WordCount的初步使用(本地模式和集群模式)

    不多说,直接上干货! 对于初学者来说,建议你先玩玩这个免费的社区版,但是,一段时间,还是去玩专业版吧,这个很简单哈,学聪明点,去搞到途径激活!可以看我的博客. 包括: IntelliJ IDEA(Co ...

  6. 【集群】Redis的哨兵模式和集群模式

    哨兵模式 哨兵模式是redis高可用的实现方式之一 使用一个或者多个哨兵(Sentinel)实例组成的系统,对redis节点进行监控,在主节点出现故障的情况下,能将从节点中的一个升级为主节点,进行故障 ...

  7. Centos7安装Nacos单机模式以及集群模式(包含nignx安装以及实现集群)的相关配置

    Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现.服务配置.服务元数据及流量管理. Nacos支持三种部署模式 单机模式 - 用于测试 ...

  8. Spring Cloud - Nacos注册中心入门单机模式及集群模式

    近几年微服务很火,Spring Cloud提供了为服务领域的一整套解决方案.其中Spring Cloud Alibaba是我们SpringCloud的一个子项目,是提供微服务开发的一站式解决方案. 包 ...

  9. Redis搭建(四):Sharding集群模式

    一. 方案 1. 介绍redis集群分为服务端集群(Cluster)和客户端分片(Sharding)服务端集群:redis3.0以上版本实现,使用哈希槽,计算key的CRC16结果再模16834.此处 ...

随机推荐

  1. SQL注入环境的搭建

    使用Phpstudy搭建SQL注入环境: 1.下载phpstudy安装 2.下载sql实验环境 所用环境的代码是一个印度人的开源项目平台.里面包含了基本的各种注入类型,同时又有get和post类型,以 ...

  2. 为什么阿里、头条、美团这些互联网大厂都在用Spring Boot?

    前言 自 2014 年发布至今,Spring Boot 的搜索指数 一路飙升.没错 Spring Boot 越来越火了,作为一名行走一线的 Java 程序员,你可能在各个方面感受到了 Spring B ...

  3. 3个月不发工资,拖延转正?2天跳槽软件测试成功,9.5k他不香吗!

    今天聊到的小哥哥很悲催又很神奇,身处武汉的他,正好赶上了疫情,不仅长达3个月没有发工资,拖延转正,还要降薪,三重打击,实名悲催. 不破不立,试用期80%再打8折,怎么跳槽工资都得比这高,果然,仅仅两天 ...

  4. Arcgis api for js实现服务端地图的增删改查

    < !DOCTYPE html > <html xmlns = "http://www.w3.org/1999/xhtml" > <head > ...

  5. Python Ethical Hacking - BACKDOORS(3)

    BACKDOORS Sockets Problem: TCP is stream-based. Difficult to identify the end of message/batch. Solu ...

  6. CentOS8.0 Docker Repository

    一.硬件软件准备      1.2台服务器或者电脑(使用云服务器1.阿里云 2.百度云各一台) ,系统均为CentOS 8.0      2.分别安装Docker      3.测试镜像准备(准备的是 ...

  7. C#中的类与对象

    类:说白了就是类型,是对具体事物的一种抽象总结. 对象:一个具体的事物. 类与对象的关系,类实例化就会得到一个对象,同样一个对象也应该属于某一个类.例如张三这个人,他是一个对象,同时他属于人类,在程序 ...

  8. [jvm] -- 常用内存参数配置篇

    新生代 ( Young ) 与老年代 ( Old ) 的比例的值为 1:2 ( 该值可以通过参数 –XX:NewRatio 来指定 ) Eden : from : to = 8 : 1 : 1 ( 可 ...

  9. 一些非常实用的git命令

    阅读目录 一.前言 二.git branch 和 git checkout 三.git clone 和 git remote 四.git pull 和 git push 五.git merge 和 g ...

  10. Eclipse普通java Project文件路径问题

    Eclipse普通java Project文件路径问题 项目的结构如图 读取src里某个包下的文件,代码如下 BufferedReader br=new BufferedReader(new File ...