redis7部署集群:包含主从模式、哨兵模式、Cluster集群模式等三种模式
前言:
redis部署集群常见的一般有三种模式:主从模式,Sentinel(哨兵模式),Redis Cluster(高可用Cluster集群),根据不同的需求可自定义选择部署方式。
Redis 主从模式(Replication)
优点:
数据备份:主节点的数据会复制到从节点,提供了数据冗余和一定程度的故障恢复能力。
读写分离:可以将读操作分散到从节点上执行,减轻主节点的压力,提高系统的读取性能。
扩容:通过添加从节点可扩展只读操作的能力。
缺点:
无自动故障转移:当主节点发生故障时,需要人工介入进行故障切换,并更新客户端指向新的主节点。
写性能瓶颈:所有写操作必须在主节点完成,因此主节点成为系统写入的瓶颈。
数据同步延迟:主从之间存在一定的数据同步延迟,可能导致短时间内从节点数据不一致。
Sentinel(哨兵)模式
优点:
高可用性:Sentinel 系统能够自动检测主节点是否下线,并自动完成故障转移,选举新的主节点。
监控与通知:Sentinel 可以持续监控Redis服务器的状态并发送通知。
配置中心:客户端可以通过连接Sentinel来获取当前主节点的信息,无需硬编码主节点地址。
缺点:
复杂性增加:相较于主从模式,增加了Sentinel集群的部署、管理和维护成本。
网络问题敏感:由于依赖于Sentinel之间的通信,网络问题可能会影响故障转移的正确性和效率。
资源消耗:每个Sentinel实例都需要占用一定的系统资源。
Redis Cluster(集群模式)
优点:
分布式存储:数据分布在多个节点上,支持水平扩展,提供更大的存储容量和更高的吞吐量。
自动分片:通过哈希槽分区实现数据的自动分片和负载均衡。
自动故障转移:支持节点间自动故障转移和数据迁移,提高了整个系统的可用性。
缺点:
数据迁移开销:在添加或删除节点时,可能会触发大规模的数据迁移,影响集群性能。
客户端兼容性要求:部分操作如跨slot键操作、批量操作等,在Cluster模式下受到限制,客户端需支持Cluster特性才能正常使用。
更复杂的运维:相对于单机和主从模式,集群模式对运维人员的技术要求更高,且集群配置相对复杂。
主从模式适合简单场景下的数据备份和读写分离需求,但不适合需要自动故障转移和高度扩展的应用。
哨兵模式为了解决主从模式中自动故障转移的问题而设计,适用于对高可用性有较高要求的场景。
集群模式则针对大规模数据处理和高并发场景,提供了良好的水平扩展能力和自动化管理功能。
演示版本: 此教程不记录redis的安装过程
系统:anolis8.4虚拟机(阿里的龙蜥系统,可以看成相当于centos8系统)
redis:7.0.14
开始部署: 以下演示都在同一台机器,实际的生产环境还是建议配置到多台机器中
------------------------------我是昏割线------------------------------主从模式:
可以部署最简单的一主一从,也可以部署一主多从,下面以一主一从为例,主端口6379,从端口6380。
准备好一个安装好的redis,因为我是安装好redis后,只拷贝了需要的目录与文件,所以只有bin和etc两个目录,同时创建好存放数据的文件夹,以及日志文件夹,日志看自己需求需不需要配置,etc下就是redis的配置文件。



配置主节点redis_6379.conf配置文件:
支持后台运行:
daemonize yes
日志路径:看自己需求,也可以不配置
logfile "/home/l/kxm/serv/redis_PS/redis/log"
指定数据存放位置:默认配置是"./",集群模式下必须指定路径,不然容易丢失数据
dir /home/l/kxm/serv/redis_PS/redis/data_6379
配置从节点redis_6380.conf配置文件:
复制主配置文件:
cp redis_6379.conf /home/l/kxm/serv/redis_PS/redis/etc/redis_6380.conf
配置replicaof节点:从配置要比主配置多一个replicaof节点配置,用于绑定主节点。
replicaof 主节点ip 主节点redis端口,例:
replicaof localhost 6379
这里特别说明一下,因为我是做演示,主从都配置在同一台机器上,最开始ip写的是指定ip,比如192.168.xxx.xxx这种,这样行不通,从节点一直连不上主节点,后面发现写成localhost或者127.0.0.1是没问题的。
批量修改6379关键字:因为是复制的6379的配置,把从节点配置中所有6379都改成6380
vim redis_6380.conf
:%s/6379/6380/g
到这里配置完成,启动两个redis:我的目录比较长,其实就是redis-server redis.conf命令
/home/l/kxm/serv/redis_PS/redis/bin/redis-server /home/l/kxm/serv/redis_PS/redis/etc/redis_6379.conf
/home/l/kxm/serv/redis_PS/redis/bin/redis-server /home/l/kxm/serv/redis_PS/redis/etc/redis_6380.conf
查询所有启动的redis:
ps -ef|grep redis
正常运行:

