参考书为 <<Redis开发与运维>> Redis相关的知识非常全面,非常推荐阅读

手动将从节点设置为主节点

手动将从节点设置成主节点。命令:

# redis-cli -h <主节点ip> -p <主节点端口号> slaveof [host] [port]
127.0.0.1:6380> slaveof 127.0.0.1 6379
OK

配置复制的方式:

1)在配置文件中加入slaveof {masterHost} {masterPort}随Redis启动生效。
2)在redis-server启动命令后加入–slaveof {masterHost} {masterPort}生效。
3)直接使用命令:slaveof {masterHost} {masterPort}生效。

主从节点复制成功建立后, 可以使用info replication命令查看复制相关状态

127.0.0.1:6380> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:5946163
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:5541

从节点执行slaveof no one命令断开与主节点的复制关系,

断开复制主要流程:
1) 断开与主节点复制关系。
2) 从节点晋升为主节点

从节点断开复制后并不会抛弃原有数据, 只是无法再获取主节点上的数据变化。

但是切主后从节点会清空之前所有的数据, 线上人工操作时小心slaveof在错误的节点上执行或者指向错误的主节点。

Redis复制的拓扑结构,分为一主一从,一主多从,树状主从结构。

一主一从:

当应用写命令并发量较高且需要持久化时, 可以只在从节点上开启AOF, 这样既保证数据安全性同时也避免了持久化对主节点的性能干扰。但需要注意的是, 当主节点关闭持久化功能时,如果主节点脱机要避免自动重启操作。 因为主节点之前没有开启持久化功能自动重启后数据集为空, 这时从节点如果继续复制主节点会导致从节点数据也被清空的情况, 丧失了持久化的意义。 安全的做法是在从节点上执行slaveof no one断开与主节点的复制关系, 再重启主节点从而避免这一问题。

一主多从:

又叫星形拓扑结构

树状拓扑:

树状主从结构(又称为树状拓扑结构) 使得从节点不但可以复制主节点数据, 同时可以作为其他从节点的主节点继续向下层复制。 通过引入复制中间层, 可以有效降低主节点负载和需要传送给从节点的数据量。数据实现了一层一层的向下复制。 当主节点需要挂载多个从节点时为了避免对主节点的性能干扰, 可以采用树状主从结构降低主节点压力。

开发与运维中的问题

读写分离方面的问题

1)复制数据延迟

Redis复制数据的延迟由于异步复制特性是无法避免的, 延迟取决于网络带宽和命令阻塞情况, 比如刚在主节点写入数据后立刻在从节点上读取可能获取不到。 需要业务场景允许短时间内的数据延迟。 对于无法容忍大量延
迟场景, 可以编写外部监控程序监听主从节点的复制偏移量, 当延迟较大时触发报警或者通知客户端避免读取延迟过高的从节点,

实现逻辑说明:

  1. 监控程序(monitor) 定期检查主从节点的偏移量, 主节点偏移量在info replication的master_repl_offset指标记录, 从节点偏移量可以查询主节点的slave0字段的offset指标, 它们的差值就是主从节点延迟的字节量。
  2. 当延迟字节量过高时, 比如超过10MB。 监控程序触发报警并通知客户端从节点延迟过高。 可以采用Zookeeper的监听回调机制实现客户端通知。
  3. 客户端接到具体的从节点高延迟通知后, 修改读命令路由到其他从节点或主节点上。 当延迟恢复后, 再次通知客户端, 恢复从节点的读命令请求。

这种方案的成本比较高, 需要单独修改适配Redis的客户端类库。 如果涉及多种语言成本将会扩大。 客户端逻辑需要识别出读写请求并自动路由,还需要维护故障和恢复的通知。 采用此方案视具体的业务而定, 如果允许不一致性或对延迟不敏感的业务可以忽略, 也可以采用Redis集群方案做水平扩展。

2)读到过期数据

当主节点存储大量设置超时的数据时。

Redis在3.2版本解决了这个问题, 从节点读取数据之前会检查键的过期时间来决定是否返回数据, 可以升级到3.2版本来规避这个问题。

3)从节点故障

对于从节点的故障问题, 需要在客户端维护可用从节点列表, 当从节点故障时立刻切换到其他从节点或主节点上。 这个过程类似上文提到的针对延迟过高的监控处理, 需要开发人员改造客户端类库。

总结:使用Redis做读写分离存在一定的成本。 Redis本身的性能非常高, 开发人员在使用额外的从节点提升读性能之前, 尽量在主节点上做充分优化, 比如解决慢查询, 持久化阻塞, 合理应用数据结构等, 当主节点优
化空间不大时再考虑扩展。 笔者建议大家在做读写分离之前, 可以考虑使用Redis Cluster等分布式解决方案, 这样不止扩展了读性能还可以扩展写性能和可支撑数据规模, 并且一致性和故障转移也可以得到保证, 对于客户端的维护逻辑也相对容易

