1.集群如何操作

  现在有三台虚拟机,ip分别为100,105,106,将100作为master,其他两台作为slave

  

  1.vim redis.conf

  以前的版本是 slaveof <masterip> <masterport>

  

  我使用的是redis 5.0.3

  所以是 replicaof <masterip><masterport> 分别代表主节点ip和主节点端口

  

  2.修改两个从节点,配置为如下,设置 eplicaof <masterip><masterport> ,masterauth 密码

  

  3.完成配置

2.检查是否配置成功

  重启三台服务器,然后在从节点下输入指令: info replication

  可以看到role是slave,以及主机ip、端口,状态等信息,即代表配置成功。  

  

  master发送命令

  

  在slave端获取

  

  无法在从节点上进行写的操作

  

3.主从复制的原理

3.1 全量同步

  1.slave 第一次连接 或 重连 到 master 上以后,会向 master 发送 sync 的命令

  2.master收到 sync 命令,执行 bgsave 生成 rbd 快照,新的命令会写进缓冲区

  3.master执行完bgsave后,将 rbd 文件发送给各slave节点

  4.slave接收到 rbd 文件,丢弃旧的 rbd 数据,执行新的rbd快照

  5.master发送完rbd快照后,将缓冲区数据发送到slave

  6.slave完成对rbd的载入后,执行master缓冲区的写命令

  

3.2 增量同步

  slave服务器完成初始化,工作正常,主服务器发生写操作同步到从服务器

  增量同步主要是:主服务器每执行一条写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的命令

3.3 部分同步

  当master服务器断线后,从服务器需要重新发送sync命令,这样会消耗大量服务器 cpu、内存、磁盘,并且传送rdb还会消耗网络资源等

  在redis2.8版本后,部分同步 psync 来执行同步的命令。

  master在内存中给每个slave维护了一份同步日志和同步标识。每个slave和master同步都会携带自己的同步标识和上次同步的最后位置

  当master断线重连后,slave带着自己的同步标识,和上次同步的最后位置去找master,如果slave的偏移量在master同步日志中

  那么slave从偏移量开始的位置继续同步,无需进行全量同步。

3.4 同步策略

  第一次连接,进行全量同步,全量同步结束后,进行增量同步。

  如果断开,尝试部分同步,不行的话,依然采用全量同步。

3.5 部分命令

  通过replconf listening-port 6379

   sync,去向主服务器发送同步命令,此时进入通过输出模式,并不断发送ping包

   

  master写入数据

  

  slave 就会输出从缓冲区来的数据

  

  replica-server-stale-data yes  意味着必须完成 master 同步之后才能做接下来的操作。可以防止数据不一致的情况

  

  缺点:主从复制时,当 master 宕机后,从服务器没办法进行动态选举,从只能读取就的数据。

<Redis> 入门六 主从复制方式的集群的更多相关文章

  1. shell脚本部署redis以及redis主从复制和redis-cluster集群

    # 关于脚本: # 使用root用户执行此脚本,提前关闭selinux: # 执行脚本之前,hostsIP内的IP修改成自己的机器IP: # hostsIp内的IP数量如果有增加或者减少,for循环的 ...

  2. 实现Redis Cluster并实现Python链接集群

    目录 一.Redis Cluster简单介绍 二.背景 三.环境准备 3.1 主机环境 3.2 主机规划 四.部署Redis 4.1 安装Redis软件 4.2 编辑Redis配置文件 4.3 启动R ...

  3. Linux下redis 的部署、主从与集群

    老男孩Python全栈6期——redis--------------------------Linux 操作系统 默认的内存管理机制RSS:page cache:anno page:Linux操作系统 ...

  4. redis 5.0.3 讲解、集群搭建

    REDIS 一 .redis 介绍 不管你是从事Python.Java.Go.PHP.Ruby等等... Redis都应该是一个比较熟悉的中间件.而大部分经常写业务代码的程序员,实际工作中或许只用到了 ...

  5. Redis安装(单机及各类集群,阿里云)

    Redis安装(单机及各类集群,阿里云) 前言 上周,我朋友突然悄悄咪咪地指着手机上的一篇博客说,这是你的博客吧.我看了一眼,是之前发布的<Rabbit安装(单机及集群,阿里云>.我朋友很 ...

  6. Redis学习笔记(九)——集群

     一.概述 Redis Cluster与Redis3.0.0同时发布,以此结束了Redis无官方集群方案的时代. Redis Cluster是去中心化,去中间件,也就是说,集群中的每个节点都是平等的关 ...

  7. Tomcat 集群模式下 Session 更新 Bug (redis memcached 及tomcat自已的集群)

    从 excel 中导入数据入系统,我们用的是先上传文件至服务器再分析所上传的文件逐行导入. 就是执行了一循环,在当前循环位置标识一下客户端就知道执行的进度了,以前的方式 是用 session.setA ...

  8. Redis详解(七)——集群

    Redis详解(七)--集群 ​Redis3.0版本之前,可以通过Redis Sentinel(哨兵)来实现高可用 ( HA ),从3.0版本之后,官方推出了Redis Cluster,它的主要用途是 ...

  9. Redis系列5:深入分析Cluster 集群模式

    Redis系列1:深刻理解高性能Redis的本质 Redis系列2:数据持久化提高可用性 Redis系列3:高可用之主从架构 Redis系列4:高可用之Sentinel(哨兵模式) 1 背景 前面我们 ...

随机推荐

  1. 洛谷P4364 [九省联考2018]IIIDX(线段树)

    传送门 题解看得……很……迷? 因为取完一个数后,它的子树中只能取权值小于等于它的数.我们先把权值从大到小排序,然后记$a_i$为他左边(包括自己)所有取完他还能取的数的个数.那么当取完一个点$x$的 ...

  2. sql server 查看版本

    SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'),SERVERPROPERTY ('edition') ...

  3. Luogu P2921 在农场万圣节 【tarjan in 有向图】 By cellur925

    题目传送门 上来就想到既直接又简单的暴力方法,顺着每个房间的下一个走下去就好了,但是没想到最坏情况会达到1e5,100000的数据铁定超时. #include<cstdio> #inclu ...

  4. web项目tomcat启动url自定义(去掉项目名)

    通常,使用maven构建web项目,启动时默认的访问路径: http://ip:port/项目名 很多时候我们不喜欢这样 访问,我们希望下面的访问方式: http://ip:port 如果是本地的to ...

  5. Qt之程序发布以及打包成exe安装包

    一.简述 Qt项目开发完成之后,需要打包发布程序,而因为用户电脑上没有Qt配置环境,所以需要将release生成的exe文件和所依赖的dll文件复制到一个文件夹中,然后再用 Inno Setup打包工 ...

  6. _bzoj2005 [Noi2010]能量采集

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2005 令F(i)表示i | gcd(x, y)的对数,f(i)表示gcd(x, y) = i ...

  7. Android 线程池系列教程(2)Thread,Runnable是基类及如何写Run方法

    Specifying the Code to Run on a Thread 上一课   下一课 1.This lesson teaches you to Define a Class that Im ...

  8. Android SQLite(2)如何判断表是否已经存在

    在sql语句中用 if not exists void create_table(){ SQLiteDatabase dbWireter = dbhelper.getWritableDatabase( ...

  9. Struts2 表单提交与execute()方法的结合使用

    1.创建web项目,添加struts2支持的类库,在web.xml中配置struts2过滤器. 2.创建名为UserAction的Action对象,并在其中编写execute()方法,代码如下所示: ...

  10. List与类之间的运用,即与javabean的应用

    package com.wh.Object; public class Goods { private String name; private double price; private int n ...