Redis 主从复制+哨兵+集群

Redis复制

查看docker 容器 ip

docker inspect 容器id | grep IPAddressdocker inspect -f='{{.Name}} {{.NetworkSettings.IPAddress}}' $(docker ps -aq)

修改配置文件

初始配置文件见 => redis.conf

  • 远程访问
    • bind 0.0.0.0
    • protected-mode no
  • 主机设置
    • replicaof 172.17.0.2 6379
  • 主机访问密码
    • masterauth 111111

redis_6379.conf

bind 0.0.0.0
protected-mode no
port 6379
pidfile /var/run/redis6379.pid
logfile "/data/6379.log"
dbfilename dump6379.rdb
dir /data
masterauth 111111
requirepass 111111
appendonly yes
appendfilename "appendonly.aof"
appenddirname "appendonlydir"

redis_6380.conf

bind 0.0.0.0
protected-mode no
port 6379
pidfile /var/run/redis6380.pid
logfile "/data/6380.log"
dbfilename dump6380.rdb
dir /data
replicaof 172.17.0.2 6379
masterauth 111111
requirepass 111111
appendonly yes
appendfilename "appendonly.aof"
appenddirname "appendonlydir"

redis_6381.conf

bind 0.0.0.0
protected-mode no
port 6379
pidfile /var/run/redis6381pid
logfile "/data/6381.log"
dbfilename dump6381.rdb
dir /data
replicaof 172.17.0.2 6379
masterauth 111111
requirepass 111111
appendonly yes
appendfilename "appendonly.aof"
appenddirname "appendonlydir"

主从复制:一主二从

启动

docker run --name redis79  \
-v /usr/local/redis7.2.4/6379/data:/data  \
-v /usr/local/redis7.2.4/6379/conf:/usr/local/etc/redis \
-p 6379:6379 -d 9b38108e295d \
redis-server /usr/local/etc/redis/redis6379.conf --port 6379
docker run --name redis80  \
-v /usr/local/redis7.2.4/6380/data:/data  \
-v /usr/local/redis7.2.4/6380/conf:/usr/local/etc/redis \
-p 6380:6380 -d 9b38108e295d \
redis-server /usr/local/etc/redis/redis6380.conf --port 6380
docker run --name redis81  \
-v /usr/local/redis7.2.4/6381/data:/data  \
-v /usr/local/redis7.2.4/6381/conf:/usr/local/etc/redis \
-p 6381:6381 -d 9b38108e295d \
redis-server /usr/local/etc/redis/redis6381.conf --port 6381

在这里插入图片描述

查看主从信息 info replication
在这里插入图片描述

主从问题演示

从机不可以执行写命令

在这里插入图片描述

从机从头开始复制

先下线6381(此时master未插入数据),之后master执行set,再上线6381,6381复制master全量数据

在这里插入图片描述

主机下线后,主从关系不会变化

可以看到 redis79下线再上线,主从关系没有变化,只是从机的 master_link_status up down转换
在这里插入图片描述

主从复制工作流程

  1. 建立连接
    • 节点发送slaveof命令与主节点建立连接
  2. 数据同步
    • 主节点会执行bgsave命令生成RDB快照文件,并将其发送给从节点
    • 全量复制=>在节点初始化时,将主节点的数据一次性同步到从节点
    • 增量复制=>同步自上次同步之后发生变更的数据(从机重启之后增量复制,具体是记录一个偏移量)
  3. 命令传播
    • 同步完成后,进入命令传播阶段,在此阶段,主节点将持续向从节点发送写命令

Redis哨兵

由于主从复制在master挂了之后,不会自动选取新的master,故引入哨兵。哨兵监控master和slave,当master挂了之后,在slave中选出新master

sentinel.conf

测试架构图

在这里插入图片描述

配置文件准备

查看 master 容器 IP,用于后面设置 master IP
在这里插入图片描述

sentinel26379.conf

