redis的主从复制(docker方式快速入门和实战)

目录

一、主从复制简介

二、配置主从服务器

2.1使用配置文件的形式来主从复制

2.2使用纯代码的方式来进行主从复制;

2.3脱离主服务器

三、一些注意事项


一、主从复制简介


        主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。

        从 Redis 2.6 开始, 从服务器支持只读模式, 并且该模式为从服务器的默认模式。只读模式由 redis.conf 文件中的 slave-read-only 选项控制, 也可以通过 CONFIG SET parameter value (opens new window)命令来开启或关闭这个模式。只读从服务器会拒绝执行任何写命令, 所以不会出现因为操作失误而将数据不小心写入到了从服务器的情况。

        一个主服务器可以有多个从服务器,一个从服务器只能有一个主服务器,并且不支持主主复制。

        不仅主服务器可以有从服务器,从服务器也可以有自己的从服务器, 多个从服务器之间可以构成一个主从链。

      确认了主从关系之后,主服务器可以读也可以写,但是从服务器就只能读了。从服务器一旦确认主服务器,那么在第一次启动时会复制主服务上的所有数据,并且这个从服务器上之前的数据会全部丢失。

参考资料:
Redis 复制 | DB-TUTORIAL

二、配置主从服务器

我本次创建三个redis服务,一个主服务,两个从服务。主服务在Linux上运行,两个从服务使用docker容器来创建;(三个redis的版本都是7.0.10)

2.1使用配置文件的形式来主从复制

注意要修改redis.conf配置文件的几个主要参数

# 修改配置
daemonize no  #后台启动(注意这里要改为no,即非后台启动,因为会和docker run -d 冲突)# 关闭保护模式,开启的话,只有本机才可以访问redis
protected-mode no  # 需要注释掉bind
#bind 127.0.0.1(bind绑定的是自己机器网卡的ip,如果有多块网卡可以配多个ip,代表允许客户端通过机器的哪些网卡ip去访问,内网一般可以不配置bind,注释掉即可)# 设置登录密码
requirepass 123456# 开启aof持久化
appendonly yes

使用docker创建两个从服务:

(由于dockerhub中redis官方给的镜像里面没有redis.conf文件,Redis官方发布的官方镜像是按照最小化配置进行的,以保持镜像的轻量级和通用性。为了方便以后更改配置,需要自己手动创建配置文件)

我现在本地的Linux文件中创建了一个redis.conf文件,这个文件是redis官方提供的初始redis配置文件,并在这个初始文件的基础上进行一些小小的改动。

redis官方的配置文件地址:redis/redis.conf at 7.0.10 · redis/redis · GitHub

# 修改配置
daemonize no  #后台启动(注意这里要改为no,即非后台启动,因为会和docker run -d 冲突)# 关闭保护模式,开启的话,只有本机才可以访问redis
protected-mode no  # 需要注释掉bind
#bind 127.0.0.1(bind绑定的是自己机器网卡的ip,如果有多块网卡可以配多个ip,代表允许客户端通过机器的哪些网卡ip去访问,内网一般可以不配置bind,注释掉即可)# 设置登录密码
requirepass 123456# 开启aof持久化
appendonly yes#用来指定主机:slaveof 主机ip 端口
slaveof 192.168.231.110 6379
#主机的密码
masterauth 123456

修改其中相应的配置;(配置主从关系时,只需要在从服务的配置文件中修改就行了,主服务器不变)

使用docker容器创建俩个redis服务,并在创建的容器的时候进行一些挂载:

docker run --name myredis01 \-v /usr/dockerMount/myredis01/redis_config/redis.conf:/etc/redis.conf \-v /usr/dockerMount/myredis01/redis_data:/data \-p 6380:6379 \-d redis:7.0.10 redis-server /etc/redis.conf

解释:

 -v /usr/dockerMount/myredis01/redis_config/redis.conf:/etc/redis.conf 容器启动的时候,将本机目录下面的redis.conf映射到容器中去

 -v /usr/dockerMount/myredis01/redis_data:/data 映射数据存储的路径

 -d redis:7.0.10 redis-server /etc/redis.conf  后台启动redis-server,并且指定配置文件启动

创建这个容器之后,我们可以进入到这个redis内部,由于我们已经在myredis01的配置文件中写上了主服务器的地址,那么启动这个服务之后,就会自动拉取redis主服务器中的内容了;

docker exec -it myredis01 redis-cli -a 123456

运行这个命令,可以进入redis的客户端

使用 docker exec -it 命令来执行 Docker 容器内的操作

直接查看我们所拥有的键:

keys *

可以看到我们的从服务能正确拉取到我们主服务中的数据;

查看主机信息:info Replication

查看从机信息:info Replication

能清晰的看到主机和从机的关系;

再新建一个从服务myredis02,同样的创建容器操作:

