【2023】Redis主从复制模式集群

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 【2023】Redis主从复制模式集群
资源有限,本文使用Docker部署

🎶主从模式介绍

主从模式中,由一个主服务器和多个从服务器组成,写入主节点的数据会被复制到从节点上,这样一旦主节点出现故障,应用系统就能切换到从节点去读写数据,提升系统的可用性。

再采用主从复制模式里默认的读写分离机制,就能提升系统的缓存读写性能。

总结:

  • 提高系统可用性
  • 提升读写性能

主从模式简述:

当有应用向一台Redis服务器中写数据时,这个数据可以复制同步到一台或多台Redis服务器,这个数据源服务器被称为主服务器(master),其他服务器被称为从服务器(slave)。

结构图:

  • 一主一从

394e73acfcfe47999c908356931798f5 (1).png

一主多从

68a61c49c5c84bf08935b73e04c4a74a.png

🎶 搭建主从模式集群

🎶 使用命令搭建主从集群

  • 运行一个容器作为master节点,端口为6379
docker run -itd --name redis-master -p 6379:6379 redis:6.0 
  • 再运行一个容器作为slave节点,端口为6380(注意:因为在同一台宿主机,所以端口不能重复)
docker run -itd --name redis-slave -p 6380:6380 redis:6.0 
  • 查看master容器信息,找到该容器的IP地址,可以看出IP地址为172.17.0.2
# docker inspect redis-master | grep "IPAddress"
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAddress": "172.17.0.2",
  • 进入master容器,连接客户端,查看当前主从模式状态
# docker exec -it redis-master /bin/bash
root@dd22f11d3b8c:/data# redis-cli 
127.0.0.1:6379> INFO replication
# Replication
role:master
connected_slaves:0
  • 只需要信息的前几行能看到集群信息即可,可以看出此容器为主服务器,并且当前没有从服务器
  • 此时通过名称为从节点的容器进入查看集群状态应该是一样的,因为此时两者并没有关联
[root@localhost ~]# docker exec -it redis-slave /bin/bash
root@ff390708266d:/data# redis-cli 
127.0.0.1:6379> INFO replication
# Replication
role:master
connected_slaves:0
  • 在从节点输入以下命令,指定该节点为从节点
127.0.0.1:6379> SLAVEOF 172.17.0.2 6379
OK
  • 再次查看集群信息,发现可以看到集群状态,该容器已成为从节点,主节点为172.17.0.2
127.0.0.1:6379> INFO replication
# Replication
role:slave
master_host:172.17.0.2
master_port:6379
master_link_status:up
  • 回到redis-master容器上查看状态,确认集群状态
[root@localhost ~]# docker exec -it redis-master /bin/bash
root@dd22f11d3b8c:/data# redis-cli
127.0.0.1:6379> INFO replication
# Replication
role:master
connected_slaves:1
slave0:ip=172.17.0.3,port=6379,state=online,offset=364,lag=1
  • 至此集群搭建成功

如果还有其他的从节点,操作步骤同上

🎶 通过配置文件搭建主从模式集群

注意:将上个实验的容器删除,重新部署,所以名称相同

  • 同样创建主redis容器一个
docker run -itd --name redis-master -p 6379:6379 redis:6.0 
  • 创建从服务器的配置文件,并启动从服务器容器指定该配置文件
[root@localhost ~]# mkdir /data/redis/redisConf -p
[root@localhost ~]# vim /data/redis/redisConf/redisslave.conf
[root@localhost ~]# cat /data/redis/redisConf/redisslave.conf 
port 6380
slaveof 172.17.0.2 6379
[root@localhost ~]# docker run -itd --name redis-slave -v /data/redis/redisConf:/redisConfig:rw -p 6380:6380 redis:6.0 redis-server /redisConfig/redisslave.conf
  • 进入到slave容器连接服务器查看redis集群状态
[root@localhost redisConf]# docker exec -it redis-slave /bin/bash
root@0fea9993d4e3:/data# redis-cli -h 127.0.0.1 -p 6380
127.0.0.1:6380> INFO replication
# Replication
role:slave
master_host:172.17.0.2
master_port:6379
master_link_status:up
slave_read_only:1

