Redis复制 (replica)

是什么

官网地址:Redis replication | Redis

其实就是主从复制,Master以写为主,Slave以读为主,当master数据变化的时候,自动将新的数据异步同步到其它slave数据库。

能干嘛

  • 读写分离
  • 容灾恢复
  • 数据备份
  • 水平扩容支撑高并发

如何使用

采用配置方式:配从(库)不配主(库)

权限细节:

master 如果配置了 requirepass 参数,需要密码登陆。

那么 slave 就要配置 masterauth 来设置校验密码,否则的话 master 会拒绝 slave 的访问请求。

基本操作命令

info replication:可以查看复制节点的主从关系和配置信息

replicaof 主库IP 主库端口:一般写入进redis..conf配置文件内

slaveof 主库IP 主库端口:每次与masterl断开之后,都需要重新连接,除非你配置进redis.conf文件;在运行期间修改slave节点的信息,如果该数据库已经是某个主数据库的从数据库,那么会停止和原主数据库的同步关系转而和新的主数据库同步,重新拜码头

slaveof no one:使当前数据库停止与其他数据库的同步,转成主数据库,自立为王

案例

架构说明

一个Master两个Slave:3台虚机,每台都安装redis

拷贝多个redis.conf文件:redis6379.conf、redis6380.conf、redis6381.conf

小口诀

三边网络相互ping通且注意防火墙配置

三大命令:

        主从复制:replicaof  主库IP  主库端口、配从(库)不配主(库)

        改换门庭:slaveof  新主库IP  新主库端

        自立为王:slaveof no one

修改配置文件步骤

1.开启daemonize yes

2.注释掉bind 127.0.0.1

3.protected-mode no

4.指定端口

5.指定当前工作目录,dir

6.pid文件名字,pidfile

7.log文件名字,logfile

8.requirepass

9.dump.rdb名字

10.aof文件,appendfilename

本步骤可选,非必须

11.从机访问主机的通行密码masterauth,必须(从机需要配置,主机不用

完整配置:

主节点:redis6379.conf
        309 daemonize yes
        87  # bind127.0.0.1 -::1
        111 protected-mode no
        138 port 6379
        506 dir /myredis
        341 pidfile /var/run/redis_6379.pid
        354 logfile "/myredis/6379.log"
        1008 requirepass 111111
        482 dbfilename dump6379.rdb
启动:redis-server /myredis/redis6379.conf
连接:redis-cli -a 111111 -p 6379

从节点1:redis6380.conf
        309 daemonize yes
        87  # bind127.0.0.1 -::1
        111 protected-mode no
        138 port 6380
        506 dir /myredis
        341 pidfile /var/run/redis_6380.pid
        354 logfile "/myredis/6380.log"
        1008 requirepass 111111
        482 dbfilename dump6380.rdb
        528 replicaof 192.168.241.3 6379
        536 masterauth "111111"
启动:redis-server /myredis/redis6380.conf
连接:redis-cli -a 111111 -p 6380

从节点2:redis6381.conf
        309 daemonize yes
        87  # bind127.0.0.1 -::1
        111 protected-mode no
        138 port 6381
        506 dir /myredis
        341 pidfile /var/run/redis_6381.pid
        354 logfile "/myredis/6381.log"
        1008 requirepass 111111
        482 dbfilename dump6381.rdb
        528 replicaof 192.168.241.3 6379
        536 masterauth "111111"
启动:redis-server /myredis/redis6381.conf
连接:redis-cli -a 111111 -p 6381

常用三招

一主二仆

方案1:配置文件固定写死

a、配置文件执行replicaof  主库IP  主库端口

b、配从(库)不配主(库)

配置从机6380

配置从机6381

c、先master后两台slave依次启动

d、主从关系查看

日志查看:

主机日志如下

备机日志如下

命令查看:info replication

 

 

问题演示:

1.从机可以执行写命令吗?

2.从机切入点问题

slave是从头开始复制还是从切入点开始复制?

master启动,写到k3,slave1跟着master同时启动,跟着写到k3,slave2写到k3后才启动,那之前的是否也可以复制?是的,首次一锅端,后续跟随,master写,slave跟

3.主机shutdown后,从机会上位吗?

主机shutdown后情况如何?从机是上位还是原地待命   

结果:从机不动,原地待命,从机数据可以正常使用;等待主机重启动归来。

 

 

4.主机shutdown后,重启后主从关系还在吗?从机还能否顺利复制?

可以复制的。

 

 

5.某台从机down后,master继续,从机重启后它能跟上大部队吗?

结果:能。

方案2:命令操作手动指定

a、从机停机去掉配置文件中的配置项,3台目前都是主机状态,各不从属

b、3台master

 

c、预设的从机上执行命令:slaveof 主库IP 主库端口

 

d、用命令使用的话,2台从机重启后,关系还在吗?

结果:不在。

配置VS命令的区别,当堂试验讲解:

  • 命令,当次生效
  • 配置,持久稳定

薪火相传

上一个slave可以是下一个slave的master,slave同样可以接收其他,slaves的连接和同步请求,那么该slave作为了链条中下一个的master,可以有效减轻主masterl的写压力。

中途变更转向:会清除之前的数据,重新建立拷贝最新的

命令:slaveof  新主库IP  新主库端口

反客为主

命令:slaveof no one

使当前数据库停止与其他数据库的同步,转成注数据库

复制原理和工作流程

slave启动,同步初请

slave启动成功连接到master后会发送一个sync命令。

slave首次全新连接master,一次完全同步(全量复制)将被自动执行,slave自身原有数据会被master数据覆盖清除。

首次连接,全量复制

master节点收到sync命令后会开始在后台保存快照(即RDB持久化,主从复制时会触发RDB),同时收集所有接收到的用于修改数据集命令缓存起来,master节点执行RDB持久化完后,master将rdb快照文件和所有缓存的命令发送到所有slave,以完成一次完全同步。

而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中,从而完成复制初始化。

心跳持续,保持通信

配置文件:repl-ping-replica-period 10

master发出PING包的周期,默认是10

进入平稳,增量复制

Master继续将新的所有收集到的修改命令自动依次传给slave,完成同步。

从机下线,重连续传

master会检查backlog里面的offset,masteri和slave都会保存一个复制的offset还有一个masterId,offset是保存在packlog中的。Master只会把已经复制的offset)后面的数据复制给Slave,类似断点续传。