分别进入主从节点redis:
redis-cli -p 6379
redis-cli -p 6380
进入后验证:
info Replication
主节点:role:master,代表主节点;connected_slaves:1,已连接一个从节点;

从节点:role:slave,代表从节点;master_link_status:up,代表主节点可用,如果是down,代表不可用,可能原因:网络问题,主节点下线,replicaof配置错误,密码验证失败;

我这里没有配置密码,需要密码的自行配置requirepass选项:

在主节点中,添加数据:
set a 1
在从节点中,获取数据:能获取到值为1,那就部署完了。
get a
注意:
1.主节点可读可写,从节点只读。
2.如果把从节点的数据删除,重启从节点后,会自动复制主节点的数据。
3.如果把主节点数据删除,从节点数据同样会删除。
4.如果主节点挂掉,需要手动重新配置主节点。
------------------------------我是昏割线------------------------------哨兵模式:
哨兵模式也是遵从主从模式,但是哨兵模式最少必须要配置三个节点,也就是1主2从,可以先按照上面主从模式的方法先配置好三个节点并启动redis.

相比于主从模式,哨兵模式下多了个redis-sentinel


节点配置好后,现在开始配置哨兵
在etc配置目录下创建sentinel_26379.conf文件,这就是哨兵的配置文件,并在文件中填写以下配置:
# 端口
port 26379# 后台运行
daemonize yes# 进程文件:程序启动后会自动把进程文件写进run目录中
pidfile "/home/l/kxm/serv/redis_sentinel/redis/run/sentinel_26379.pid"# 日志文件
logfile "/home/l/kxm/serv/redis_sentinel/redis/log/sentinel_26379.log"# 数据目录
dir "/home/l/kxm/serv/redis_sentinel/redis/data_6379"# 如果设置了密码
# sentinel auth-pass mymaster <password># 客观下线的判断节点数:这里注意,如果是部署在同一台机器中,这里只能写指定ip或者127.0.0.1,不能写localhost
sentinel monitor mymaster 127.0.0.1 6379 2# 主观下线的等待时间
sentinel down-after-milliseconds mymaster 30000# 限制从节点向新主节点发起复制并发数
sentinel parallel-syncs mymaster 1# 故障转移超时时间
sentinel failover-timeout mymaster 180000
26379配置好后,复制出26380和26381,并把文件中26379关键字改成对应文件的关键字,到此哨兵配置完成。
分别启动哨兵:其实就是redis-sentinel sentinel.conf命令
/home/l/kxm/serv/redis_sentinel/redis/bin/redis-sentinel /home/l/kxm/serv/redis_sentinel/redis/etc/sentinel_26379.conf
/home/l/kxm/serv/redis_sentinel/redis/bin/redis-sentinel /home/l/kxm/serv/redis_sentinel/redis/etc/sentinel_26380.conf
/home/l/kxm/serv/redis_sentinel/redis/bin/redis-sentinel /home/l/kxm/serv/redis_sentinel/redis/etc/sentinel_26381.conf
验证:
ps -ef|grep redis

redis-cli -p 6379 info Replication

redis-cli -p 26379 sentinel master mymaster

成功启动后,配置文件会有改变:

注意:
1.主节点可读可写,从节点只读,这跟主从模式是一样的。
2.如果某个从节点挂掉,其他的主从结构依旧可正常运行,如果所有从节点挂掉,主节点依旧可正常运行,等从节点恢复后,会自动复制主节点数据。
3.如果主节点挂掉,哨兵会在从节点中自动选择一个作为主节点,如果之前的主节点恢复,之前的主节点会变成新的从节点,哨兵并不会恢复之前的主节点。
4.相比于主从模式,哨兵模式更智能,但是在实际的生产环境中,包括主从模式也一样,如果主节点挂掉,其实是有概率丢失数据的,虽然哨兵模式会自动更换节点,但这是有一个过程的,并不是一瞬间完成。
------------------------------我是昏割线------------------------------高可用Cluster集群模式:
严格来说Cluster集群才是真正的集群,Cluster集群模式至少要部署两台机器才能叫做高可用,而且从节点不能与主节点在同一台机器,这里演示还是在一台机器上演示。
Cluster集群模式最少要配置6个节点,最少要三主三从。