至此,通过配置文件的redis主从集群已经配置完成

🎶配置读写分离

从主从服务器上通过info replication查看状态发现一行slave_read_only:1代表是只读的含义

在从服务器输入以下命令发现报错,也证明了是不可写的

127.0.0.1:6380> set test 100
(error) READONLY You can't write against a read only replica.

只需要在上例配置文件中加入slave-read-only no然后删除旧容器创建新容器即可生效,效果为可读可写

🎶 用心跳机制提高主从复制的可靠性

主从模式中,从服务器会默认以一秒一次的频率向主服务器发送REPLCONF ACK命令,依次来确保两者间连接通畅。

这种定时交互命令确保连接的机制就叫“心跳”机制。

可在主服务器通过以下命令查看到查看发送“心跳”间隔时间

[root@localhost redisConf]# docker exec -it redis-master /bin/bash
root@c9ced7408758:/data# redis-cli
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=172.17.0.3,port=6380,state=online,offset=1666,lag=0

lag=0说明是实时的,没有数据延迟或失败情况

在配置文件中加入以下两行可增加可靠性:

min-slaves-to-write 2
min-slaves-max-lag 15
  • 第一行代表从服务器至少由两个
  • 第二行代表如果lag值大于15秒,则不执行主从服务
  • 两者为的关系

🎶 用偏移量检查数据是否一致

在主服务器中通过info replication可查看数据偏移量的master_repl_offset数据

master_repl_offset:1666

然后在从服务器上查看是否一致,如果一致,就说明主从服务器间的数据是同步的。

在主服务器上创建一个键值对,然后再次查看,如果主从服务器的master_repl_offset还是相同说明数据同步成功。

本文内从整理自基于Docker的Redis入门与实践






相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
17天前
|
存储 NoSQL Redis
redis主从集群与分片集群的区别
主从集群通过主节点处理写操作并向从节点广播读操作,从节点处理读操作并复制主节点数据,优点在于提高读取性能、数据冗余及故障转移。分片集群则将数据分散存储于多节点,根据规则路由请求,优势在于横向扩展能力强,提升读写性能与存储容量,增强系统可用性和容错性。主从适用于简单场景,分片适合大规模高性能需求。
27 5
|
4月前
|
监控 NoSQL Redis
看完这篇就能弄懂Redis的集群的原理了
看完这篇就能弄懂Redis的集群的原理了
157 0
|
1月前
|
消息中间件 NoSQL Redis
【赵渝强老师】Redis消息的生产者消费者模式
消息队列在Redis中可通过List数据结构实现,支持发布者订阅者和生产者消费者两种模式。生产者通过`lpush`向List添加消息,消费者通过`rpop`或`brpop`消费消息,后者支持阻塞等待。示例代码展示了如何使用Redis的生产者消费者模式。
|
2月前
|
存储 缓存 NoSQL
大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等
大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等
73 4
|
2月前
|
存储 NoSQL 大数据
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
41 3
|
2月前
|
SQL 分布式计算 NoSQL
大数据-42 Redis 功能扩展 发布/订阅模式 事务相关的内容 Redis弱事务
大数据-42 Redis 功能扩展 发布/订阅模式 事务相关的内容 Redis弱事务
28 2
|
2月前
|
存储 缓存 NoSQL
大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点
大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点
71 1
|
3月前
|
NoSQL 网络协议 Redis
Redis的主从复制和哨兵模式
本文详细介绍了Redis的主从复制配置、原理(包括全量复制和增量复制)以及如何搭建一主二从的Redis集群,同时还探讨了Redis哨兵模式的概念、配置文件、以及如何配置一主二从三哨兵的Redis哨兵模式,以实现高可用性。
|
4月前
|
存储 缓存 NoSQL
Redis深度解析:部署模式、数据类型、存储模型与实战问题解决
Redis深度解析:部署模式、数据类型、存储模型与实战问题解决
|
4月前
|
存储 NoSQL Redis
Tair的发展问题之在Redis集群模式下,Lua脚本操作key面临什么问题,如何解决
Tair的发展问题之在Redis集群模式下,Lua脚本操作key面临什么问题,如何解决
下一篇
DataWorks