protected-mode no
port 26379
daemonize yes
pidfile /var/run/redis-sentinel26379.pid
logfile "/data/sentinel26379.log"
dir /data
sentinel monitor mymaster 172.17.0.2 6379 2
sentinel auth-pass mymaster 111111

sentinel26380.conf

protected-mode no
port 26380
daemonize yes
pidfile /var/run/redis-sentinel26380.pid
logfile "/data/sentinel26380.log"
dir /data
sentinel monitor mymaster 172.17.0.2 6379 2
sentinel auth-pass mymaster 111111

sentinel26381.conf

protected-mode no
port 26381
daemonize yes
pidfile /var/run/redis-sentinel26381.pid
logfile "/data/sentinel26381.log"
dir /data
sentinel monitor mymaster 172.17.0.2 6379 2
sentinel auth-pass mymaster 111111

启动Redis

docker run --name redis6379  \
-v /usr/local/redis7.2.4/6379/data:/data  \
-v /usr/local/redis7.2.4/6379/conf:/usr/local/etc/redis \
-p 6379:6379 -d 9b38108e295d \
redis-server /usr/local/etc/redis/redis_6379.conf --port 6379

启动哨兵

docker run --name redis-sentinel26379 \
-v /usr/local/redis7.2.4/6379/conf/sentinel26379.conf:/usr/local/etc/redis/sentinel.conf \
-d 9b38108e295d
docker exec -it redis-sentinel26379 /bin/bash
redis-sentinel /usr/local/etc/redis/sentinel.conf

效果

所有启动的容器展示

在这里插入图片描述

搭建完成后哨兵效果

在这里插入图片描述

下线 6379 主机之后再上线效果

选举新的master,旧主变为slave

在这里插入图片描述

哨兵运行流程和选举原理

1、哨兵集群监控 master

2、sdown : sentinel 发送心跳包,一定时间没有收到master的回复,就认为主观下线

3、odown : 当有 quorum 个 sentinel 认为主观下线,就认为 master 客观下线

4、选出哨兵 leader (RAFT算法)

5、哨兵 leader 选出新master slaveof on one

- 比较优先级 `repliica-priority`  (优先级数值小的)
- 比较复制偏移量 `offset` (偏移量大的)
  • 比较 run id (run id 小的)

6、leader 让其他 slave 认新master

7、leader 让老master 降级,成为新 master 的 slave

哨兵使用建议

1、使用哨兵集群,保证高可用

2、哨兵节点的数量应该为奇数

3、哨兵集群 + 主从复制,不能保证数据零丢失

Redis集群

redis集群也不保证强一致性

Redis 集群 = 数据分片 + 高可用性。在这种模式下,数据被分散存储在多个节点上,每个节点只保存部分数据。这提高了系统的可扩展性和性能。通过一致性哈希,集群能够实现自动的数据分片,同时通过节点间的通信保持数据的同步和状态的一致。

Redis 哨兵 = 主从复制 + 故障转移。当主节点发生故障时,哨兵节点会自动将从节点升级为新的主节点,并通知其他从节点和客户端更新配置。这种模式的优势在于其自动化的故障恢复机制,提高了系统的可用性,并且配置简单。

业务需要处理大量数据并且要求高性能,集群模式更合适

业务对数据量的要求不高,但希望建立一个简单且具有高可用性的缓存系统,哨兵模式更合适

slot 槽映射 == 三种实现

在这里插入图片描述

集群搭建

配置基本相同,改下端口和文件名

bind 0.0.0.0
protected-mode no
port 7301
logfile "/data/cluster7301.log"
pidfile /data/cluster7301.pid
dir /data
dbfilename dump7301.rdb
appendonly yes
appendfilename "appendonly7301.aof"
requirepass 111111
masterauth 111111cluster-enabled yes
cluster-config-file nodes-7301.conf
cluster-node-timeout 5000

启动六个实例

