【2023】Redis主从复制模式集群

news2025/1/10 21:01:47
资源有限,本文使用Docker部署

目录

  • 🎶主从模式介绍
  • 🎶 搭建主从模式集群
    • 🎶 使用命令搭建主从集群
    • 🎶 通过配置文件搭建主从模式集群
  • 🎶配置读写分离
  • 🎶 用心跳机制提高主从复制的可靠性
  • 🎶 用偏移量检查数据是否一致

🎶主从模式介绍

主从模式中,由一个主服务器和多个从服务器组成,写入主节点的数据会被复制到从节点上,这样一旦主节点出现故障,应用系统就能切换到从节点去读写数据,提升系统的可用性。
再采用主从复制模式里默认的读写分离机制,就能提升系统的缓存读写性能。

总结:

  • 提高系统可用性
  • 提升读写性能

主从模式简述:

当有应用向一台Redis服务器中写数据时,这个数据可以复制同步到一台或多台Redis服务器,这个数据源服务器被称为主服务器(master),其他服务器被称为从服务器(slave)。

结构图:

  • 一主一从

在这里插入图片描述

  • 一主多从
    在这里插入图片描述

🎶 搭建主从模式集群

🎶 使用命令搭建主从集群

  • 运行一个容器作为master节点,端口为6379
docker run -itd --name redis-master -p 6379:6379 redis:6.0 
  • 再运行一个容器作为slave节点,端口为6380(注意:因为在同一台宿主机,所以端口不能重复)
docker run -itd --name redis-slave -p 6380:6380 redis:6.0 
  • 查看master容器信息,找到该容器的IP地址,可以看出IP地址为172.17.0.2
# docker inspect redis-master | grep "IPAddress"
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAddress": "172.17.0.2",
  • 进入master容器,连接客户端,查看当前主从模式状态
# docker exec -it redis-master /bin/bash
root@dd22f11d3b8c:/data# redis-cli 
127.0.0.1:6379> INFO replication
# Replication
role:master
connected_slaves:0
  • 只需要信息的前几行能看到集群信息即可,可以看出此容器为主服务器,并且当前没有从服务器
  • 此时通过名称为从节点的容器进入查看集群状态应该是一样的,因为此时两者并没有关联
[root@localhost ~]# docker exec -it redis-slave /bin/bash
root@ff390708266d:/data# redis-cli 
127.0.0.1:6379> INFO replication
# Replication
role:master
connected_slaves:0
  • 在从节点输入以下命令,指定该节点为从节点
127.0.0.1:6379> SLAVEOF 172.17.0.2 6379
OK
  • 再次查看集群信息,发现可以看到集群状态,该容器已成为从节点,主节点为172.17.0.2
127.0.0.1:6379> INFO replication
# Replication
role:slave
master_host:172.17.0.2
master_port:6379
master_link_status:up
  • 回到redis-master容器上查看状态,确认集群状态
[root@localhost ~]# docker exec -it redis-master /bin/bash
root@dd22f11d3b8c:/data# redis-cli
127.0.0.1:6379> INFO replication
# Replication
role:master
connected_slaves:1
slave0:ip=172.17.0.3,port=6379,state=online,offset=364,lag=1
  • 至此集群搭建成功

如果还有其他的从节点,操作步骤同上

🎶 通过配置文件搭建主从模式集群

注意:将上个实验的容器删除,重新部署,所以名称相同

  • 同样创建主redis容器一个
docker run -itd --name redis-master -p 6379:6379 redis:6.0 
  • 创建从服务器的配置文件,并启动从服务器容器指定该配置文件
[root@localhost ~]# mkdir /data/redis/redisConf -p
[root@localhost ~]# vim /data/redis/redisConf/redisslave.conf
[root@localhost ~]# cat /data/redis/redisConf/redisslave.conf 
port 6380
slaveof 172.17.0.2 6379
[root@localhost ~]# docker run -itd --name redis-slave -v /data/redis/redisConf:/redisConfig:rw -p 6380:6380 redis:6.0 redis-server /redisConfig/redisslave.conf
  • 进入到slave容器连接服务器查看redis集群状态
[root@localhost redisConf]# docker exec -it redis-slave /bin/bash
root@0fea9993d4e3:/data# redis-cli -h 127.0.0.1 -p 6380
127.0.0.1:6380> INFO replication
# Replication
role:slave
master_host:172.17.0.2
master_port:6379
master_link_status:up
slave_read_only:1

至此,通过配置文件的redis主从集群已经配置完成

🎶配置读写分离

