还用单机版?教你用Docker+Redis搭建主从复制多实例

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 以下文章来源于爱笑的架构师 ,作者雷架从华中科技大学硕士毕业,几年间浪迹于多个一线互联网大厂,具有多年开发实战经验。如果你热爱技术或者你不满足现状喜欢搞事情,那你不妨关注我,让我们一路同行,一起分享技术干货、交流面试技巧、吐槽职场故事。我有故事和酒,你来吗?

以下文章来源于爱笑的架构师 ,作者雷架

从华中科技大学硕士毕业,几年间浪迹于多个一线互联网大厂,具有多年开发实战经验。如果你热爱技术或者你不满足现状喜欢搞事情,那你不妨关注我,让我们一路同行,一起分享技术干货、交流面试技巧、吐槽职场故事。我有故事和酒,你来吗?


0. 目标

本地搭建三个redis实例(一主两备),实现效果:主实例插入数据备实例可以复制同步过去。

1. 安装和运行docker

docker安装步骤省略,大家可以从官网下载并安装。

检查docker是否运行成功:

docker info


出现回显表示运行成功,可以做下一步操作了。

2. 拉取redis镜像文件

执行以下命令默认拉取tag为latest的官方redis镜像

docker pull redis


3. 准备好redis配置文件redis.conf

下载链接:

https://pan.baidu.com/s/14tWHtk3mch3e3VlT9TYX1A 密码:q3uk

拷贝为3三份,如:redis01.conf, redis02.conf, redis03.conf

打开所有的配置文件,修改如下配置项:

  • 注释只监听本地选项,可以远程连接。#bind 127.0.0.1
  • 关闭保护模式 protected-mode no
  • 打开AOF持久化开关 appendonly yes

4. 启动redis实例

# 实例1
docker run -p 6381:6379 --name redis-server-01 -v /your/path/redis/conf/redis01.conf:/etc/redis/redis.conf -v /your/path/redis/data01:/data -d redis redis-server /etc/redis/redis.conf
# 实例2
docker run -p 6382:6379 --name redis-server-02 -v /your/path/redis/redis/conf/redis02.conf:/etc/redis/redis.conf -v /your/path/redis/data02:/data -d redis redis-server /etc/redis/redis.conf
# 实例3
docker run -p 6383:6379 --name redis-server-03 -v /your/path/redis/conf/redis03.conf:/etc/redis/redis.conf -v /your/path/redis/data03:/data -d redis redis-server /etc/redis/redis.conf


对以上命令简单解释:

  • 参数-p 6381:6379,6381表示宿主机端口,6379表示容器实例端口,意思是将容器实例端口映射到宿主机端口。
  • 参数--name redis-server-01,给容器实例命名。
  • 参数-v /your/path/redis/conf/redis01.conf:/etc/redis/redis.conf,冒号前是宿主机配置文件路径,冒号后是容器的配置文件路径,意思是将容器实例的配置路径映射到宿主机的路径。
  • 参数-v /your/path/redis/data01:/data,如上面意思相同。
  • 选项-d表示以后台形式运行实例。
  • 参数redis-server /etc/redis/redis.conf表示执行redis-server命令, /etc/redis/redis.conf表示以该配置文件启动redis实例,注意配置文件必须为redis-server命令的第一个参数。

5. 配置主从复制集群

检查实例运行状态:

docker ps


回显有三个redis实例即为正常。查询实例1:redis-server-01 运行的内部ip

docker inspect redis-server-01


通过回显可以看到:"IPAddress": "172.17.0.4" 我们将实例1规划为主,另外两个实例自然为备了,通过将主的ip和port配置在备的配置文件中即可实现主从复制的效果。

修改redis02.conf和redis03.conf配置文件,找到replicaof选项(redis5.0之前是slaveof),修改为:

replicaof 172.17.0.4 6379


修改完毕,重启实例2和实例3:

docker restart redis-server-02
docker restart redis-server-03


检查实例1的状态是否为主,并且挂载两个备实例:

docker exec -it redis-server-01 redis-cli
127.0.0.1:6379> info


回显如下表示主从复制配置成功:

# Replication
role:master
connected_slaves:2
slave0:ip=172.17.0.3,port=6379,state=online,offset=84,lag=1
slave1:ip=172.17.0.2,port=6379,state=online,offset=84,lag=1


6. 测试主从复制效果

连接redis实例1插入一条记录:

docker exec -it redis-server-01 redis-cli # 连接实例1
127.0.0.1:6379> set name ray  # 插入一条数据
OK  # 插入成功


连接redis实例2和实例3查看是否复制成功:

docker exec -it redis-server-02 redis-cli # 连接实例2
127.0.0.1:6379> get name
"ray"   # 可以查到,表明从实例已经将主实例的数据同步过来了