docker run --name redis7301  \
-v /usr/local/redis7.2.4/cluster/data:/data  \
-v /usr/local/redis7.2.4/cluster/conf/redis-cluster-7301.conf:/usr/local/etc/redis/redis.conf \
-p 7301:7301 -d 9b38108e295d \
redis-server /usr/local/etc/redis/redis.conf --port 7301
docker run --name redis7306  \
-v /usr/local/redis7.2.4/cluster/data:/data  \
-v /usr/local/redis7.2.4/cluster/conf/redis-cluster-7306.conf:/usr/local/etc/redis/redis.conf \
-p 7306:7306 -d 9b38108e295d \
redis-server /usr/local/etc/redis/redis.conf --port 7306

启动容器并查看IP

docker inspect -f='{{.Name}} {{.NetworkSettings.IPAddress}}' $(docker ps -aq)

在这里插入图片描述

构建主从关系

进入容器 redis 7301

docker exec -it redis7301 /bin/bash

将六个节点加入到集群,一主一从

redis-cli -p 7301 -a 111111 --cluster create --cluster-replicas 1 \
172.17.0.7:7306 \
172.17.0.6:7305 \
172.17.0.5:7304 \
172.17.0.4:7303 \
172.17.0.3:7302 \
172.17.0.2:7301

在这里插入图片描述

查看集群和节点状态

在这里插入图片描述

操作集群

集群需要路由到位 ,即命令中添加 -c

在这里插入图片描述

查看key属于哪个槽

cluster keyslot key

在这里插入图片描述

主从切换

在这里插入图片描述

在这里插入图片描述

故障转移

redis7306 重新上线后,主从关系变了,为了改回初始的主从关系,登录到原来的主机使用 cluster failover

在这里插入图片描述

扩容

docker run --name redis7307  \
-v /usr/local/redis7.2.4/cluster/data:/data  \
-v /usr/local/redis7.2.4/cluster/conf/redis-cluster-7307.conf:/usr/local/etc/redis/redis.conf \
-p 7307:7307 -d 9b38108e295d \
redis-server /usr/local/etc/redis/redis.conf --port 7307
docker run --name redis7308  \
-v /usr/local/redis7.2.4/cluster/data:/data  \
-v /usr/local/redis7.2.4/cluster/conf/redis-cluster-7308.conf:/usr/local/etc/redis/redis.conf \
-p 7308:7308 -d 9b38108e295d \
redis-server /usr/local/etc/redis/redis.conf --port 7308
redis-cli -a 111111 -p 7301  --cluster add-node \
172.17.0.8:7307 \
172.17.0.2:7301

redis-cli -a 111111 -p 7301 --cluster add-node 要加入的节点信息【IP:PORT】 集群中任一节点信息【IP:PORT】

在这里插入图片描述

查看集群状态(新节点未分配槽位)

redis-cli -a 111111 -p 7301 --cluster check 【IP:PORT】 集群中的任一节点都能得到信息

重新分配槽位

在这里插入图片描述
在这里插入图片描述

分配从节点

redis-cli -a 密码 --cluster add-node ip:新slave端口 ip:新master端口 --cluster-slave --cluster-master-id 新主机节点ID

redis-cli -a 111111 -p 7301 --cluster add-node \
172.17.0.9:7308 \
172.17.0.8:7307 \
--cluster-slave --cluster-master-id 4a849f4b3d5e9e6bbf4412e8c86e7904477f4d4b

在这里插入图片描述

在这里插入图片描述

缩容

删除从节点7308

命令:redis-cli -a 密码 --cluster del-node ip:端口 节点ID

redis-cli -a 111111 -p 7301 --cluster del-node 172.17.0.9:7308 14cca2509252d583b06d3fe521eed8661f7efc15

将主节点7307的槽位重新分配给其他主节点

redis-cli -a 111111 --cluster reshard 172.17.0.2:7301

在这里插入图片描述

槽位重新分配,7307也变为从节点

在这里插入图片描述

删除原主节点7307

redis-cli -a 111111 -p 7301 --cluster del-node 172.17.0.8:7307 4a849f4b3d5e9e6bbf4412e8c86e7904477f4d4b

在这里插入图片描述

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

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

相关文章

Vue66-vue-默认插槽

