| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> Redis从入门到入坟系列文章(十三):主从复制 -> 正文阅读 |
|
[大数据]Redis从入门到入坟系列文章(十三):主从复制 |
????????今天来聊一下Redis的主从复制。Redis的主从复制跟关系型数据库(比如mysql)的主从复制类似。主从复制由于能够实现读写分离和从机实现对主机的数据备份的特点,所以在一定程度上是可以扩展Redis的性能的。 ?主从复制的实现? ? ? ? 接下来,就看下Redis主从复制的实现。我们配置一个主机Master和两个从机Slave:
????????我们把Redis这个目录拷贝两份,分别改名为Redis_6380和Redis_6381,原来那个目录保持不变。然后分别打开Redis_6380和Redis_6381目录下的redis.windows.conf文件,分别按如下修改: 从机1:
从机2:
打开命令行,到各自目录下启动服务:
然后输入如下命令,分别进入三个实例的控制台:
分别在三个实例下执行命令:info replication,分别查看三个服务的信息: ????????我们可以看到6379的主机有两个从机,分别为6380和6381;而6380和6381查看到的信息,主机都是6379。
????????我们随便在主机添加一个key测试下,看数据有没有同步到从机。测试命令如下,我们看到在主机添加key1后,数据同步到了两个从机。
主从复制的机制????????Redis主从复制的机制主要有以下三点:
我们再来看看Redis主从复制的一些特点:
主从复制的安全性? ?????????在使用 Redis 复制功能时的设置中,强烈建议在 master 和在 slave 中启用持久化。当不可能启用时,例如由于非常慢的磁盘性能而导致的延迟问题,应该配置实例来避免重置后自动重启。 为了更好地理解为什么关闭了持久化并配置了自动重启的 master 是危险的,检查以下故障模式,这些故障模式中数据会从 master 和所有 slave 中被删除:
当 Redis Sentinel 被用于高可用并且 master 关闭持久化,这时如果允许自动重启进程也是很危险的。例如, master 可以重启的足够快以致于 Sentinel 没有探测到故障,因此上述的故障模式也会发生。 任何时候数据安全性都是很重要的,所以如果 master 使用复制功能的同时未配置持久化,那么自动重启进程这项应该被禁用。 如何工作????????每一个 Redis master 都有一个 replication ID :这是一个较大的伪随机字符串,标记了一个给定的数据集。每个 master 也持有一个偏移量,master 将自己产生的复制流发送给 slave 时,发送多少个字节的数据,自身的偏移量就会增加多少,目的是当有新的操作修改自己的数据集时,它可以以此更新 slave 的状态。复制偏移量即使在没有一个 slave 连接到 master 时,也会自增,所以基本上每一对给定的
都会标识一个 master 数据集的确切版本。我们上面用info replication命令查看时,可以看到有主机和从机的replid、offset。 ????????当 slave 连接到 master 时,它们使用 PSYNC 命令来发送它们记录的旧的 master replication ID 和它们至今为止处理的偏移量。通过这种方式, master 能够仅发送 slave 所需的增量部分。但是如果 master 的缓冲区中没有足够的命令积压缓冲记录,或者如果 slave 引用了不再知道的历史记录(replication ID),则会转而进行一个全量重同步:在这种情况下, slave 会得到一个完整的数据集副本,从头开始。 ? ? ? ? 我们再看下一个全量同步的工作细节: ? ? ? ? master 开启一个后台保存进程,以便于生产一个 RDB 文件。同时它开始缓冲所有从客户端接收到的新的写入命令。当后台保存完成时, master 将数据集文件传输给 slave, slave将之保存在磁盘上,然后加载文件到内存。再然后 master 会发送所有缓冲的命令发给 slave。这个过程以指令流的形式完成并且和 Redis 协议本身的格式相同。你可以用 telnet 自己进行尝试。在服务器正在做一些工作的同时连接到 Redis 端口并发出 SYNC?命令。你将会看到一个批量传输,并且之后每一个 master 接收到的命令都将在 telnet 回话中被重新发出。事实上 SYNC 是一个旧协议,在新的 Redis 实例中已经不再被使用,但是其仍然向后兼容:但它不允许部分重同步,所以现在?PSYNC?被用来替代 SYNC。 ????????之前说过,当主从之间的连接因为一些原因崩溃之后, slave 能够自动重连。如果 master 收到了多个 slave 要求同步的请求,它会执行一个单独的后台保存,以便于为多个 slave 服务。 ? ? ? ? 好了,Redis的主从复制就讲到这里,我们大概了解了主从复制的原理、如何保证数据的安全以及其的工作方式。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 23:11:50- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |