Redis_集群_主从模式_哨兵模式_1|学习笔记

简介: 快速学习 Redis_集群_主从模式_哨兵模式_1

开发者学堂课程【Redis 数据库入门Redis_集群_主从模式_哨兵模式_1】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/15/detail/58


Redis_集群_主从模式_哨兵模式_1


内容介绍:

一、主从复制的功能

二、主从复制的运行方式

三、主从复制的创建

四、主从复制的问题


Redis 可以多个节点共同展开服务,成为 Redis 集群。Redis 集群分为主从复制Replication、高可用 Sentinel、集群 Cluster 与分布式 twemproxy 四类。


一、主从复制的功能

1、“主”与“从”的含义

提到主从复制,可能会首先想到 master 及多个 slave,而此处的“主从”与分度计算里的“主从”不同,分度计算里的“主”是做调度的,而“从”是真正进行实际操作的。

而 Redis 数据库里的“主从”要指的是一个“主”,以及多个“从”来复制上面的数据。

一个 Redis 服务可有多个该服务的复制品。Redis 服务称为 Master,其他的复制品称为Slaves。

2、各自的功能

只要网络正常连通,Master 都会将自己的数据更新同步给 Slave,保持主从数据之间的同步。

只有 Master 可以执行写命令,而 Slave 只能执行读命令,这是默认的。可用下图表示:

image.png

即可以一个主服务器复制一个从服务器,也可以一个主服务器复制A、B、C多个从服务器,但是从服务器只能读命令,主服务器才能写命令。

总之,主从复制里,从服务器分担了读命令的压力,即可以从4个机器上面来读,而写还是原来的一个主服务器。


二、主从复制的运行方式

1、从服务器执行客户端发送的读命令。

读命令有 GET、LARANGE、SMEMMBERS、HGET、ZRANGE 等。客户端可以连接Slave 执行读请求来降低 Master 的读压力。

假设之前如果只有一个主服务器,读写命令都是主服务器来完成,而如果有多个从服务器,可以从不同机器上面来读命令,当然主服务器也可以读命令,它兼具读、写命令的功能。

2、主从复制创建方式

(1)通过 redis-server--slaveof<master-ip><master-port> 配置

redis-server 脚本可以启动 redis 的服务;--slaveof 可以让服务器启动的时作为一个从服务器;<master-ip> 是主服务器的 Ip,<master-port> 是主服务器的端口。这样在服务器启动时候就可以自动创建从服务器。

如:执行 redis-server--port 6380 --slaveof 127.0.0.1 6379

进入服务器配置页面,之前已经配置过环境变量,因此可用直接写 redis-server,编辑启动端口--port 6380,编辑从服务器所从属的主服务器对象的 IP 及端口--slaveof 127.0.0.1 6379,即 redis-server--port 6380 --slaveof 127.0.0.1 6379。

启动页面中显示,启动的 Redis 服务器端口是6380,版本是2.8.18,是64位的服务器,且为单节点模式(in stand alone mode)。

启用后的具体操作可以在日志中查询。首先Connecting to Master 127.0.0.1 6379,即连接端口为6379的主服务器;接下来MASTER <->SLAVE sync started,即同步主从服务器之间的数据;然后Non blocking connect for SYNC fired the event,Master replied to PING,replication can continue… 实现了主从服务器之间通讯,开始数据同步。下面的内容显示同步数据量。

也可以再一个客户端连接进来。执行redis-cli -p 6380(-p 6380为连接的端口,若不写这一端口名,则默认连接到本地)-n(可以设置连接的数据库,不设置则默认为0号数据库)。回车之后则进入6380端口,作为从服务器。该从服务器中已经有了之前从主服务器中。输入 keys,即可发现之前操作的数据仍未丢失。

注意从服务器不能写命令。如执行 set mykey 12,系统报错,显示 READONLY,即从服务器是只读的。

(2)启动一个服务之后,连到该服务中,通过 slaveof 命令将它切换为从服务器。

停掉先前的操作,退出之前的客户端,确认监控端口只有6379,即只有主服务器还在。再次启动 redis-server--port 6380,此时启动的是6380的端口服务,接着我再连接到该端口进去,执行 redis-cli -p 6380,输入 keys *,发现数据已经实现了同步。

再次尝试写入命令 set mykey 123,此时系统显示“ok”。只有主服务器才能写命令,而现在成功写入了命令,说明此时的服务器是主服务器。

①需要将其变为从服务器,输入--slaveof 127.0.0.1 6379接入服务器IP和端口。尝试再次写入命令 set newkey 456,系统报错。因为此时该服务器切换为了从服务器。切换为从服务器之后会同步数据,那 mykey 的数据就不存在了。输入 keys*验证缺失没有 mykey 的数据。因为其作为从服务器会同步主服务器的数据,主服务器没有该数据,自然同步数据后的从服务器也没有该数据。

②我们再尝试将该服务器变回主服务器,输入命令 SLAVEOF NO ONE,表明该服务器不是任何服务器的从服务器,即主服务器。此时又可以往里面去设置新的key。先输入 keys* 查看 mykey 是否存在,结果显示不存在,因为刚刚其作为一个从服务器时从主服务器同步数据时没有 mykey 的数据,相当于刚才设置的 mykey 数据了就不存在了。此时变为主服务器之后又可以重新设置。

(3)配置方式