从主从服务器上通过info replication查看状态发现一行slave_read_only:1代表是只读的含义

在从服务器输入以下命令发现报错,也证明了是不可写的

127.0.0.1:6380> set test 100
(error) READONLY You can't write against a read only replica.

只需要在上例配置文件中加入slave-read-only no然后删除旧容器创建新容器即可生效,效果为可读可写

🎶 用心跳机制提高主从复制的可靠性

主从模式中,从服务器会默认以一秒一次的频率向主服务器发送REPLCONF ACK命令,依次来确保两者间连接通畅。
这种定时交互命令确保连接的机制就叫“心跳”机制。
可在主服务器通过以下命令查看到查看发送“心跳”间隔时间

[root@localhost redisConf]# docker exec -it redis-master /bin/bash
root@c9ced7408758:/data# redis-cli
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=172.17.0.3,port=6380,state=online,offset=1666,lag=0

lag=0说明是实时的,没有数据延迟或失败情况

在配置文件中加入以下两行可增加可靠性:

min-slaves-to-write 2
min-slaves-max-lag 15
  • 第一行代表从服务器至少由两个
  • 第二行代表如果lag值大于15秒,则不执行主从服务
  • 两者为的关系

🎶 用偏移量检查数据是否一致

在主服务器中通过info replication可查看数据偏移量的master_repl_offset数据

master_repl_offset:1666

然后在从服务器上查看是否一致,如果一致,就说明主从服务器间的数据是同步的。

在主服务器上创建一个键值对,然后再次查看,如果主从服务器的master_repl_offset还是相同说明数据同步成功。

本文内从整理自基于Docker的Redis入门与实践

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

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

相关文章

[golang 微服务] 3. ProtoBuf认识与使用

一.protobuf简介 前言 在移动互联网时代, 手机流量、 电量是最为有限的资源,而移动端的即时通讯应用无疑必须得直面这两点。解决流量过大的基本方法就是 使用高度压缩的通信协议,而数据压缩后流量减小带来的自然结果也就是省电:因…

#Verilog HDL# Verilog设计中的竞争问题和解决办法

经过前面文章的学习,我们知道:不管是Verilog设计语言,还是Sytemverilog验证语言,标准都定义了语言调度机制,来规范各家编译器和仿真器的开发。今天,我们着重看一下Verilog 硬件设计语言中竞争问题&#xff…

算法拾遗三十一马拉车算法

算法拾遗三十一马拉车算法 回文是什么回文暴力求法 Manacher算法回文直径和回文半径最右回文边界最右回文右边界的中心C位置Manacher求解过程Manacher 题 回文是什么 一个字符串正过来念和反过来念一样,总的来说就是有一个对称轴可能在字符上也可能在范围上面 回文…

算法刷题总结 (十一) 二叉树

算法总结11 二叉树 一、二叉树的概念1.1、什么是二叉树?1.2、二叉树的常见类型1.2.1、无数值(1)、满二叉树(2)、完全二叉树 1.2.2、有数值(3)、二叉搜索树(4)、平衡二叉搜…

设置服务器ssh远程连接时超时关闭的时间

我们通过ssh远程连接服务器时,如果一段时间客户端没有使用,就会与服务器断开连接。这个断开的时间我们是可以自己的设置的。 以linux centos系统为例, 具体设置方法如下: 1、通过下面的命令编译sshd配置文件 vim /etc/ssh/sshd_…

SylixOS vutex

vutex 概念 SylixOS 引入了与 Linux futex 类似的用户快速锁 vutex(vitual user mutex)(SylixOS 习惯称为“等待变量锁”);vutex 包括两个操作:pend 和 post,pend 操作用于等待期望值得到满足&…

DFS专题

题单地址&#xff1a;【237题】算法基础精选题单_ACM竞赛_ACM/CSP/ICPC/CCPC/比赛经验/题解/资讯_牛客竞赛OJ_牛客网 老子的全排列呢 dfs回溯 int n 8; int idx; int record[10]; bool vis[10];void dfs(int num) {if(numn){for(int i1;i<n;i) cout<<record[i]<…

【ONE·C++ || C++11(一)】

总言 主要介绍C11中的一些功能语法。 文章目录 总言0、思维导图1、基本情况简介2、统一的列表初始化2.1、{}的使用2.2、initializer_list2.2.1、基础介绍2.2.2、在各容器中实现说明 3、声明3.1、auto3.2、nullptr3.3、decltype 4、范围for5、智能指针6、STL中一些变化6.1、C11…

一、版本控制

