Redis的三种集群模式

Redis有三种集群模式,第一个就是主从模式,第二种“哨兵”模式,第三种是Cluster集群模式,第三种的集群模式是在Redis 3.x以后的版本才增加进来的,这里先说Redis第一种集群模式:主从集群模式。

主从集群模式:

实现主从复制(Master-Slave Replication)的工作原理:Slave从节点服务启动并连接到Master之后,它将主动发送一个SYNC命令。Master服务主节点收到同步命令后将启动后台存盘进程,同时收集所有接收到的用于修改数据集的命令,在后台进程执行完毕后,Master将传送整个数据库文件到Slave,以完成一次完全同步。而Slave从节点服务在接收到数据库文件数据之后将其存盘并加载到内存中。此后,Master主节点继续将所有已经收集到的修改命令,和新的修改命令依次传送给Slaves,Slave将在本次执行这些数据修改命令,从而达到最终的数据同步。

主从复制的配置很简单,主要操作从节点的配置文件,主节点不需要任何改动。我们可以使用info查看role角色即可知道是主服务或从服务。

常用命令:

根据配置文件启动redis: ./redis-server ../etc/redis.conf
启动redis客户端:redis-cli -p port
Slaver连接Master:slaveof host:ip (测试时使用slaveof手动连接master,正式环境使用配置文件)
查看主从信息:info Replication

具体配置(测试模拟):

1、在同一台机器上,按照1主1从的最简单的结构搭建,即1个Master,1个Slaver节点

2、Redis配置文件redis.conf的配置:(ps:如果master节点设置了密码,子节点的配置文件就要加上:masterauth <master-password>)

3、配置完后2个节点都是master,通过info Replication查看角色信息:

4、配置主从节点,在从节点上执行:

127.0.0.1:7001> slaveof 127.0.0.1 7000
OK

主从redis的日志显示:显示数据同步成功,主从设置成功:

这时一个节点是master,一个是slaver,再通过info Replication查看角色信息:

5、Master节点设置key后异步同步到Slaver节点;Slaver节点只能读取数据,但不能有写操作

6、如果master节点挂掉,手动将slaver节点升级为Master(命令:slaveof no one 手动将Slaver节点升级为Master节点)
   操作步骤如下:
    a) Master节点: Shutdown关闭节点
    b) Slaver节点:slaveof no one将其升级为Master节点
    c) 原来的Master节点:重新启动后,可以使用slaveof 127.0.0.1 7001 连接Slaver将其视为Master节点,自己成为Slaver节点

主从模式的优缺点

  • 优点:
  1. Master可以对应多个Slaver,甚至Slave同样可以接受其它Slaves的连接和同步请求(即slaveof 一个从节点ip+端口),这样可以有效的分担Master的同步压力
  2. Master可读可写,Master写入后立即返回,几乎同时将写入异步同步到各个Slaver,所以基本上延迟可以忽略;而Slaver只能读不能写,分担了Master的读操作压力;总体上实现了读写分离
  3. Master是以非阻塞的方式为Slaves提供服务,在Master-Slave同步期间,客户端仍然可以提交查询或修改请求;Slave同样是以非阻塞的方式完成数据同步,在同步期间,如果有客户端提交查询请求,Redis则返回同步之前的数据
  • 缺点:
  1. 主从模式不具备自动容错和恢复功能,主机从机的宕机都会导致部分读写请求失败,需要等待机器重启、slaveof no one命令切换主从,手动切换前端的IP这三步才能恢复。
  2. 主机宕机,如果宕机前有部分数据未能及时同步到从机,即使切换IP后还会引入数据不一致的问题,降低了系统的可用性。
  3. Redis的主从复制采用全量复制,复制过程中主机会fork出一个子进程对内存做一份快照,并将子进程的内存快照保存为文件发送给从机,这一过程需要确保主机有足够多的空余内存。若快照文件较大,受制于网络波动,对集群的性能会产生较大的影响。
  4. 不能水平扩容,这个模式的高可用特性会受到Master主节点内存的限制。

总结

redis的主从模式很简单,在实际的生产环境中是很少使用的,不建议使用是由它的缺点造成的,在数据量非常大的情况,或者对系统的高可用性要求很高的情况下,主从模式是不稳定的。虽然这个模式很简单,但是这个模式是其他模式的基础。

参考:https://www.cnblogs.com/PatrickLiu/p/8426610.html

https://www.cnblogs.com/gossip/p/5992716.html