一、默认插槽需求 1-1、原本的写法: 在每个category组件中用v-show来做条件渲染,但是不方便! 1-2、默认插槽 img标签,ul标签,video标签,都是在app组件中完成解析之后,塞到category组件中的&…

汉朔科技IPO:引领智慧零售新时代,推动行业数字化转型

汉朔科技是一家以物联网无线通信技术为核心的高新技术企业,围绕零售门店数字化领域,构建了以电子价签系统、SaaS云平台服务等软硬件产品及服务为核心的业务体系。凭借公司技术实力、战略布局和多年行业积累,汉朔科技成为了零售门店数字化解决…

蓝鹏测控公司全长直线度算法项目多部门现场组织验收

关键字:全场直线度算法,直线度测量仪,直线度检测,直线度测量设备, 6月18日上午,蓝鹏测控公司全长直线度算法项目顺利通过多部门现场验收。该项目由公司技术部、开发部、生产部等多个部门共同参与,旨在提高直线度测量精度,满足高精度制造领域需…

Redis分片集群搭建

主从模式可以解决高可用、高并发读的问题。但依然有两个问题没有解决: 海量数据存储高并发写 要解决这两个问题就需要用到分片集群了。分片的意思,就是把数据拆分存储到不同节点,这样整个集群的存储数据量就更大了。 Redis分片集群的结构如…

LVGL使用GUI Guider配置STM32界面详细笔记教程

0、说明 接着前面几篇博客对LVGL的使用和介绍,这篇博客主要是使用和介绍快速配置LVGL图形界面编程的工具,GUI Guider。本文使用的工程代码,均是基于前几篇博客的基础上的,如需下载已配置好的LVGL-MCU工程环境,可通过如…

【R语言】对一个Plot绘制多个图,并且每个图单元也包含多个图

以一个Plot绘制五行六列共30个图&#xff0c;然后每30个图单元包含两个图为例&#xff1a; 如下图所示&#xff1a; 代码如下&#xff1a; for (i in 1:(5*6)) {create_subplots <- function() {library(ggplot2)library(dplyr)library(tidyr)# 创建一个随机的数据框simula…

【机器学习】机器学习重要方法—— 半监督学习:理论、算法与实践

文章目录 引言第一章 半监督学习的基本概念1.1 什么是半监督学习1.2 半监督学习的优势 第二章 半监督学习的核心算法2.1 自训练&#xff08;Self-Training&#xff09;2.2 协同训练&#xff08;Co-Training&#xff09;2.3 图半监督学习&#xff08;Graph-Based Semi-Supervise…

【服务器04】之【Navicat连接阿里云】

通过前三篇文章&#xff0c;现在我们测试可以连接数据库了 点开桌面的 接下找来的主机 地址在以下 登录阿里云 登陆账号后 点击控制台 输入RDS 弹出新页面&#xff0c;并点击运行中的 1 点管理 复制外网地址 鼠标靠近就会出现复制图标 用户名 和 密码 是注册阿里云的高权限账…

对错问题:凡事没有绝对的对与错,要看义所在、良知所在

孔子说&#xff1a;君子对于天下所发生的很多事&#xff0c;如评判政策变动、战争等&#xff0c;没有绝对的对&#xff0c;也没有绝对的错&#xff0c;一切要看事情本身是否符合“ 义 ”。

实验2:RIPv2的配置

由于RIPv1是有类别的路由协议,路由更新不携带子网信息,不支持不连续子网、VLSM、手工汇总和验证等&#xff0c;本书重点讨论RIPv2。 1、实验目的 通过本实验可以掌握&#xff1a; RIPv1和 RIPv2的区别。在路由器上启动RIPv2路由进程。激活参与RIPv2路由协议的接口。auto-sum…

SpringSecurity实战入门——认证

项目代码 gson/spring-security-demo 简介 Spring Security 是 Spring 家族中的一个安全管理框架。相比与另外一个安全框架Shiro,它提供了更丰富的功能,社区资源也比Shiro丰富。 一般来说中大型的项目都是使用SpringSecurity来做安全框架。小项目有Shiro的比较多,因为相比…

