Redis (三)

1、redis复制

        简单的概括就是主从复制,master以写为主,Slave以读为主,当master数据发生变化的时候,自动将更新的数据异步同步到其他的slave是数据库。

        使用这种机制的话,可以做到读写分离,可以减轻主机负担。使用这种方式的话可以容灾恢复,就是如果主机挂掉了。还有其他的数据备份,而且数据也是实时的。所以宕机的时候多啦保证!数据备份以及水平扩容支持高并发。

        配置从库不配置主库,对于权限信息,如果master配置了密码,需要密码才可以登录,那么slave就需要配置masterauth来设置校验的密码,否则的话master就会拒绝slave的访问请求。

1.1、相关命令

  • 使用info replication

    1. 可以查看复制节点的主从关系和配置信息

  • replicaof 主库ip 主库端口

    1. 配置在从机的配置文件中,配置主机的数据

  • slaveof 主库ip 主库端口

    1. 每次与master断开之后,都需要重新连接,除非你配置进redis.conf文件

    2. 在运行期间修改slave节点的信息,如果该数据库已经是某个主数据库的从数据库,那么会停止和原主数据库的同步关系,转而和新的主数据库同步

  • slaveof no one

    1. 使当前数据库停止与其他数据库的同步,转成主数据库,自立为王

1.2、配置

        一个master,然后两个slave,也讲就是说,需要三台虚拟机然而且每一个虚拟机上都安装redis,当然这只是基础的配置条件,然后接下来就是实现这种模式的具体配置。注意要给关闭每一个虚拟机的防火墙。

开启daemonize

daemonize yes

修改ip

bind 192.168.200.88 -::1

protected-mode

protected-mode no

指定端口

port 6379

指定当前的工作目录

dir /software/redis/redis-7.2.3/redisconf/backupfiles

pid文件名字,pidfile

pidfile /var/run/redis_6379.pid

log文件名字

logfile /software/redis/redislog/redis-log.log

本机密码

requirepass 123456

dump.rdb文件名字

dbfilename dump88.rdb

aof文件,appendfilename

暂时不开启

主机密码

replicaof 192.168.200.88 6379
masterauth "10100109"

1.2.1、主从复制

三台linux虚拟机,然后安装配置完成后正常启动连接!

查看主机日志文件如下

26152:M 04 Jan 2024 17:57:06.501 * Synchronization with replica 192.168.200.111:6380 succeeded
26152:M 04 Jan 2024 17:59:59.525 * Replica 192.168.200.99:6380 asks for synchronization
26152:M 04 Jan 2024 17:59:59.525 * Full resync requested by replica 192.168.200.99:6380
26152:M 04 Jan 2024 17:59:59.525 * Delay next BGSAVE for diskless SYNC
​
26152:M 04 Jan 2024 18:00:04.517 * Synchronization with replica 192.168.200.99:6380 succeeded
26152:M 04 Jan 2024 18:04:57.044 * Connection with replica 192.168.200.111:6380 lost.
26152:M 04 Jan 2024 18:05:12.186 * Replica 192.168.200.111:6381 asks for synchronization
26152:M 04 Jan 2024 18:05:12.187 * Partial resynchronization request from 192.168.200.111:6381 accepted. Sending 14 bytes of backlog starting from offset 673.

查看从机日志

6107:S 04 Jan 2024 18:05:12.189 * Ready to accept connections tcp
6107:S 04 Jan 2024 18:05:12.190 * Connecting to MASTER 192.168.200.88:6379
6107:S 04 Jan 2024 18:05:12.190 * MASTER <-> REPLICA sync started
6107:S 04 Jan 2024 18:05:12.190 * Non blocking connect for SYNC fired the event.
6107:S 04 Jan 2024 18:05:12.191 * Master replied to PING, replication can continue...
 

主机查看配置info replication

> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.200.99,port=6380,state=online,offset=1624,lag=0
slave1:ip=192.168.200.111,port=6381,state=online,offset=1624,lag=0
master_failover_state:no-failover
master_replid:ad3197cb5b7476962c1243102b7a135a8cfe83d5
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1624
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1624

从机查看配置,info replication

