(四)Redis主从复制

关于主从复制



和MySQL的主从一样,这种结构主要是为了数据冗余和提示性能。Redis的主从同步是异步进行的,所以并不会影响主的处理性能。在数据持久化方面,可以把这个任务交给从服务器来做,这样可以减小主服务器的负担。

在主从结构中,一般把从服务器设置为只读模式,这样也是为了更好的保持数据一致性。

Redis主从同步有两种方式,一种是全同步和部分同步,从服务器第一次(之前从来没有过)和主服务器建立连接的时候是进行全同步的,以后会进行部分同步,只有当部分同步不成功时才会进行全同步。不过任何时候从服务器都可以直接请求全同步。

一般情况下主从都是高频的部分同步(也称增量同步),也就是第一次全同步后,不出其他意外的话下,主服务器会把缓冲区的内容同步到从服务器上。请注意,并不是把数据直接给从服务器,而是主服务器把数据先放到自己的内存缓冲区,然后从缓冲区给从服务器。那么如果主从直接的增量同步不成功,将会执行全同步,也就是复制dump.rdb文件和缓冲区增量数据给从服务器。

过程是:主服务器发现数据有写操作,那么就把变更记录写入缓冲区和所有已连接的从服务器。

下面来说一下全同步过程:

  • 从服务器会定期向主服务器发送PSYNC命令,从服务器提供master_runnid(希望获取数据的MASTER的ID信息)和offset(偏移量信息)信息,主服务器接收信息后会进行验证,如果两者都验证通过就会进行部分同步,如果offset验证未通过则会进行全同步。
  • 半同步:主服务器使用从服务器发来的偏移量offset,定位到自己的缓冲区内,然后将增量数据同步到从服务器上。
  • 全同步:半同步失败后主服务器会向从服务器发送全同步返回信息,然后调用BGSAVE(Backgroundsave,其实就是执行save命令)指令来创建一个子进程,用于保存内存中的数据到磁盘,也就是将数据写入RDB文件中。在开始写入RDB文件的那一刻之后的内存数据库变化会继续在内存中发生。

RDB写入完成后,主服务器会将RDB文件传送给从服务器,从服务器把该文件保存到磁盘中,然后再加载到从服务器的内存中。加载完成之后,主服务器会将RDB写入到从数据库加载完成这段时间发生的数据变化再通过redis协议的格式发送给从服务器。

如果有多个从服务器给主服务器发送SYNC指令,对于主服务器来说只会执行一次BGSAVE操作,然后把这个保存的RDB文件发给多个从服务器。

如果同步过程中出现网络中断,那么在2.8版本以后的处理方式是并不会像之前版本那样重新同步所有,而是会进行增量同步。

从服务器为什么会有master_runid和offset呢?因为从服务器与主服务器断开前会暂存这些信息,目的也是为了后面的数据同步需要。

环境说明



按照之前的步骤安装2台服务器:

Redis01 172.16.100.10
Redis02 172.16.100.20

开启防火墙端口和关闭seLinux



打开6379端口

关闭selinux

然后重启iptables服务。

修改配置文件



修改主服务器配置文件,如果不需要密码验证则无需修改此文件,修改后请重新启动Redis服务

修改从服务器配置文件,

找到slaveof字段,如果主服务器有密码验证,则要配置相同的密码,如下如:

验证主从复制



在主上设置一个键值数据

在从上获取一个键值数据

通过info查看连接信息,在主上执行下面的命令:

不停机切换



Redis的主从模式中的主与从没有什么区别,唯一的区别就是在这个模式下从服务器是不允许被写入数据的,看下图:

我在从服务器上做一个SET操作,提示如下

其实主从切换就是把从变成主,主变成从。基本步骤如下:

设置从服务器可写:

修改配置文件,如下图:

修改完成后,重启从服务器。

修改和重启从服务器后,从服务器依然可以从主服务器去同步数据,这一点不用担心。

把应用访问的IP更换成从服务器的IP

这一步忽略,实际上就是业务对数据库访问IP的变更。

把从服务器设置为主服务器:

在从上执行这个命令

上面这个命令是将从服务器关闭复制功能,将从服务器作为独立的主服务器运行。这个很好理解,就是它不去同步其他的数据库服务器了,自己单独运行,那么自然就是主服务器。

上面的命令还有其他用法就是动态切换主服务器,比如如果我们要临时让从服务器去其他主服务器去同步数据,可以这样运行,如下图:

slaveof MasterIP MasterPort

注意:假如当前服务器已经是A服务器的从服务器,而你又使用该命令让当前服务器成为B服务器的从服务器,也就是从B同步数据,那么当前服务器将丢弃之前同步的就数据,开始对新的主服务器进行同步。

这个命令只是临时生效,临时覆盖配置文件中的slaveof设置,重启后恢复。

验证一下复制是否停止:

在原来的主服务器上运行info命令,如下显示:

虽然角色是主,但是SLAVE的连接已经没有了

我们做一个SET操作,然后在原来的从服务器(Redis02)上执行一下GET操作,看看是否还可以获取数值:

可以看到无法获取。

在Redis02上执行info命令看看结果:

显示它自己已经变成主了。

通过上述的操作我们就可以替换原来的主服务器或者在主服务器失败的时候可以手动切换

时间: 2024-12-14 00:33:14

(四)Redis主从复制的相关文章

构建高性能数据库缓存之redis主从复制