总结:搭建Redis主从复制实例需要有一点docker的基础,如果你对docker比较熟悉了,那搭建过程实在太容易了。没有docker基础,只要按照上面的命令逐个运行也可以100%成功哦。

本文就是愿天堂没有BUG给大家分享的内容,大家有收获的话可以分享下,想学习更多的话可以到微信公众号里找我,我等你哦。

相关文章
|
4月前
|
关系型数据库 应用服务中间件 nginx
Docker一键安装中间件(RocketMq、Nginx、MySql、Minio、Jenkins、Redis)
本系列脚本提供RocketMQ、Nginx、MySQL、MinIO、Jenkins和Redis的Docker一键安装与配置方案,适用于快速部署微服务基础环境。
kde
|
1月前
|
存储 NoSQL Redis
手把手教你用 Docker 部署 Redis
Redis是高性能内存数据库,支持多种数据结构,适用于缓存、消息队列等场景。本文介绍如何通过Docker快速拉取轩辕镜像并部署Redis,涵盖快速启动、持久化存储及docker-compose配置,助力开发者高效搭建稳定服务。
kde
573 7
|
1月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
305 5
|
2月前
|
存储 监控 NoSQL
Redis高可用架构全解析:从主从复制到集群方案
Redis高可用确保服务持续稳定,避免单点故障导致数据丢失或业务中断。通过主从复制实现数据冗余,哨兵模式支持自动故障转移,Cluster集群则提供分布式数据分片与水平扩展,三者层层递进,保障读写分离、容灾切换与大规模数据存储,构建高性能、高可靠的Redis架构体系。
|
2月前
|
存储 负载均衡 NoSQL
Redis主从复制
在分布式系统中,为解决单点故障和提升性能,常采用Redis主从复制架构。通过将数据复制到多个从节点,实现读写分离、负载均衡及高可用性,同时支持多种拓扑结构以适应不同场景需求。
|
4月前
|
负载均衡 NoSQL Redis
【赵渝强老师】Redis的主从复制集群
Redis主从复制是指将一台Redis服务器的数据复制到其他Redis服务器,实现数据热备份、故障恢复、负载均衡及高可用架构的基础。主节点负责写操作,从节点同步数据并可提供读服务,提升并发处理能力。
143 5
|
4月前
|
NoSQL Redis 数据安全/隐私保护
挂载配置文件以Docker启动Redis服务
以上步骤提供了一个高效且实用的方式来使用Docker启动并运行带有自定义配置的Redis服务。这些操作可以适用于开发、测试和生产环境,是一种灵活且可扩展的部署方案。通过挂载配置文件和数据卷,您可以轻松地管理和迁移您的Redis实例。
533 9
|
8月前
|
NoSQL Redis Docker
Docker——阿里云服务器利用docker搭建redis集群
本文详细记录了使用Docker搭建Redis集群的过程,包括检查Docker和Docker Compose的安装、创建Redis配置文件、编写`docker-compose.yml`文件、启动Redis节点、创建Redis集群的具体步骤,以及最终的验证方法。文章还提供了在多服务器环境下搭建Redis集群的注意事项,帮助读者全面了解 Redis 集群的部署流程。
919 68
|
6月前
|
存储 监控 NoSQL
Redis设计与实现——单机Redis实现
Redis 是一个高性能的键值存储系统,支持丰富的数据结构(字符串、列表、哈希等)。其核心由键空间、过期字典和阻塞/监控键组成,通过惰性删除与定期删除策略管理过期数据。持久化方面,Redis 提供 RDB 快照和 AOF 日志两种机制,分别适用于快速恢复和高数据安全性场景。RDB 以二进制格式保存数据库快照,AOF 则记录写操作命令并支持重写优化文件大小。 此外,Redis 支持多数据库切换、内存淘汰策略(如 LRU)、慢查询日志等功能,满足不同业务需求。在生产环境中,推荐结合 RDB 和 AOF 的混合持久化方式,兼顾性能与数据安全。
|
9月前
|
存储 NoSQL Redis
Docker 部署 Redis
在使用 Docker 部署 Redis 时,为实现数据持久化,需正确挂载容器内的数据目录到宿主机。推荐命令如下: ``` docker run -d --name redis -v /mnt/data/redis:/data -p 6379:6379 redis ``` 该命令将宿主机的 `/mnt/data/redis` 目录挂载到容器的 `/data` 目录,确保 Redis 数据持久化。此路径更通用,适合大多数场景。避免使用不匹配的挂载路径,如 `/var/lib/redis` 或 `/mnt/data/redis` 到非默认目录,以防止数据无法正确持久化。