> info replication
# Replication
role:slave
master_host:192.168.200.88
master_port:6379
master_link_status:up
master_last_io_seconds_ago:10
master_sync_in_progress:0
slave_read_repl_offset:1820
slave_repl_offset:1820
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:ad3197cb5b7476962c1243102b7a135a8cfe83d5
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1820
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:267
repl_backlog_histlen:1554

测试

#主机
> set k1 v1
OK
​
#从机
> get k1
v1
​
> get k1
v1
​
1.2.1.1、总结

        配置过的从机是只能执行读操作,不能执行写操作,这样以来可以实现读写分离提高性能。

#从机写入
> set k2 v2
READONLY You can't write against a read only replica.

        假设主机启动后然后执行了多次的写操作后从机才启动,那么从机可以读取之前的写入的数据嘛,是这样的从机第一次启动的话会备份主机的之前的所有的数据做到同步,然后对于后续的主机的写操作同步的更新。

#主机写
> Linux-master-redis connected!
> set k2 v2
OK
> set k3 v3
OK
​
#启动从机,访问数据正常
> linux-111-6381 connected!
> get k2
v2
> get k3
v3

        主机宕机的话会出现什么操作,是从机变主机?数据读取失败?是这样的从机还是老老实实的做从机,等待主机恢复,而且读取数据正常没有影响。

#主机宕机
shutdown
​
#从机读写
> get k1
v1
> set k4 v4
READONLY You can't write against a read only replica.

        主机重启不影响之前建立的关系

#主机
> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.200.111,port=6381,state=online,offset=10316,lag=1
slave1:ip=192.168.200.99,port=6380,state=online,offset=10316,lag=0
master_failover_state:no-failover
master_replid:0fc82d3e3251195aec8a42cc1b350b54a5435054
master_replid2:ad3197cb5b7476962c1243102b7a135a8cfe83d5
master_repl_offset:10316
second_repl_offset:10289
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:10289
repl_backlog_histlen:28
> set k4 v4
OK
​
#从机读取
> get k4
v4

        欧克,上面是使用配置文件的方式来使用,也就是写死的这种情况,但是我们还有可以使用命令的方式来进行配置,接下来停掉两个从机,然后注释掉之前的配置文件,然后测试不同的情况。

# replicaof 192.168.200.88 6379

        重启后查看主从配置

#三台都是主机!
> info replication
# Replication
role:master
connected_slaves:0
master_failover_state:no-failover
master_replid:c69b05376562297a6868fc0311814cb9d0233331
master_replid2:0fc82d3e3251195aec8a42cc1b350b54a5435054
master_repl_offset:12174
second_repl_offset:12175
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:12175
repl_backlog_histlen:0

        好滴,指定主机使用命令,发现连接以后数据同步!

#从机执行
SLAVEOF 192.168.200.88 6379

        测试关机后的从机,重启后使用主从关系命令设置后,关系失效,也就是说使用命令的方式的话是临时的,只有使用配置文件的话是可以永久生效的。

1.2.2、叠叠乐

        这个不看也大致可以猜出来就是,一个主机的从机可以是另外一个从机的主机!也就是说即使是从机也可以接受其他的从机的连接以及数据同步,这样的话可以分担主机的写压力!为了方便演示就不在使用配置文件了,采用命令的方式使用比较方便。

#主机
192.168.200.88 
​
#从机 ————主机
192.168.200.99
​
#从机
192.168.200.111
​
#欧克当我连接完毕后发现数据已经同步完成,接下来测试不同的情况
​
#主机写看从机的从机的数据同步
> set k5 v5
OK
​
> SLAVEOF 192.168.200.88 6379
OK
> get k5
v5
​
> SLAVEOF 192.168.200.99  6380
OK
> get k5
v5
​
#对于从机的从机来讲,从机也是主机(哈哈哈),那么他可以写嘛
> set k6 v6
READONLY You can't write against a read only replica.
​
​
#主机挂了,从机的从机可以写嘛,不可以,但是可以读!
> linux-99-6380 connected!
> get k1
v1
> set k6 v6
READONLY You can't write against a read only replica.

1.2.3、自立门户

        使用命令可以,然当前的redis服务器脱离主从关系,变为主机。

> linux-111-6381 connected!
> SLAVEOF no one
OK
> set k6 v6
OK

1.3、总结