1、什么是版本控制 1.1、版本控制的概念 版本控制&#xff08;Revision control&#xff09;是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史&#xff0c;方便查看更改历史记录&#xff0c;备份以便恢复以前的版本的软件工程技术。 1.2、版本控制的作用…

泛型方法、Function类的函数化编程与调用

0、引言 在项目开发的过程中&#xff0c;常常需要将一些高频复用的方法封装成工具类&#xff0c;例如最近学到的Redis缓存中&#xff0c;解决缓存穿透、解决缓存击穿的方法&#xff08;例如解决缓存穿透的问题的方法queryWithPassThrough&#xff09;&#xff0c;传入一个Long型…

谷粒商城:Oss endpoint can‘t be empty.问题

商品API &#xff0c;文件上传管理的时候 出现这个问题 解决两个方向 1.springBoot、alibabaCloud、springCloud、aliyunOSS 之间的版本问题&#xff0c;我的是下面的版本可以运行了。 // springBoot版本 2.7.7 <groupId>org.springframework.boot</groupId> &l…

中关村论坛 | 金融业从增量到存量博弈背后两大原因 更重要的是……

在数字经济浪潮下&#xff0c;中国金融业正在经历数字化转型的深刻变革。为研判金融科技行业发展趋势和前景&#xff0c;探索金融创新与监管安全的边界&#xff0c;“2023中关村论坛金融科技论坛”于5月29日召开。 中电金信常务副总经理冯明刚与中国银行软件中心副总经理康钧伟…

链表:虚拟头节点你会用吗?

大家好&#xff0c;我是三叔&#xff0c;很高兴这期又和大家见面了&#xff0c;一个奋斗在互联网的打工人。 前言&#xff1a;什么是链表 什么是链表&#xff0c;链表是一种通过指针串联在一起的线性结构&#xff0c;每一个节点由两部分组成&#xff0c;一个是数据域一个是指…

提高用户忠诚度的 4 种客户保留策略

什么是客户保留&#xff1f;简而言之&#xff0c;客户保留是指企业用来鼓励现有客户群重复购买和持续忠诚度的策略和战术。根据最近的研究&#xff0c;多达68%的客户在觉得公司不重视他们的业务时会转向竞争对手。 这就是为什么客户保留对各行各业的企业都如此重要的原因。与获…

《程序员面试金典(第6版)》面试题 16.25. LRU 缓存(自定义双向链表,list库函数,哈希映射)

题目描述 设计和构建一个“最近最少使用”缓存&#xff0c;该缓存会删除最近最少使用的项目。缓存应该从键映射到值(允许你插入和检索特定键对应的值)&#xff0c;并在初始化时指定最大容量。当缓存被填满时&#xff0c;它应该删除最近最少使用的项目。 题目传送门&#xff1a;…

消息队列内容

问题有哪些&#xff1f; &#xff08;1&#xff09;消息队列为什么会出现&#xff1f; &#xff08;2&#xff09;消息队列能用来干什么&#xff1f; &#xff08;3&#xff09;使用消息队列存在的问题&#xff1f; &#xff08;4&#xff09;如何解决重复消费的问题&#…

PyCharm安装使用教程

简介 PyCharm是一种PythonIDE&#xff08;Integrated Development Environment&#xff0c;集成开发环境&#xff09;&#xff0c;带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具&#xff0c;比如调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单…

docker-安装redis集群

目录 1.服务器列表 2.安装docker 3.docker内网IP地址配置 4.docker安装redis集群 1.选择合适数据位置 2.循环生成redis配置目录 3.打开宿主机防火墙端口 4.循环生成redis容器 5.创建集群命令 6.命令行集群验证 1.服务器列表 服务器列表 nameip远程端口用户名/密码cen…

One2Multi Graph Autoencoder for Multi-view Graph Clustering

One2Multi Graph Autoencoder for Multi-view Graph Clustering | Proceedings of The Web Conference 2020 (acm.org) 目录 Abstract 1 Introduction 2 Model 2.1 Overview 2.2 One2Multi Graph Convolutional Autoencoder Informative graph convolutional encoder M…

Eclipse教程 Ⅸ

今天继续来学习Eclipse 快速修复、Eclipse 浏览菜单、Eclipse 查找以及Eclipse 悬浮提示的内容&#xff01;老规矩&#xff0c;废话不多说&#xff0c;开始吧。 Eclipse 快速修复 使用快速修复 在 Eclipse 编辑器中当你输入字母时&#xff0c;编辑器会对你输入的内容进行错误…