配置redis_6381.conf:
后台运行:
daemonize yes
日志:
logfile "/home/l/kxm/serv/redis_cluster/redis/log/redis-6381.log"
数据目录:
dir /home/l/kxm/serv/redis_cluster/redis/data_6381
启动集群模式:redis新版本中自带cluster-enabled集群配置,放开注释就行
cluster-enabled yes
cluster-config-file nodes-6381.conf
cluster-node-timeout 15000
注意,Cluster集群模式不需要像主从模式和哨兵模式那样配置replicaof,后面启动集群时会自己创建主从关系。
复制其他五个节点的配置:复制完成后,记得把这些配置中的6381关键字改成对应文件的关键字
cp redis_6381.conf redis_6382.conf
cp redis_6381.conf redis_6383.conf
cp redis_6381.conf redis_6384.conf
cp redis_6381.conf redis_6385.conf
cp redis_6381.conf redis_6386.conf
先启动redis:还是redis-server redis.conf命令
/home/l/kxm/serv/redis_cluster/redis/bin/redis-server /home/l/kxm/serv/redis_cluster/redis/etc/redis_6381.conf
/home/l/kxm/serv/redis_cluster/redis/bin/redis-server /home/l/kxm/serv/redis_cluster/redis/etc/redis_6382.conf
/home/l/kxm/serv/redis_cluster/redis/bin/redis-server /home/l/kxm/serv/redis_cluster/redis/etc/redis_6383.conf
/home/l/kxm/serv/redis_cluster/redis/bin/redis-server /home/l/kxm/serv/redis_cluster/redis/etc/redis_6384.conf
/home/l/kxm/serv/redis_cluster/redis/bin/redis-server /home/l/kxm/serv/redis_cluster/redis/etc/redis_6385.conf
/home/l/kxm/serv/redis_cluster/redis/bin/redis-server /home/l/kxm/serv/redis_cluster/redis/etc/redis_6386.conf
创建集群:
此命令会根据ip地址的排序决定谁是主节点,谁是从节点,默认前面是主节点,后面是从节点,前面三个是主节点,后面三个是从节点。
注意–cluster-replicas 1配置,意思是每个主节点有多少个从节点,三主三从就是1,每个主节点有一个从节点;三主六从就是2,每个主节点有两个从节点;三主九从就是3,每个主节点有三个从节点,以此类推。
redis-cli --cluster create localhost:6381 localhost:6382 localhost:6383 localhost:6384 localhost:6385 localhost:6386 --cluster-replicas 1
出现以下提示是提示我们主从在同一台机器上,这里演示就输入yes跳过:

创建完成后,会显示以下界面,写的很清楚了,有三主三从:

验证:
ps -ef|grep redis

查看主从关系;
redis-cli --cluster check localhost:6381

普通方式登录:没有转发机制,假设在6381上获取6382的key,会报错
redis-cli -h localhost -p 6381
集群方式登录:推荐这种方式,默认开启转发机制,假设在6381上获取6382的key,会自动转发,然后成功获取
redis-cli -h localhost -p 6381 -c
获取集群关系:
redis-cli -h localhost -p 6381 -c cluster slots | xargs -n8 | awk '{print $3":"$4"->"$6":"$7}' | sort -nk2 -t ':'|uniq

到这里部署已完成,可以登录某个主节点后测试:
set a1 1
set a2 2
set a3 3
set a4 4