1.3.1、工作模式

        slave启动成功连接master后会发送一个同步的命令,然后对于初次连接的话,slave会将master中的数据全部复制copy,做到数据的同步,然后salve自身原有的数据会被master数据覆盖清除。

首次连接、全量复制

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

心跳持续、保持通信

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

repl-ping-replica-period 10

进入平稳、增量复制

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

从机下线,重连续传

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

1.3.2、缺点

        复制延时,信号衰减,大概的意思就是,要满足高可用的方式工作的话,需要在一个主机上挂载很多的从机,数据在同步的时候会有演示,从机越多问题越明显。

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

主机挂掉,从机还是只能读,直到主机重启。(无人值守---哨兵)

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

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

相关文章

14.两数之和

题目 class Solution {public int[] twoSum(int[] nums, int target) {int[] ret {-1,-1};for(int i0;i<nums.length;i) {for(int ji1;j<nums.length;j) {if(nums[i] nums[j] target) {ret[0] i;ret[1] j;}}}return ret;} }

uniapp 无限级树形结构面包屑、单选-多选、搜索、移除功能插件,基于【虚拟列表】高性能渲染海量数据,加入动态高度、缓冲区

hyq-tree-vtw 无限级树形结构面包屑、单选-多选、搜索、移除功能 示例项目 单选-user 单选-任意一项 多选-关联下级 多选-任意一项 已选择数据弹框 说明 本插件需要使用uni-popup、uni-transition用于已选择数据弹框&#xff0c;因此需要有这些依赖,请自行导入本插件基于【虚…

企业培训系统开发:构建灵活高效的学习平台

企业培训系统的开发在当今数字化时代是至关重要的。本文将介绍一些关键技术和代码示例&#xff0c;以帮助您构建一个灵活、高效的企业培训系统。 1. 技术选型 在开始企业培训系统的开发之前&#xff0c;首先需要选择合适的技术栈。以下是一个基本的技术选型示例&#xff1a;…

Python(wordcloud):根据文本数据(.txt文件)绘制词云图

一、前言 本文将介绍如何利用python来根据文本数据&#xff08;.txt文件&#xff09;绘制词云图&#xff0c;除了绘制常规形状的词云图&#xff08;比如长方形&#xff09;&#xff0c;还可以指定词云图的形状。 二、相关库的介绍 1、安装相关的库 pip install jieba pip i…

HTTP和TCP代理原理及实现,主要是理解

Web 代理是一种存在于网络中间的实体&#xff0c;提供各式各样的功能。现代网络系统中&#xff0c;Web 代理无处不在。我之前有关 HTTP 的博文中&#xff0c;多次提到了代理对 HTTP 请求及响应的影响。今天这篇文章&#xff0c;我打算谈谈 HTTP 代理本身的一些原理&#xff0c;…

C++完成Query执行sql语句的接口封装和测试

1、在LXMysql.h 创建Query执行函数 //封装 执行sql语句 if sqllen 0 strlen获取字符长度bool Query(const char*sql,unsigned long sqllen0); 2、在LXMysql.cpp编写函数 bool LXMysql::Query(const char* sql, unsigned long sqllen){if (!mysql)//如果mysql没有初始化好{c…

使用qtquick调用python程序

