使用Docker快速搭建Redis主从复制

news2024/11/9 3:46:08

目录

    • 一、前言
    • 二、拉取Redis镜像
    • 三、创建挂载目录和添加配置文件
      • 3.1、主节点(6379)
      • 3.2、从节点(6380)
      • 3.3、从节点(6381)
    • 四、启动Redis容器
      • 4.1、主节点(6379)
      • 4.2、从节点(6380)
      • 4.3、从节点(6381)
      • 4.4、启动命令参数介绍
    • 五、查看各节点主从信息
      • 5.1、主节点(6379)
      • 5.2、从节点(6380)
      • 5.3、从节点(6381)
    • 六、测试主从复制效果
    • 七、Redis主从工作原理
    • 八、主从复制风暴问题解决

一、前言

      本文介绍如何快速使用Docker搭建Redis主从复制环境,线上环境更加推荐直接部署,这里会搭建一主两从,全部搭建在一台主机,会使用Redis6.0版本,分别使用端口号 主节点(6379)、从节点(6380、6381)。

Redis主从复制作用和优缺点

  • 作用
    • 主从复制是Redis集群中最简单的一种高可用方案,配置也简单,从节点同步主节点数据,一般主节点对外提供读写,从节点只对外提供读,也就是常说的读写分离,一般业务读操作占整个Redis请求的90%以上,读写分离架构可以有多个从节点,从节点分担主节点的读操作压力,提升整体并发量。
  • 优点
    • 配置简单
    • 显著提升整体并发量
    • 能做到数据备份的效果,避免主节点因意外情况损坏缓存全部丢失
  • 缺点
    • 主节点宕机会导致整个集群无法写,需要重新启动主节点或者手动重新指定一台主节点,针对这点Redis还提供了哨兵模式和Cluster可以解决这个问题

主从复制结构图:
在这里插入图片描述

二、拉取Redis镜像

docker pull redis:6.0.20

三、创建挂载目录和添加配置文件

3.1、主节点(6379)

  • 添加节点挂载目录
mkdir -p /home/docker/redis6379/conf
mkdir -p /home/docker/redis6379/data 
  • 添加配置文件
vi /home/docker/redis6379/conf/redis.conf

将以下配置写入配置文件

# 服务端口 默认6379
prot 6379
# 关闭保护模式,允许远程连接
protected-mode no
# 密码
requirepass 123456

3.2、从节点(6380)

  • 添加节点挂载目录
mkdir -p /home/docker/redis6380/conf
mkdir -p /home/docker/redis6380/data 
  • 添加配置文件
vi /home/docker/redis6380/conf/redis.conf

将以下配置写入配置文件

# 服务端口 默认6379
prot 6380
# 关闭保护模式,允许远程连接
protected-mode no
# 密码
requirepass 123456
# 主节点密码
masterauth 123456

# 配置主从复制 从节点默认只读
## redis5.0后新版本配置
replicaof 172.16.8.186 6379
## redis5.0之前配置,新版本Redis也还可以用,我部署时确定6.0版本还是可用的
# slaveof 172.16.8.186 6379

3.3、从节点(6381)

  • 添加节点挂载目录
mkdir -p /home/docker/redis6381/conf
mkdir -p /home/docker/redis6381/data 
  • 添加配置文件
vi /home/docker/redis6381/conf/redis.conf

将以下配置写入配置文件

# 服务端口 默认6381
prot 6381
# 关闭保护模式,允许远程连接
protected-mode no
# 密码
requirepass 123456
# 主节点密码
masterauth 123456

# 配置主从复制 从节点默认只读
## redis5.0后新版本配置
replicaof 172.16.8.186 6379
## redis5.0之前配置,新版本Redis也还可以用,我部署时确定6.0版本还是可用的
# slaveof 172.16.8.186 6379

四、启动Redis容器

4.1、主节点(6379)

docker run -d \
-p 6379:6379 \
--name redis6379 \
--restart always \
--privileged=true \
-v /home/docker/redis6379/conf/redis.conf:/etc/redis/redis.conf \
-v /home/docker/redis6379/data:/data \
redis:6.0.20 \
redis-server /etc/redis/redis.conf

4.2、从节点(6380)

docker run -d \
-p 6380:6380 \
--name redis6380 \
--restart always \
--privileged=true \
-v /home/docker/redis6380/conf/redis.conf:/etc/redis/redis.conf \
-v /home/docker/redis6380/data:/data \
redis:6.0.20 \
redis-server /etc/redis/redis.conf

4.3、从节点(6381)

docker run -d \
-p 6381:6381 \
--name redis6381 \
--restart always \
--privileged=true \
-v /home/docker/redis6381/conf/redis.conf:/etc/redis/redis.conf \
-v /home/docker/redis6381/data:/data \
redis:6.0.20 \
redis-server /etc/redis/redis.conf

4.4、启动命令参数介绍