你会发现,每写入一个数据后,会分配到别的主节点上去,说明集群正常运行,数据分布在多个节点上,支持水平扩展存储方式,实现了真正意义上的集群。
注意:
1.不管哪个从节点挂掉,对整体集群运行没有影响,从节点恢复后,会自动复制主节点数据
2.不管哪个主节点挂掉,对整体集群运行没有影响,从节点会变成新的主节点,主节点恢复后,会变成新的从节点,但这是有一个过程的,并不是一瞬间完成。
3.如果某个主节点和它的从节点同时挂掉,那么整个集群将变得不可用,这就是前面为什么说最少配置两台机器,而且主节点和从节点不能在同一台机器的原因。
4.相比于主从模式和哨兵模式,Cluster集群模式可以说是实现了真正意义上的集群,不仅仅支持自动故障转移,也支持自动分片和分布式存储。但是,redis集群是没有绝对数据安全的,只能说相比于主从和哨兵模式,Cluster集群模式大大提高了数据的安全性,减少了数据丢失的可能性,但并不代表绝对不会丢失数据,在某些特定情况,也是会存在数据不统一和丢失数据的情况,只是说这种几率很小。
相关文章:
redis7部署集群:包含主从模式、哨兵模式、Cluster集群模式等三种模式
前言: redis部署集群常见的一般有三种模式:主从模式,Sentinel(哨兵模式),Redis Cluster(高可用Cluster集群),根据不同的需求可自定义选择部署方式。 Redis 主从模式&…...
072:vue+mapbox 点击某图层feature,高亮这部分
第072个 点击查看专栏目录 本示例是介绍如何在vue+mapbox中点击某图层feature,高亮这部分。思路是通过点击,获取点击部分的feature信息,生成一个新的source和layer,如果这个图层不为空,则清除之,相当于点击了别的地方,原有的高亮会删除掉,在别的地方高亮。 直接复制下…...
2024年最新安全且稳定的大数据传输方式
随着大数据时代的兴起,数据传输的速度和效率已经成为企业竞争的关键因素。到了2024年,大数据传输领域迎来了新的趋势和挑战,同时也涌现出了一系列创新的解决方案。本文将深入探讨这些新趋势和解决方案,意在帮助企业更好地迎接大数…...
Docker 数据卷容器
docker在容器中管理数据主要有两种方式: 数据卷(Volumes)挂载主机目录(Bind mounts) 而每个容器的数据都是独立的,数据跟随着容器的生命周期。如mysql容器,如果容器被删除了所有的数据都会丢失…...
深度学习记录--梯度检验
数值逼近 为了对梯度进行检验,需要计算近似误差值来接近梯度 对于单边误差和双边误差公式,其中双边误差与真实梯度相差更小,故一般采用双边误差公式 双边误差 公式: 梯度检验(gradient checking) 对于成本函数,求出…...
ERP进出库+办公用品管理系统
系统架构 简介系统架构部分页面结构图UML逻辑图办公用品入出库 简介 本系统适用于ERP企业公司职员关于系统化的申请相关办公用品,提高整体系统整合行,加大上下级之间的联系,规避因人员过多,而浪费人力在简单重复的工作中…...
Redis 笔记一
概览 1.Redis核心数据存储结构 2.Redis底层String编码int&embstr&raw 3.Redis底层压缩列表&跳表&哈希表 4.Redis底层Zset实现压缩列表和跳表如何选择 5.基于Redis实现微博&抢红包&12306核心业务 辅助学习:Redis 教程 | 菜鸟教程 1.Redis为什…...
学习记录687@spring data jpa 动态传递list参数并判断list是否为空
实际应用中需要在spring data jpa中使用原生sql,传递的参数是list,要根据list判断是否为空来判断是否要使用这个参数。 尝试了很多方法,比如size、length、is null、!null等等,都要报错,比如could not extract Result…...
寒假刷题第五天
PTA甲级 1022 Digital Library 大模拟 #include<iostream> #include<unordered_map> #include<unordered_set> #include<vector> #include<set>using namespace std;unordered_map<string , set<int>>ti , au , key , pub , year…...
Leetcode454四数相加Ⅱ(java实现)
今天,我们分享的题目是Leetcode454四数相加Ⅱ,我们先来看题目: 首先可以从题意中大体得知,也是从某个集合中找有没有符合条件的元素。遇见这种类型的题目我们可以考虑用哈希表,本题我们选取的是map集合,因…...
mysql 容器化安装(docker)离线和在线
前言:在部署hive或airflow 升级过程中,总需要一个对应的数据库存储元数据,一个轻量级的mysql容器刚刚好。轻量、可快速移植、具有隔离性。 文章目录 1、查看机器版本2、安装 docker3、启动docker 服务4、docker 常用命令docker5、拉取mysql …...
2. FPGA的电路结构概述
文章目录 1. 引言2. FPGA的一般结构2.1 概要2.2 FPGA三部分构成间的关系: 3. 小结 1. 引言 结构决定原理。原理未必决定结构。理解FPGA结构,进而能阐明其工作原理很有必要。FPGA产品的风云变换,其基本结构保持相对不变。 2. FPGA的一般结构…...
【Qt】Qt配置
需要云服务器等云产品来学习Linux的同学可以移步/-->腾讯云<--/-->阿里云<--/-->华为云<--/官网,轻量型云服务器低至112元/年,新用户首次下单享超低折扣。 目录 一、Qt SDK下载 二、配置环境变量 三、新建工程(QWidget) 四、QWidg…...
查看Linux系统内存、CPU、磁盘使用率和详细信息
一、查看内存占用 1、free # free -m 以MB为单位显示内存使用情况 [rootlocalhost ~]# free -mtotal used free shared buff/cache available Mem: 11852 1250 8668 410 1934 9873 Swap: 601…...
HttpServletRequest getServerPort()、getLocalPort() 、getRemotePort() 区别
getRemotePort() 、getServerPort()、getLocalPort() request.getServerPort()、request.getLocalPort() 和 request.getRemotePort() 这三个方法都是获取与HTTP请求相关的端口信息的 客户端(如浏览器)通过某个随机分配的网络连接端口(7070) 向服务器发送HTTP请求( http://exam…...
NVIDIA jetson编译opencv 源码 python版本
安装 jetson-stats 查看GPU的利用率 sudo apt-get install python3-pip sudo -H pip3 install jetson-stats 运行 jtop 进行查看 opencv 编译python版本 编译命令 cmake -D CMAKE_INSTALL_PREFIX/usr/local/opencv-4.6.0 -D CMAKE_BUILD_TYPERELEASE -D WITH_OPENGLON -D …...
TCP的三次握手,四次挥手
三次握手 第一次握手:客户端发送SYN报文,井发送seq为x序列号给服务端,等待服务端的确认第二次握手:服务端发送SYNACK报文,并发送seq为Y的序列号,在确认序列号为x1第三次握手:客户端发送ACK报文&…...
ElasticSearch高阶使用
目录 一、match_all 二、 text和keyword的区别 三、match、term的区别 四、exists query 五、 ids query 六、range query范围查询 七、prefix query前缀查询 八、 wildcard query通配符查询 九、 fuzzy query模糊查询 十、match query匹配查询 十一、multi_match q…...
美易官方:盘前:道指期货跌0.4% “恐怖数据”将发布
盘前:道指期货跌0.4% “恐怖数据”将发布 在今日的盘前交易中,道琼斯工业平均指数期货小幅下跌0.4%,市场正在等待即将发布的“恐怖数据”——美国零售销售数据。这一数据被视为衡量美国经济健康状况的重要指标,因此备受关注。 由于…...
appium之联动pycharm
前置条件: 1.java环境安装好了 2.android-sdk安装好(uiautomatorviewer 也可以把这个启动起来) 3.appium安装好 4.adb devices查看下设备是否连接 pycharm入门代码--固定写法 from appium import webdriver# 定义字典变量 desired_caps …...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
React从基础入门到高级实战:React 实战项目 - 项目五:微前端与模块化架构
React 实战项目:微前端与模块化架构 欢迎来到 React 开发教程专栏 的第 30 篇!在前 29 篇文章中,我们从 React 的基础概念逐步深入到高级技巧,涵盖了组件设计、状态管理、路由配置、性能优化和企业级应用等核心内容。这一次&…...
TJCTF 2025
还以为是天津的。这个比较容易,虽然绕了点弯,可还是把CP AK了,不过我会的别人也会,还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...
GAN模式奔溃的探讨论文综述(一)
简介 简介:今天带来一篇关于GAN的,对于模式奔溃的一个探讨的一个问题,帮助大家更好的解决训练中遇到的一个难题。 论文题目:An in-depth review and analysis of mode collapse in GAN 期刊:Machine Learning 链接:...
java 局域网 rtsp 取流 WebSocket 推送到前端显示 低延迟
众所周知 摄像头取流推流显示前端延迟大 传统方法是服务器取摄像头的rtsp流 然后客户端连服务器 中转多了,延迟一定不小。 假设相机没有专网 公网 1相机自带推流 直接推送到云服务器 然后客户端拉去 2相机只有rtsp ,边缘服务器拉流推送到云服务器 …...
【字节拥抱开源】字节团队开源视频模型 ContentV: 有限算力下的视频生成模型高效训练
本项目提出了ContentV框架,通过三项关键创新高效加速基于DiT的视频生成模型训练: 极简架构设计,最大化复用预训练图像生成模型进行视频合成系统化的多阶段训练策略,利用流匹配技术提升效率经济高效的人类反馈强化学习框架&#x…...
组合模式:构建树形结构的艺术
引言:处理复杂对象结构的挑战 在软件开发中,我们常遇到需要处理部分-整体层次结构的场景: 文件系统中的文件与文件夹GUI中的容器与组件组织结构中的部门与员工菜单系统中的子菜单与菜单项组合模式正是为解决这类问题而生的设计模式。它允许我们将对象组合成树形结构来表示&…...