WordPress管理员后台登录地址修改教程,WordPress admin登录地址文件修改方法

我们使用WordPress时&#xff0c;管理员后台登录默认地址为“域名/wp-login.php”或“域名/wp-admin”&#xff0c;为了安全&#xff0c;一般会把此地址改掉&#xff0c;防止有人恶意来攻击咱的WordPress&#xff0c;今天出个WordPress后台登录地址修改教程&#xff0c;修改之后…

如何用Xcode创建你的第一个项目?学起来

前言 上一期&#xff0c;咱们已经有安装XCode的教程了。有小伙伴说建议跳过&#xff0c;嗯。。。如果你对开发很熟悉&#xff0c;那可以。但如果不熟悉&#xff0c;建议还是按照教程一步步来哦&#xff01; 毕竟统一了开发工具&#xff0c;咱们后续讲的内容学习起来也会简单一…

【java】数学运算考试系统

目录 一、登录界面&#xff1a; 二、管理员界面&#xff1a; 三、学生考试界面&#xff1a; 面向小学低年级学生&#xff0c;随机生成两个整数的加减法算式要求学生解答。要求有用 户登录、注册等 GUI 界面&#xff0c;用户数据存入文件&#xff0c;体现面向对象编程思想。 …

推荐系统三十六式学习笔记:原理篇.矩阵分解12|如果关注排序效果,那么这个模型可以帮到你

目录 矩阵分解的不足贝叶斯个性化排序AUC构造样本目标函数训练方法 总结 矩阵分解在推荐系统中的地位非常崇高。它既有协同过滤的血统&#xff0c;又有机器学习的基因&#xff0c;可以说是非常优秀了&#xff1b;但即便如此&#xff0c;传统的矩阵分解无论是在处理显式反馈&…

Python学习打卡:day11

day11 笔记来源于&#xff1a;黑马程序员python教程&#xff0c;8天python从入门到精通&#xff0c;学python看这套就够了 目录 day1183、自定义 Python 包创建包导入包方式1方式2方式3方式4 84、安装第三方包安装第三方包——pippip的网络优化 安装第三方包——PyCharm 85、…

Exposure X7软件安装包下载 丨不限速下载丨亲测好用

根据使用者情况表明Exposure的设计鼓励您进行创造性的工作&#xff0c;使用涂刷和遮罩工具将效果有选择地应用于图片的特定区域&#xff0c;非破坏性图层使您能够混合预设和调整&#xff0c;以获得无尽的外观。我们都知道Exposure是用于创意照片编辑的最佳图片编辑器&#xff0…

Ruby on Rails Post项目设置网站初始界面

在构建了Ruby的Web服务器后&#xff0c;第三步就可以去掉框架的官方页面&#xff0c;设置自己的网页初始页了。 Linux系统安装Ruby语言-CSDN博客 、在Ubuntu中创建Ruby on Rails项目并搭建数据库-CSDN博客、 Ruby语言建立Web服务器-CSDN博客 了解Ruby onRails项目中的主要文件…

OceanBase v4.2 特性解析:支持并发建表,提升OMS导入效率

背景 OceanBase 4.0版本新增了单日志流架构&#xff0c;使得OBServer单机突破了原有的分区数限制&#xff0c;支持更大数量的分区。 很多业务环境为了处理单机数据量过大的问题&#xff0c;通常采取分库分表的方法&#xff0c;这一方法会导致业务需要创建数十万乃至百万级别的…

贪吃蛇——c语言版

文章目录 演示效果实现的基本功能技术要点源代码实现功能GameStart打印欢迎界面和功能介绍绘制地图创建蛇创建食物 GameRun打印提示信息蛇每走一步 GameEnd蛇死亡后继续游戏 演示效果 贪吃蛇1.0演示视频 将终端应用程序改为控制台主机 实现的基本功能 贪吃蛇地图绘制蛇吃食物的…