redis之集群一:主从的更多相关文章

  1. redis搭建集群和主从

    说明 Redis集群至少需要3个节点,来支持投票容错机制,每个节点都有从节点,所有最少是6个服务(3个主3个从) 因为集群内置了16384个slot(哈希槽),并且把所有的物理节点映射到了这16384 ...

  2. redis sentinel 集群配置-主从切换

    1.配置redis master,redis slave(配置具体操作见上文http://www.cnblogs.com/wangchaozhi/p/5140469.html). redis mast ...

  3. redis 非集群的主从配置及切换

    单纯的master-slave不能称之为集群,只能叫做读写分离.此案例只针对master为单点服务,且程序端写死master为可写,slave为只读.若master宕机则不可用,若主从未开启持久化,不 ...

  4. python连接redis哨兵集群

    一.redis集群模式有多种, 哨兵模式只是其中的一种实现方式, 其原理请自行谷歌或者百度 二.python 连接 redis 哨兵集群 1. 安装redis包 pip install redis 2 ...

  5. 搭建分布式 Redis Cluster 集群与 Redis 入门

    目录 Redis 集群搭建 Redis 是啥 集群(Cluster) Redis Cluster 说明 Redis Cluster 节点 Redis Cluster 集群模式 不能保证一致性 创建和使 ...

  6. Redis集群(九):Redis Sharding集群Redis节点主从切换后客户端自动重新连接

    上文介绍了Redis Sharding集群的使用,点击阅读 本文介绍当某个Redis节点的Master节点发生问题,发生主从切换时,Jedis怎样自动重连新的Master节点 ​一.步骤如下: 1.配 ...

  7. Redis Cluster集群主从方案

    本文介绍一种通过Jedis和Cluster实现Redis集群(主从)的高可用方案,该方案需要使用Jedis2.8.0(推荐),Redis3.0及以上版本(强制). 附:Redis Cluster集群主 ...

  8. Redis集群(主从模式)

    主从模型   在Redis的集群当中,每个节点(实例)都有一个身份:Master或者Slave,Master:主要负责数据写入,Slave一般提供数据读取,Master与Slave之间是一对多关系,M ...

  9. Redis集群的主从切换研究

    目录 目录 1 1. 前言 1 2. slave发起选举 2 3. master响应选举 5 4. 选举示例 5 5. 哈希槽传播方式 6 6. 一次主从切换记录1 6 6.1. 相关参数 6 6.2 ...

  10. redis集群(主从配置)

    市面上太多kv的缓存,最常用的就属memcache了,但是memcache存在单点问题,不过小日本有复制版本,但是使用的人比较少,redis的出现让kv内存存储的想法成为现实.今天主要内容便是redi ...

随机推荐

  1. Vue-router hash模式微信登录授权验证,#号处理

    微信授权登录验证会把网址中的#号去掉,这样在跳转的时候Vue拿不到Code.所以做了以下处理 let href = window.location.href; if (href.includes(&q ...

  2. 详解汇编语言B和LDR指令与相对跳转和绝对跳转的关系

    @ 目录 为什么要有相对跳转和绝对跳转? 在程序中只有相对跳转/绝对跳转是否可以? B(BL)和LDR指令具体怎么执行的? B(BL)和LDR跳转范围是如何规定的? 为什么要有相对跳转和绝对跳转? 顺 ...

  3. js下 Day12、案例

    一.垃圾分类 效果图: 功能思路分析: 1. 鼠标按下 (1) 获取鼠标到元素的距离(e.offsetX) (2) 开启开关变量 (3) 获取事件源 (4) 记录垃圾初始位置 ​  2. 鼠标移动 ( ...

  4. mini-web框架-闭包-总结(5.2.1)

    @ 目录 1.说明 2.代码 关于作者 1.说明 闭包关键: 1.在函数内部再定义函数 2.函数在不调用情况下不执行. 3.和创建对象差不多,但返回的为内部函数引用 2.代码 # y = kx+b d ...

  5. iframe高度自动随着子页面的高度变化而变化(不止要在iframe标签里加上this.height=this.contentWindow.document.body.scrollHeight)

    最近使用iframe整合页面遇到一些难题,走了很多弯路才解决,借此记录一下: 1 <!-- 页面主体内容 --> 2 <div class="iframe-wrapper& ...

  6. Python的环境是如何安装的,我来教你

    01 初见Python Python编程语言是荷兰人Guido van Rossum在1990年代开发出来的. Gudio拥数学和计算机双硕士学位,但他更喜欢计算机.当时Gudio觉得现有的编程语言无 ...

  7. C# 中国日历 农历 阳历 星座 二十四节气 二十八星宿 节日 天干地支

    using System; namespace DotNet.Utilities { /// <summary> /// 农历属性 /// </summary> public ...

  8. python初学者-水仙花数简单算法

    输出"水仙花数".所谓水仙花是指一个3位数的十进制数,其各位数字的立方和等于该数本身.例如:153是水仙花数. 用for循环实现水仙花数的计算图如下所示: 1 for i in r ...

  9. laravel 数据库之DB类

    // 取回数据表的第一条数据 DB::table('table')->where('key', 'value')->first(); DB::table('table')->firs ...

  10. 686. Repeated String Match判断字符串重复几次可以包含另外一个

    public static int repeatedStringMatch(String A, String B) { //判断字符串a重复几次可以包含另外一个字符串b,就是不断叠加字符串a直到长度大 ...