docker run --name myredis02 \-v /usr/dockerMount/myredis01/redis_config/redis.conf:/etc/redis.conf \-v /usr/dockerMount/myredis01/redis_data:/data \-p 6381:6379 \-d redis:7.0.10 redis-server /etc/redis.conf

再进入到这个容器的内部,能看到也同样拉取了我们主服务器中的数据;

至此,我们使用redis.conf配置文件的方式来配置主从复制就完成了,也就是配置一个redis.conf配置文件,并挂载到容器内部。

注意使用配置文件的方式,即使从服务掉线,那么再次连接时,也会重新读取主服务的数据;

2.2使用纯代码的方式来进行主从复制;

在新建一个redis容器,不进行任何的挂载:

docker run --name myredis03 -p 6382:6379 -d redis:7.0.10 

这个容器是新建的,它现在应该能读也能写。

slaveof 192.168.231.110 6379 config set masterauth 123456

运行这两个命令就可以使这个redis服务器变为从服务器了。(这种方式可能会有一些延迟)但是,这种通过命令行的方式进行的主从关系是很脆弱的,一旦从服务器就行重启,那么这段主从关系就会消失。适合短暂的进行数据库数据的同步。

2.3脱离主服务器

 slaveof no one

这个命令可以使从服务器脱离主从关系的绑定。使从服务器重新变为能读能写的redis服务。但是这个命令有一点鸡肋。它不是永久的。

 服务器停止复制后不会清空数据库,而是会保留之前复制产生的数据。

如果你的主从关系绑定在从服务器的redis.conf配置文件中,那么即使你在从服务器中运行了这个脱离命令,暂时的拥有了读写功能,但是从服务器一重启那么就会重新绑定主从关系。

如果主从关系是靠命令来进行绑定的,那么重启从服务器后自动就会脱离主从关系了。所以这个命令还是有一点鸡肋的。

三、一些注意事项

master主服务器会每个10秒去发一次心跳包,以此来检测从服务器是否还存活。

即使主服务器断线,那么从服务器也会等待主服务器重启,而不能选择新的主服务器。(但是可以使用redis的哨兵监控来指定新的主服务器。)

从节点会努力追赶主节点,最终从节点的状态会和主节点的状态将保持一致。如果网络断开了,主从节点的数据将会出现大量不一致,一旦网络恢复,从节点会采用多种策略努力追赶上落后的数据,继续尽力保持和主节点一致。

redis如何实现的数据同步?

1、slave启动成功连接到master后,会给master发送数据同步消息(发送sync命令)
2、master接收到slave发来的数据同步消息后,把主服务器的数据进行持久化到rdb文件,同时会收集接收到的用于修改数据的命令,master将传rdb文件发送给你slave,完成一次完全同步
3、全量复制:而slave服务在接收到master发来的rdb文件后,将其存盘并加载到内存
4、增量复制:master继续将收集到的修改命令依次传给slave完成同步,
但是只要重新连接master,一次完全同步(全量复制)将会被自动执行
 

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

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

相关文章

APEX开发过程中需要注意的小细节5.5

oracle保留小数点后两位的函数 在日常开发中经常用到百分比做数据对比,但是有可能得到的数据是一个多位小数,结果如下所示: 如果想截取部分小数如保留小数点后两位可以怎么做呢? 在Oracle中,可以使用ROUND函数来四舍…

51单片机入门_江协科技_31~32_OB记录的自学笔记_LCD1602液晶显示屏

31. LCD1602 31.1. LCD1602介绍 •LCD1602(Liquid Crystal Display)液晶显示屏是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其它的一些内置特殊字符,还可以有8个自定义字符 •显示容量:162个字符&#xff0c…

二、Maven安装

Maven安装 一、Centos7.9安装1.下载2.安装3.设置国内镜像4.设置maven安装路径 一、Centos7.9安装 1.下载 第一种:官网下载最新版本:http://maven.apache.org/download.cgi第二种:其他版本下载:https://archive.apache.org/dist/…

数据中心的新动脉:探索ADOP 800G MPO/MTP单模光纤跳线

在数据传输领域,随着技术的不断进步,对于更快、更高效的传输解决方案的需求日益增长。ADOP 800G MPO/MTP单模光纤跳线便是在这样的背景下应运而生的产品。本文将为您提供一个全面而详细的介绍,带您深入了解这款创新产品的特点、优势以及应用场…

国产主流数据库存储类型简析

国产数据库在技术架构上主要分为集中式、基于中间件分布式和原生分布式架构,衍生出集中式架构和分布式架构。那么在这些部署架构中,从数据分布的视角来看,在数据库中数据分布的形态是怎样的。本文将简要分析OceanBase、PolarDB、OpenGauss、G…

探索数据中台的力量:企业数据资产管理的未来_光点科技