一.什么是redis主从复制? 主从复制,当用户往Master端写入数据时,通过Redis Sync机制将数据文件发送至Slave,Slave也会执行相同的操作确保数据一致:且实现Redis的主从复制非常简单. 二.redis主从复制特点 1.同一个Master可以拥有多个Slaves. 2.Master下的Slave还可以接受同一架构中其它slave的链接与同步请求,实现数据的级联复制,即Master->Slave->Slave模式: 3.Master以非阻塞的方式同步数据至slave,这将

Redis主从复制

一.Redis的Replication 优点:读写分离 下面的列表清楚的解释了Redis Replication的特点和优势.    1). 同一个Master可以同步多个Slaves.    2). Slave同样可以接受其它Slaves的连接和同步请求,这样可以有效的分载Master的同步压力.因此我们可以将Redis的Replication架构视为图结构.    3). Master Server是以非阻塞的方式为Slaves提供服务.所以在Master-Slave同步期间,客户端仍然可以

配置Redis主从复制

[构建高性能数据库缓存之redis主从复制][http://database.51cto.com/art/201407/444555.htm] 一.什么是redis主从复制? 主从复制,当用户往Master端写入数据时,通过Redis Sync机制将数据文件发送至Slave,Slave也会执行相同的操作确保数据一致:且实现Redis的主从复制非常简单. 二.redis主从复制特点 1.同一个Master可以拥有多个Slaves. 2.Master下的Slave还可以接受同一架构中其它slave的

NoSQL初探之人人都爱Redis:(4)Redis主从复制架构初步探索

一.主从复制架构简介 通过前面几篇的介绍中,我们都是在单机上使用Redis进行相关的实践操作,从本篇起,我们将初步探索一下Redis的集群,而集群中最经典的架构便是主从复制架构.那么,我们首先来了解一下神马是主从复制架构? 1.1 源于关系数据库的读写分离 随着网站业务的不断发展,用户量的不断增加,数据量也成倍的增长,数据库的访问量也呈线性地增长.特别是在用户访问高峰期间,并发访问量突然增大,数据库的负载压力也会增大,如果架构方案不够健壮,那么数据库服务器很有可能在高并发访问负载压力下宕机,造成

redis主从复制故障转移

Redis主从复制与故障切换 目录 目录1 一.概述1 二. 实验目的2 三.试验环境2 四. 说明2 五. 拓扑2 六. 实施步骤2 6.1.分别安装redis2.8.32 6.2.配置主从同步3 6.3.配置主从故障切换4 七. 注意事项4 一.概述 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. Redis支持主从同步.数据可以从主服务器向任意数量的从服务器上同步,同步使用的是发布/订阅机制. Re

【转】 NoSQL初探之人人都爱Redis:(4)Redis主从复制架构初步探索

一.主从复制架构简介 通过前面几篇的介绍中,我们都是在单机上使用Redis进行相关的实践操作,从本篇起,我们将初步探索一下Redis的集群,而集群中最经典的架构便是主从复制架构.那么,我们首先来了解一下神马是主从复制架构? 1.1 源于关系数据库的读写分离 随着网站业务的不断发展,用户量的不断增加,数据量也成倍的增长,数据库的访问量也呈线性地增长.特别是在用户访问高峰期间,并发访问量突然增大,数据库的负载压力也会增大,如果架构方案不够健壮,那么数据库服务器很有可能在高并发访问负载压力下宕机,造成

深入剖析Redis主从复制

[http://sofar.blog.51cto.com/353572/1413024/] [Redis 主从复制的内部协议和机制] 一.主从概述 Redis 支持 Master-Slave(主从)模式,Redis Server 可以设置为另一个 Redis Server 的主机(从机),从机定期从主机拿数据.特殊的,一个从机同样可以设置为一个 Redis Server 的主机,这样一来 Master-Slave 的分布看起来就是一个有向无环图 DAG,如此形成 Redis Server 集群,

redis主从复制及keepalived方式实现高可用测试

前言: redis高可用有Sentinel.Cluster等多种方式,本文主要介绍keepalived方式. 架构: 配置: hostname ip os redis版本 keepalived版本 备注 redis-master 172.27.9.30 Centos7.3.1611 4.0.10 1.3.5 关闭防火墙和selinux redis-slave 172.27.9.31 Centos7.3.1611 4.0.10 1.3.5 关闭防火墙和selinux 一.redis安装 redis

读完这篇文章,就基本搞定了Redis主从复制

在前面的两篇文章中,我们分别介绍了Redis的内存模型和Redis持久化技术及方案选择. 在之前的文章中曾提到过,Redis高可用的方案包括持久化.主从复制(及读写分离).哨兵和集群.其中持久化侧重解决的是Redis数据的单机备份问题(从内存到硬盘的备份):而主从复制则侧重解决数据的多机热备.此外,主从复制还可以实现负载均衡和故障恢复. 在本文中,我们将详细介绍Redis主从复制的方方面面,包括:如何使用主从复制.主从复制的原理(重点是全量复制和部分复制.以及心跳机制).实际应用中需要注意的问题

深入学习Redis主从复制

一.主从复制概述 主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器.前者称为主节点(master),后者称为从节点(slave):数据的复制是单向的,只能由主节点到从节点. 默认情况下,每台Redis服务器都是主节点:且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点. 主从复制的作用 主从复制的作用主要包括: 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式. 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障