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 …...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...

linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...