一. 内容简介 使用qtquick调用python程序 二. 软件环境 2.1vsCode 2.2Anaconda version: conda 22.9.0 2.3pytorch 安装pytorch(http://t.csdnimg.cn/GVP23) 2.4QT 5.14.1 新版QT6.4,&#xff0c;6.5在线安装经常失败&#xff0c;而5.9版本又无法编译64位程序&#xf…

UE4 4.21使用编辑器蓝图EditorBlueprint方法

在UE4 4.21中&#xff0c;编辑器蓝图&#xff08;Editor Blueprint&#xff09;是一个强大的工具&#xff0c;允许开发者扩展和自定义Unreal编辑器的功能。通过编辑器蓝图&#xff0c;我们可以创建自定义的工具和功能&#xff0c;以优化开发流程。 本教程将指导您如何在UE4 4.…

【LeetCode-剑指offer】--19.验证回文串II

19.验证回文串II 方法&#xff1a;双指针 首先考虑如果不允许删除字符&#xff0c;如何判断一个字符串是否是回文串。常见的做法是使用双指针。定义左右指针&#xff0c;初始时分别指向字符串的第一个字符和最后一个字符&#xff0c;每次判断左右指针指向的字符是否相同&#…

技术学习|CDA level I 多维数据透视分析

对基于多源表的结构数据进行商业智能分析&#xff0c;可以帮助决策者从多个不同业务角度对业务行为结果进行观测&#xff0c;进而帮助决策者全面、精确地定位业务问题&#xff0c;实现商业洞察的相关内容。通过商业智能分析产出的分析成果被统称为商业智能报表&#xff0c;简称…

ubuntu创建pytorch-gpu的docker环境

文章目录 安装docker创建镜像创建容器 合作推广&#xff0c;分享一个人工智能学习网站。计划系统性学习的同学可以了解下&#xff0c;点击助力博主脱贫( •̀ ω •́ )✧ 使用docker的好处就是可以将你的环境和别人的分开&#xff0c;特别是共用的情况下。本文介绍了ubuntu环境…

4.快速实现增删改查,模糊查询功能

打开springboot项目&#xff0c;在com.example下建包common,在common下新建Result.java 4.1封装统一的返回数据结构 1.在Result.java中编写如下代码&#xff1a; private static final String *SUCCESS*"0"; private static final String *ERROR*"-1"; p…

智能穿戴时代 | 米客方德SD NAND的崭新优势

SD NAND在智能穿戴上的优势 SD NAND是一种可以直接焊接在智能穿戴设备主板上的存储芯片&#xff0c;其小型化设计有助于紧凑设备尺寸&#xff0c;同时提供可靠的嵌入式存储解决方案。 这种集成设计减少了空间占用&#xff0c;同时确保设备在高度活动的环境中更为稳定。SD NAND…

[足式机器人]Part2 Dr. CAN学习笔记-动态系统建模与分析 Ch02-3流体系统建模

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记-动态系统建模与分析 Ch02-12课程介绍电路系统建模、基尔霍夫定律 流量 flow rate q q q m 3 / s m^3/s m3/s 体积 volume V V V m 3 m^3 m3 高度 heigh h h h m m m 压强 pressure p p p …

Jvm垃圾收集器系列之Parallel Scavenge收集器(个人见解仅供参考)

问&#xff1a;什么是Parallel Scavenge&#xff1f; 答&#xff1a;Parallel Scavenge是Java HotSpot虚拟机中的一种垃圾收集器&#xff0c;它主要用于提高应用程序的吞吐量。 问&#xff1a;Parallel Scavenge的主要目标是什么&#xff1f; 答&#xff1a;Parallel Scavenge的…

Azure Machine Learning - 人脸识别任务概述与技术实战

Azure AI 人脸服务提供了可检测、识别和分析图像中的人脸的 AI 算法。 人脸识别软件在许多不同情形中都十分重要&#xff0c;例如识别、无接触访问控制和实现隐私的人脸模糊。你可以通过客户端库 SDK&#xff0c;或者直接调用 REST API 使用人脸服务。 目录 一、人脸识别服务场…

【Android】如何设置应用程序启动Activity(应用启动时显示的界面)

前言 在Android中&#xff0c;AndroidManifest.xml文件可以通过修改来设置应用启动时显示的界面&#xff0c;即启动Activity。 操作步骤 打开AndroidManifest.xml文件。 在文件中找到想要设置为启动Activity的<activity>元素。该元素通常在<application>元素内部…

非小米电脑安装小米电脑管家

博客地址 雪饼 (xue6ing.cn) 前言 小米电脑管家是一款专为小米笔记本用户设计的电脑管理软件。它提供了一系列强大的功能&#xff0c;包括驱动管理、硬件信息、设备互联等。其内置了小米的HyperConnect跨端智联功能。 如果是小米手机用户的话非常建议你安装&#xff01;因为…

EasyExcel写出包含多个sheet页的Excel

https://blog.csdn.net/qq_38751895/article/details/131852740

虚拟机添加显示屏

1、关闭虚拟机&#xff0c;虚拟机在为关机的情况下&#xff0c;虚拟机设置->显示器->监视器 都是灰色的&#xff0c;不能设置&#xff1b; 2、虚拟机设置->显示器->监视器 “监视器数量” 设置为2 “拉伸模式” 不要勾选 点确定 3、点击 查看->循环使用多个…