Redis主从复制知识点相关推荐

  1. Redis主从复制与优化

    简介:Redis主从复制与优化 Redis主从复制与优化 主从复制 我们关注主从复制之前,首先要考虑单机有什么问题? 机器故障 容量瓶颈 QPS瓶颈 这些都是单节点所遇到的问题,所以这个时候出现了主从 ...

  2. 高可用的Redis主从复制集群,从理论到实践

    作者:Sicimike blog.csdn.net/Baisitao_/article/details/105545410 前言 我们都知道,服务如果只部署一个节点,很容易出现单点故障,从而导致服务不 ...

  3. Redis 核心知识点总结

    Redis核心知识点总结 一.数据类型 String string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB SET runoob "test&qu ...

  4. Redis 基础知识点总结

    1. NoSQL 数据库简介 NoSQL 是为了解决性能问题产生的一种技术,Redis 就是一个典型的NoSQL 的数据库. 1.1 技术发展 技术分类: 解决功能特性的问题:Java.Jsp.Tom ...

  5. Redis面试知识点

    Redis面试知识点 1.Redis概述 在我们日常的Java Web开发中,无不都是使用数据库来进行数据的存储,由于一般的系统任务中通常不会存在高并发的情况,所以这样看起来并没有什么问题,可是一旦涉 ...

  6. 【Redis】Redis基础知识点

    Redis基础知识点 简介.Memcache和Redis.多路I/O复用 常用数据类型 海量数据中筛选某一固定前缀的key 实现简单的分布式锁 实现异步队列 持久化:RDB.AOF.混合 Pipeli ...

  7. 【Linux服务器开发系列】一场redis线上事故引发的思考丨redis持久化 rdb和aof丨redis主从复制

    一场redis线上事故引发的思考 1. 事故背景介绍 2. redis持久化 rdb和aof 3. redis主从复制 4. 解决方案详解 [Linux服务器开发系列]一场redis线上事故引发的思考 ...

  8. redis基础知识点

    *redis基础知识点 ping 检查redis服务器的连接是否正常如果正常返回----pong info 查看redis服务器的统计信息 redis-benchmark 测试redis服务的性能 r ...

  9. redis相关知识点讲解,redis面试题

    redis相关知识点讲解,redis面试题 1. redis基本知识点 1.1 什么是redis? 1.2 redis的key的设计 1.3 redis的value数据类型有哪些? 1.3.1 str ...

  10. Redis主从复制配置

    环境描述 Redis Master:192.168.1.100 6379(Ubuntu系统) Redis Slave1:192.168.1.101 6380(Ubuntu系统) Redis Slave ...

最新文章

  1. 技术图文:如何爬取一个地区的气象数据(上)?
  2. 计算机控制技术曹立学答案,高等学校电子与电气工程及自动化专业十二五规划教材:计算机控制技术...
  3. Java并发编程(7):使用synchronized获取互斥锁的几点说明
  4. jquery通过ajax向后台发送(checkbox)数组,并在后台接收,(发送的数据是checkedbox)...
  5. 夹娃娃_夹娃娃的实用性方法 抓娃娃可以用什么技巧
  6. c语言 获取硬盘序列号,获取硬盘序列号的C++代码
  7. 教你如何使用Excel中的INT函数
  8. 交通大数据干货总结(1)
  9. linux之lsv—NAT配置
  10. JLINK在线调试——软件调试方法与技巧
  11. Twitter 账号爬取
  12. 解决org.apache.zookeeper.KeeperException$UnimplementedException:KeeperErrorCode = Unimplemented for /S
  13. 相似度算法--余弦相似度
  14. libreCAD源码阅读笔记2
  15. 华为云服务治理 | 隔离仓的作用
  16. 题目描述请参照本章例题,编写一个程序,输出以下信息:************************** Very Good**********************
  17. 自主开发的遥感图像数据处理系统
  18. python 自用的包,随机user_agent,插入删除提交mysql语句
  19. SmartBi各类图形及其echarts的js代码
  20. 需警惕CSS3属性的书写顺序

热门文章

  1. Linux定时函数介绍
  2. GridView控件属性及应用(转载)
  3. javascript面试题(一)
  4. 2015.5.29日总结
  5. 判断闰年的方法以及如何获得单链表的倒数第K个元素
  6. Python写视图界面--pyqt的使用
  7. NoSQL之MongoDB复制集配置、数据导出导入
  8. MySQL 第五次练习(MySQL备份恢复)
  9. dtoj#4258. 铃铛计数问题
  10. Java面向对象----抽象类