-d:后台运行
-p 63xx:63xx:指定宿主机端口与容器端口映射关系
–name redis63xx:创建的容器名称
–restart=always:容器开机自启
–privileged=true:获取宿主机root权限
-v /home/docker/redis63xx/conf/redis.conf:/etc/redis/redis.conf:映射配置文件目录,宿主机:容器
-v /home/docker/redis63xx/data:/data:映射数据目录,宿主机:容器
redis:6.0.20:使用的镜像
redis-server /etc/redis/redis.conf:指定配置文件启动redis-server进程

五、查看各节点主从信息

5.1、主节点(6379)

  • 连接主节点redis
# redis6379:容器名称、 redis-cli:redis自带客户端命令、 -a 123456:指定redis密码登录
docker exec -it redis6379 redis-cli -a 123456
  • 查看节点replication信息
127.0.0.1:6379> info replication

在这里插入图片描述

5.2、从节点(6380)

  • 连接主节点redis
# redis6380:容器名称、 redis-cli:redis自带客户端命令、-p 6380:指定redis端口、 -a 123456:指定redis密码登录
docker exec -it redis6380 redis-cli -p 6380 -a 123456
  • 查看节点replication信息
127.0.0.1:6380> info replication

在这里插入图片描述

5.3、从节点(6381)

  • 连接主节点redis
# redis6381:容器名称、 redis-cli:redis自带客户端命令、-p 6381:指定redis端口、 -a 123456:指定redis密码登录
docker exec -it redis6381 redis-cli -p 6381 -a 123456
  • 查看节点replication信息
127.0.0.1:6381> info replication

六、测试主从复制效果

  • 主节点插入数据
127.0.0.1:6379> set names kerwin

在这里插入图片描述

  • 从节点查看数据
127.0.0.1:6380> get names

在这里插入图片描述

127.0.0.1:6381> get names

在这里插入图片描述

  • 从节点写数据测试
127.0.0.1:6380> set names kerwin2

从节点默认只读,无法写入数据
在这里插入图片描述

七、Redis主从工作原理

      如果你为master配置了一个slave,不管这个slave是否是第一次连接上Master,它都会发送一个PSYNC命令给master请求复制数据。

      master收到PSYNC命令后,会在后台进行数据持久化通过bgsave生成最新的rdb快照文件,持久化期间,master会继续接收客户端的请求,它会把这些可能修改数据集的请求缓存在内存中。当持久化进行完毕以后,master会把这份rdb文件数据集发送给slave,slave会把接收到的数据进行持久化生成rdb,然后再加载到内存中。然后,master再将之前缓存在内存中的命令发送给slave。当master与slave之间的连接由于某些原因而断开时,slave能够自动重连Master,如果master收到了多个slave并发连接请求,它只会进行一次持久化,而不是一个连接一次,然后再把这一份持久化的数据发送给多个并发连接的slave。

八、主从复制风暴问题解决

      主从复制风暴问题是因为多个从节点同时复制主节点导致主节点压力过大,可以让新节点复制从节点数据,类似数结构,可以分担主节点同步压力。

实际操作只需要将主从复制的配置调整成从节点即可。

# 配置主从复制 从节点默认只读
## redis5.0后新版本配置
replicaof 172.16.8.186 6381

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1114313.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

淘宝API访问入口未授权怎么解决?

没有授权应该是读取数据失败或是网络传输不稳定。 API的主要功能是提供应用程序与开发人员以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。提供API所定义的功能的软件称作此API的实现。API是一种接口,故而是一种抽象。 …

火山引擎实时、低延时拥塞控制算法的优化实践