复制的缺点

复制延时,信号衰减

由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。

master挂了如何办?

默认情况下,不会在slave节点中自动重选一个master

那每次都要人工干预?

是的,解决方案是加入哨兵。

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

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

相关文章

听GPT 讲K8s源代码--pkg(七)

k8s项目中 pkg/kubelet/config,pkg/kubelet/configmap,pkg/kubelet/container,pkg/kubelet/cri 这几个目录处理与 kubelet 配置、ConfigMap、容器管理和容器运行时交互相关的功能。它们共同构成了 kubelet 的核心功能,使其能够在 …

JAVA解析EXCEL(JExcelAPI,POI,EasyExcel)

前言 文章目录 前言JExcelAPIDemo POIHSSFWorkBookXSSFWorkBookDemo SXSSFWorkBookDemo XSSFReaderDemo EasyExcelDemo demo代码:https://github.com/RwTo/excel-demo JAVA解析Excel 一般有三种方式 JExcelAPI POI EasyExcel JExcelAPI 官网:https://je…

Vben Admin学习笔记

Modal 弹窗 modal弹窗一般作为单文件组件被引用&#xff0c;下面是两段示例代码&#xff1a; 弹窗文件 Modal.vue // Modal.vue <template><BasicModal v-bind"$attrs" title"Modal Title" :helpMessage"[提示1, 提示2]">Modal I…

【PostgreSQL内核学习(九)—— 查询执行(数据定义语句执行)】

数据定义语句执行 概述数据定义语句执行流程执行示例 声明&#xff1a;本文的部分内容参考了他人的文章。在编写过程中&#xff0c;我们尊重他人的知识产权和学术成果&#xff0c;力求遵循合理使用原则&#xff0c;并在适用的情况下注明引用来源。 本文主要参考了《PostgresSQL…

ES6 模块编程(新思路方便复习笔记)

文章目录 ES6 模块编程(新思路方便复习笔记)介绍需求说明思路分析/图解代码实现创建common.js创建use_common.js 其它导出形式--直接导出创建common2.js创建use_common2.js 其它导出形式--默认导出创建common3.js创建use_common3.js--导入默认导出模块/数据注意事项和使用细节导…

【应用】Asible自动化运维工具的应用与常用命令

ansible自动化运维工具 一、ansible 的概述1. ansible 的概念2. ansible 的特性 二、ansible 的部署与命令1. ansible 的部署1.1 服务器ip地址设置1.2 ansible 服务器部署 2. ansible 命令行模块2.1 command 模块2.2 shell 模块2.3 cron 模块2.4 user 模块2.5 group 模块2.6 co…

中国农业大学计算机考研分析

关注我们的微信公众号 姚哥计算机考研 更多详情欢迎咨询 中国农业大学&#xff08;B-&#xff09;考研难度&#xff08;☆☆☆&#xff09; 中国农业大学计算机考研招生学院是信息与电气工程学院。目前均已出拟录取名单。 中国农业大学信息与电气工程学院&#xff0c;起源于…

使用EasyPoi实现Excel的按模板样式导出

1&#xff0c;横向遍历 #fe 使用#fe命令可以实现集合数据的横向拓展&#xff0c;比如模板代码是 {{#fe:maths t.score}}导出的excel里面就会显示会自当前列&#xff0c;向右拓展&#xff0c;效果可参见下面的导出文件截图 2&#xff0c;横向遍历值 v_fe 使用v_fe命令可以实现…