启动时可以读取通过配置文件作为从服务器。如在 redis-server--port6380 对应的配置文件里写 slaveof??即可以启动起来作为从服务器。

输入 vim 6380.conf,slaveof 127.0.0.1 6379,保存退出。先把该服务停掉,查询端口确认只有6379,输入 redis-server 6380.conf,用该文件来启动,显示为Increased maximum number of open files to 10032(It was originally set to 1024),Creating Server TCP listening socket *:6379:bind:Adress already in use。

此处其默认端口是6379,而此时端口还是只有6379,说明没有成功启动,原因在于6379已经bind。默认的配置文件里面的port端口是6379,即此时应添加一条port 6380,完整的命令如下:

vim 6380.conf

slaveof 127.0.0.1 6379

redis-server 6380.conf

port 6380

此时点击回车即可作为一个 Slave 启动。

 

三、主从复制的演示

1、redis-server--slaveof<master-ip><master-port>

# redis-server--port 6380 --slaveof 127.0.0.1 6379

# redis-cli -p 6380 -n 0

#测试 Master 和 Slave 的读写

2、SLAVEOF 命令

# 从服务器连接到192.268.56.201的6379 端口

# redis > SLAVEOF 192.268.56.201 6379

# redis > SLAVEOF NO ONE,将服务器重新恢复到 Master,不会丢失已同步数据

# redis > SET n2key S

# redis > get n2key

# redis > keys*

# redis > SLAVEOF 192.268.56.201 6379

# redis > keys*

3、配置方式

# 在 node2 节点安装配置 redis 服务,修改配置文件

# SLAVEOF 192.268.56.201 6379

# 启动服务,观察和node1的同步

# redis > SLAVEOF NO ONE,观察是否可以set、keys*


四、主从复制的问题

1、一个 Master 可以有多个 Slave;

2、Slave 下线,只是读请求的处理性能下降;

3、Master 下线,写请求无法执行;

4、其中一台 Slave 使用 SLAVEOF NO ONE 成为 Master,其他 Slaves 执行 SLAVEOF 命令指向这个新的 Master,并从它获得数据同步;

以上过程是手动的,能够实现自动则需要 Sentine 哨兵,实现故障转移 Failover 操作。

相关文章
|
4月前
|
存储 负载均衡 NoSQL
【赵渝强老师】Redis Cluster分布式集群
Redis Cluster是Redis的分布式存储解决方案,通过哈希槽(slot)实现数据分片,支持水平扩展,具备高可用性和负载均衡能力,适用于大规模数据场景。
373 2
|
2月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
503 5
|
3月前
|
存储 监控 NoSQL
Redis高可用架构全解析:从主从复制到集群方案
Redis高可用确保服务持续稳定,避免单点故障导致数据丢失或业务中断。通过主从复制实现数据冗余,哨兵模式支持自动故障转移,Cluster集群则提供分布式数据分片与水平扩展,三者层层递进,保障读写分离、容灾切换与大规模数据存储,构建高性能、高可靠的Redis架构体系。
|
8月前
|
存储 NoSQL 数据库
Redis 逻辑数据库与集群模式详解
Redis 是高性能内存键值数据库,广泛用于缓存与实时数据处理。本文深入解析 Redis 逻辑数据库与集群模式:逻辑数据库提供16个独立存储空间,适合小规模隔离;集群模式通过分布式架构支持高并发和大数据量,但仅支持 database 0。文章对比两者特性,讲解配置与实践注意事项,并探讨持久化及性能优化策略,助你根据需求选择最佳方案。
316 5
|
5月前
|
负载均衡 NoSQL Redis
【赵渝强老师】Redis的主从复制集群
Redis主从复制是指将一台Redis服务器的数据复制到其他Redis服务器,实现数据热备份、故障恢复、负载均衡及高可用架构的基础。主节点负责写操作,从节点同步数据并可提供读服务,提升并发处理能力。
167 5
|
4月前
|
存储 NoSQL 算法
Redis的集群架构与使用经验
本文介绍了Redis的集群架构与使用经验,包括主从复制、哨兵集群及Cluster分片集群的应用场景与实现原理。内容涵盖Redis主从同步机制、数据分片存储方式、事务支持及与Memcached的区别,并讨论了Redis内存用尽时的处理策略。适用于了解Redis高可用与性能优化方案。
|
8月前
|
存储 NoSQL Redis
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 +  无锁架构 +  EDA架构  + 异步日志 + 集群架构
|
9月前
|
存储 NoSQL 算法
Redis分片集群中数据是怎么存储和读取的 ?
Redis集群采用的算法是哈希槽分区算法。Redis集群中有16384个哈希槽(槽的范围是 0 -16383,哈希槽),将不同的哈希槽分布在不同的Redis节点上面进行管理,也就是说每个Redis节点只负责一部分的哈希槽。在对数据进行操作的时候,集群会对使用CRC16算法对key进行计算并对16384取模(slot = CRC16(key)%16383),得到的结果就是 Key-Value 所放入的槽,通过这个值,去找到对应的槽所对应的Redis节点,然后直接到这个对应的节点上进行存取操作
|
10月前
|
缓存 NoSQL Redis
Redis原理—3.复制、哨兵和集群
详细介绍了Redis的复制原理、哨兵原理和集群原理。
|
机器学习/深度学习 NoSQL Redis
Redis高可用之集群架构(第三部分)
Redis高可用之集群架构(第三部分)