摘要 火山引擎智能拥塞控制算法 VICC(Volcano Intelligent Congestion Control)是一种自适应的拥塞控制算法,旨在解决全球不同网络环境下,不同音视频应用对带宽利用率和延时的差异化要求。它结合了传统拥塞控制算法(如…

YCSB and TPC-C on MySQL(避免重复load)

一、编译安装MySQL 下载mysql5.7.28源码 https://downloads.mysql.com/archives/community/ Select Operating System 选择 Source Code Select OS version 选择 All Operating Systems 选择带有boost的版本 安装系统包 apt -y install make cmake gcc g perl bison libai…

网站批量替换关键词方法

注意替换操作之前先对文件做好备份 1.下载http://downinfo.myhostadmin.net/ultrareplace5.02.rar 解压出来,运行UltraReplace.exe 2.点击菜单栏中的配置,全选所有文件类型,或者根据自己的需求选择部分,如htm、html、php、asp等 3.若替换单个文件,点击文件,若是要…

月薪15-25k,急招Web安全研究员

更多岗位招聘信息 请wx搜索【知了内推】小程序

CentOS 系统安装和使用Docker服务

系统环境 使用下面的命令,可以查看CentOS系统的版本。 lsb_release -a结果: 说明我的系统是7.9.2009版本的 安装Docker服务 依次执行下面的指令: yum install -y yum-utilsyum install -y docker即可安装docker服务 如果这样安装不成功…

python+selenium的web自动化上传操作的实现

一、关于上传操作 上传有两种情况: 如果是input可以直接输入路径的,那么直接使用send_keys(文件路径)输入路径即可; 非input标签的上传,则需要借助第三方工具:第三方库 pywin32、第三方工具pyautogui等等。 那这里…

Android问题笔记 - ViewPager嵌套RecyclerView,降低ViewPager灵敏度

点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例点击跳转>软考全系列 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&…

第二证券:建仓的几种方式?

建仓是出资者在证券商场中最根本的出资行为之一。简单来说,就是买入股票或基金,以期取得股价上涨所带来的收益。建仓是证券出资的第一步,也是最重要的一步。在选择建仓方法之前,了解常见的几种方法是很有必要的。 一、现金买入 现…

“技术”已成为京东持续“低价”的底气和重要动能

监制 | 何玺 排版 | 叶媛 10月19日,京东宣布今年的双十一将在10月23日晚8点正式开启。 今年双十一,京东向全体消费者做出了两项承诺:一是所有商品均“现货开卖”,无需等待。二是“全程价保”覆盖8亿商品,让消费者真正…

【学习草稿】bert文本分类

https://github.com/google-research/bert https://github.com/CyberZHG/keras-bert 在 BERT 中,每个单词的嵌入向量由三部分组成: Token 嵌入向量:该向量是 WordPiece 分词算法得到的子单词 ID 对应的嵌入向量。 Segment 嵌入向量&#x…

SequenceFile、元数据操作与MapReduce单词计数

文章目录 SequenceFile、元数据操作与MapReduce单词计数一、实验目标二、实验要求三、实验内容四、实验步骤附:系列文章 SequenceFile、元数据操作与MapReduce单词计数 一、实验目标 熟练掌握hadoop操作指令及HDFS命令行接口掌握HDFS SequenceFile读写操作掌握Map…

生鲜蔬果社区团购小程序商城的作用是什么

摆在生鲜蔬果商家面前的难题也非常明显,商家缺少营销方式,难以满足基本营销需求,经营没有方向,订单难以管理,商品也难以管理,难以打通引流-转化-留存-复购-裂变-分享路径,线下门店整体而言经营压…

【Ubuntu】Ubuntu20.04安装EasyConnect后打不开的问题。

1 安装过程 (1) 软件下载 EasyConnect下载地址 (2) 安装 dpkg -i EasyConnect_x64_7_6_7_3.deb 如果需要卸载的话,可使用如下命令: dpkg -r EasyConnect 双击EasyConnect图标,发现出现打不开的问题。 2 解决方法 首先,先看看是什么原因打不开呢? gedit /usr/share…

基于轻量级yolov5n+CBAM开发构建全球小麦麦穗智能检测计数系统

本文是前文的延伸内容,前文主要是对单个麦穗上麦穗颗粒的检测计数,这里本文的主要目的是要对麦穗进行智能化自动化的检测计数,话不多说,简单先看下效果: 接下来看下数据集: YOLO格式标注文件如下所示&…

社区版Visual Studio通过安装开源插件Fine Code Coverage实现单元测试代码覆盖率统计

1、在Visual Studio上安装Fine Code Coverage插件 扩展->管理扩展->联机 搜索到Fine Code Coverage插件,选中进行下载安装 2、修改Fine Code Coverage配置 如果单元测试框架用的是MSTest,一般需要修改插件配置,否则测试结果不正确 …

【深度学习】数据集最常见的问题及其解决方案

简介 如果您还没有听过,请告诉您一个事实,作为一名数据科学家,您应该始终站在一个角落跟你说:“你的结果与你的数据一样好。” 尝试通过提高模型能力来弥补糟糕的数据是许多人会犯的错误。这相当于你因为原来的汽车使用了劣质汽…

【Maven教程】(八):使用 Nexus 创建私服 ~

Maven 使用 Nexus 创建私服 1️⃣ Nexus简介2️⃣ 安装 Nexus2.1 下载 Nexus2.2 Bundle 方式安装 Nexus2.3 WAR 方式安装 Nexus2.4 登录 Nexus 3️⃣ Nexus 的仓库与仓库组3.1 Nexus 内置的仓库3.2 Nexus 仓库分类的概念3.3 创建 Nexus 宿主仓库3.4 创建 Nexus 代理仓库3.5 创…

跳动的文化:TikTok如何塑造多元社交内容?

在数字时代,社交媒体已成为塑造大众文化和社会趋势的强大工具。其中,TikTok崭露头角,以其独特的短视频平台在全球范围内赢得了数以亿计的用户。 TikTok不仅仅是一个娱乐应用,它还是一个文化引擎,重新定义着社交内容和…

一百九十二、Flume——Flume数据流监控工具Ganglia单机版安装

一、目的 在安装好Flume之后,需要用一个工具可以对Flume数据传输进行实时监控,这就是Ganglia 二、Ganglia介绍 Ganglia 由 gmond、gmetad 和 gweb 三部分组成。 (一)第一部分——gmond gmond(Ganglia Monitoring Da…