ROS前驱前转小车仿真(2D)项目

文章目录 一.官方网址1.ROS官网2.urdf-模型3.rviz-数据可视化4.gazebo-仿真环境5.gmapping-建图6.navigation-导航 二.文件框架三.启动顺序0.依赖包的安装1.手动控制的启动顺序2.建图的启动顺序3.导航的启动顺序 四.urdf-模型文件1.ackermann.xacro-轮子传动的配置2.common_pro…

MAC 推送证书不受信任

配置推送证书的时候&#xff0c;一打开就变成不受信任&#xff0c;搜了很多解决版本。 由于苹果修改相关规定&#xff0c;推送证书 打开Apple PKI - Apple 下载AppleWWDRCA文件&#xff0c;选择G4,双击安装之后&#xff0c;证书已经变为受信任。 AppleWWDRCA(Apple Worldwid…

仿VScode MDK背景配色方案

效果如果所示 操作方法&#xff1a;备份后修改~/UV4文件夹下的global.prop&#xff0c;用以下的代码代替。 # properties for all file types indent.automatic1 virtual.space0 view.whitespace0 view.endofline0 code.page936 caretline.visible1 highlight.matchingbraces1…

【数据结构】链表是否有环相关问题

文章目录 快指针走3、4、5步甚至更多可以吗为什么快慢指针一定在入口点相遇![在这里插入图片描述](https://img-blog.csdnimg.cn/ba346dbc9fee425dbb895ae2962e99ce.png) 快指针走3、4、5步甚至更多可以吗 部分情况下可以。 如果这样&#xff0c;相对&#xff08;追及&#xf…

tauri在github上进行自动更新打包并发版过程,实战操作避坑

从网上找了很多很多的文章&#xff0c;结果还是入坑了&#xff0c;一个问题找了一天才解决&#xff1a; Error A public key has been found, but no private key. Make sure to set TAURI_PRIVATE_KEY environment variable. 596 ELIFECYCLE  Command failed with exit code…

智慧消防:如何基于视频与智能分析技术搭建可视化风险预警平台?

一、背景分析 消防安全是一个重要的话题&#xff0c;涉及到每个人的生活和安全。每年都会发生大量的火灾&#xff0c;给人们带来极大的危害&#xff0c;摧毁了大量的财产&#xff0c;甚至造成了可怕的人员伤亡。而消防安全监督管理部门人员有限&#xff0c;消防安全监管缺乏有…

SVN - 记录一下无法提交代码 提示:被锁定(locked)

今天遇到一个问题&#xff0c;svn 在提交代码的时候出现了svn is already locked&#xff0c;导致代码无法提交&#xff08;commit&#xff09;和更新&#xff08;update&#xff09; 主要报错如下&#xff1a; 解决方法&#xff1a; 然后点击 Clean up 选中一下选项&#xff…

Linux centos7.x系统 下没有ens33 网卡的解决方案

一、背景 安装完windows11 Centos7.9 版本的双系统之后 , 启动Centos7.9时发现没有网卡信息 , 只有ifcfg-lo网卡的信息 , 这个时候就证明没有网卡信息&#xff0c;或者网卡驱动不匹配(我这里是没有网卡)&#xff0c;所以我们要重新安装 , 安装步骤如下 : 二、安装步骤 1.查…

PHP 药店管理系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 药品管理系统 是一套完善的web设计系统,系统采用smarty框架进行开发设计&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 PHP 药店管理系统mysql数据库web结构apache计 下载地址…

开发一个简单的数据库路由进行分库分表

今天我们来看看一个简单的数据库路由组件要怎么开发出来&#xff0c;这篇文章分为几个步骤进行介绍&#xff0c;分别为&#xff1a; 什么是数据库路由 路由组件的作用为什么要自研组件需要用到什么技术 整体的业务流程主要代码 介绍 数据库路由的作用 使用数据库路由是在业…

产品解读|有了JMeter,为什么还需要MeterSphere?

提起JMeter&#xff0c;相信大部分的测试人员应该都很熟悉。JMeter因其小巧轻量、开源&#xff0c;加上支持多种协议的接口和性能测试&#xff0c;在测试领域拥有广泛的用户群体。一方面&#xff0c;测试人员会将其安装在个人的PC上&#xff0c;用以满足日常测试工作的需要&…

【SpringCloud Alibaba】(一)微服务介绍

此专栏内容皆来自于【冰河】的《SpringCloud Alibaba 实战》文档。 1. 专栏介绍 我们先来看看《SpringCloud Alibaba实战》专栏的整体结构吧&#xff0c;先上图 从上图&#xff0c;大家可以看到&#xff0c;专栏从整体上分为十个大的篇章&#xff0c;分别为 专栏设计、微服务…