随着数字化时代的到来,"数据中台"这一概念逐渐为人所知,并迅速成为推动企业数据驱动转型的重要基石。数据中台不仅是集数据接入、管理、分析于一身的综合平台,更是企业实现数据资源集中管理、分析决策和业务创新的核心支撑。 一、数…

【好书推荐6】《Excel函数与公式应用大全for Excel 365 Excel 2021》

【好书推荐6】《Excel函数与公式应用大全for Excel 365 & Excel 2021》 写在最前面《Excel函数与公式应用大全for Excel 365 & Excel 2021》关键点内容简介作者简介前言/序言目录 🌈你好呀!我是 是Yu欸 🌌 2024每日百字篆刻时光&…

预付费水表充值系统

预付费水表充值系统是一种为用户提供水费预付服务的系统,旨在方便用户预先充值水费,实现用水时按照预付金额自动扣费,从而实现水费的实时管理和节约用水。这种系统在社会生活中越来越受欢迎,下文将从核心功能、工作流程、优势特点…

SSRF题目进阶+SSRF正则绕过+进制绕过SSRF限制

[题目信息]: 题目名称题目难度SSRF题目进阶3 [题目考点]: SSRF绕过[Flag格式]: SangFor{h3bvbopR6L2EQOXv}[环境部署]: docker-compose.yml文件或者docker tar原始文件。 docker-compose up -d[题目writeup]: 1、实验主页 …

学习大数据的第一天

今天学习如何安装hapood安装 1.安装hapood安装 2.需要的资料 3.开始安装 1.创建目录 mkdir -p /export/server 2.进入目录下 cd /export/server/ 3.安装 安装需要的依赖 yum install gcc gcc-c make autoconf automake libtool curl lzo-devel zlib-devel openssl opens…

算法与数据结构要点速学——排序算法

排序算法 所有主要的编程语言都有一个内置的排序方法。假设并说排序成本为 O(n*log n),通常是正确的,其中 n 是要排序的元素数。为了完整起见,这里有一个图表,列出了许多常见的排序算法及其完整性。编程语言实现的算法各不相同&a…

DBUtils工具类的使用

1、DBUtils是什么 为了更加简单地使用JDBC,Apache组织提供了一个DBUtils工具,它是操作数据库的一个组件,实现了对JDBC的简单封装,可以在不影响数据库访问性能的情况下简化JDBC的编码工作量。DBUtils工具要有2个作用。 写数据&am…

光明与速度:AI网络中GPU与光模块的协奏曲

🎶在人工智能(AI)的世界里,GPU和光模块是实现高速计算和数据传输的关键。它们如同一场精心编排的交响乐,每个部分都不可或缺,共同创造出美妙的和谐。🎼 GPU:AI网络的心脏&#x1f4…

创建一个javascript公共方法的npm包,js-tool-big-box,发布到npm上,一劳永逸

前端javascript的公共方法太多了,时间日期的,数值的,字符串的,搞复制的,搞网络请求的,搞数据转换的,几乎就是每个新项目,有的拷一拷,没有的继续写,放个utils目…

AJAX (异步的JavaScript 和 XML)

目录 1、什么是AJAX 2、作用 1)与服务器通信 2)异步交互(更新局部页面) 3、AJAX 的基本工作原理 4、应用举例 5、jQuery与AJAX 6、使用jQeury实现AJAX 1)$.ajax():发送异步请求 2)$.g…

2024五一杯数学建模C题思路分析

文章目录 1 赛题思路2 比赛日期和时间3 组织机构4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间:2024…

解决npm install安装node-sass包容易失败的问题

具体问题如下: npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree npm ERR! npm ERR! While resolving: XXX3.4.0 npm ERR! Found: webpack5.31.2 npm ERR! node_modules/webpack npm ERR! peer webpack”^4.0.0 || ^5.0.0″ from html-…

SpringBoot和Axios数据的传递和接收-Restful完全版

文章目录 一、基础知识铺垫Axios使用HTTP请求方式数据传输方式SpringBoot获取数据的方式 二、基础传递代码示例(一)Path Variables(二)Get、DeleteRequestParamModelAttribute (三)Post、Put、PatchRequest…

FreeRTOS学习 -- 中断配置

一、什么是中断 中断时微控制器一个很常见的特性,中断是由硬件产生,当中断产生以后CPU就会中断当前的流程而去处理中断服务,Cortex-M内核的MCU提供了一个用于中断管理的嵌套向量中断控制器(NVIC)。 二、中断优先级分…

土壤湿度传感器:助力农业现代化

随着科技的飞速发展,越来越多的先进技术被应用到农业生产中。其中,土壤湿度传感器作为现代农业的重要工具,正逐渐改变着传统农业的生产方式,成为农业现代化的秘密武器。 精确监测:土壤湿度传感器能够实时、精确地监测土…