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集群模式大大提高了数据的安全性,减少了数据丢失的可能性,但并不代表绝对不会丢失数据,在某些特定情况,也是会存在数据不统一和丢失数据的情况,只是说这种几率很小。

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

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

相关文章

c# 视频播放之Vlc.DotNet.Forms

先说下优缺点 优点&#xff1a;与电脑无关&#xff0c;能播放主流编码格式视频。 缺点&#xff1a;只能播放本地视频&#xff0c;网络视频播放不了。 下面是具体操作和代码 1. 安装Vlc.DotNet.Forms 和 VideoLAN.LibVLC.Windows Vlc.DotNet.Forms 是播放库&#xff0c;Vid…

三网话费余额查询的API系统,基于thinkphp6.0框架,附带搭建教程

系统用的是Thinkphp6.0框架 PHP版本需要用8.2 搭建教程 1、源码上传后&#xff0c;吧运行目录改为 /public 2、然后吧 数据库文件.sql 这个文件导入到数据库内 3、打开/config/database.php目录文件&#xff0c;然后进行配置数据库信息 4、挂任务计划&#xff0c;用处&…

未来的NAS:连接您的数字生活

未来的NAS&#xff1a;连接您的数字生活 引言 网络附加存储&#xff08;Network Attached Storage&#xff0c;简称NAS&#xff09;是一种通过网络连接的存储设备&#xff0c;用于集中存储和共享数据。传统的NAS设备通常包含一个或多个硬盘驱动器&#xff0c;可以通过局域网连…

【python】学习笔记01

一、基础语法 1. 字面量 - 什么是字面量&#xff1f; 在代码中&#xff0c;被写下来的的固定的值&#xff0c;称之为字面量。 - 常用的值类型 Python中常用的有6种值&#xff08;数据&#xff09;的类型。 666 13.14 "程序员"print(666) print(13.14) print(&qu…

服务器变矿机,该如何应对?

开始 恶意的挖矿程序会导致服务器cpu的异常占用&#xff0c;很让人讨厌。起初&#xff0c;我只是使用top命令显示出占用cpu不正常的进程&#xff0c;发现其中一个进程占用了百分之九十九点几&#xff0c;然后通过kill -9 <PID>命令干掉它。但总是过不了几天&#xff0c;…

C++三剑客之std::variant(二):深入剖析

目录 1.概述 2.辅助类介绍 2.1.std::negation 2.2.std::conjunction 2.3.std::is_destructible 2.4.std::is_object 2.5.is_default_constructible 2.6.std::is_trivially_destructible 2.7.std::in_place_type和std::in_place_index 3.原理分析 3.1.存储分析 3.2.…

Jira 宣布Data Center版涨价5%-15%,6年内第8次提价

近日&#xff0c;Atlassian官方面向合作伙伴发布2024年涨价通知&#xff1a; 自2024年2月15日起&#xff0c;旗下核心产品Jira Software、Confluence、Jira Service Management的DC版本&#xff08;Data Center版本&#xff09;价格提高5%-15%&#xff08;涨幅与坐席数阶梯相关…

Django中使用MySQL的视图View

文章目录 一、MySQL创建视图二、Django模型定义 一、MySQL创建视图 首先确定好自己需要链接的两张表及其对应的字段&#xff0c;视图的意义是将两张表数据联合一起变成一张新的表方便后续查询数据。 源Django两张表模型 class ProjectTaskRange(BaseModel, TimeModel):class …

IOS-高德地图SDK接入-Swift

申请key 这个要前往高德开发平台注册成为个人开发者然后在控制台创建一个应用&#xff1a; 高德开发平台 注册步骤就不写了&#xff0c;写一下创建应用的步骤&#xff1a; 1、点击应用管理——>我的应用 2、点击右上角的创建新应用 3、输入内容&#xff1a; 4、点击添加ke…

新定义51单片机(RD8G37)实现测距测速仪

本文描述用新定义51单片机&#xff08;RD8G37&#xff09;超声波一体测距传感器实现简单的测距测速仪。 测距仪演示效果 新定义RD8G37Q48RJ开发板 超声波测距模块&#xff1a; 8位并口屏 1、main.c unsigned short timeConsuming0; unsigned int oldDistance;void rectClearS…

阿里云国外服务器价格表

阿里云国外服务器优惠活动「全球云服务器精选特惠」&#xff0c;国外服务器租用价格24元一个月起&#xff0c;免备案适合搭建网站&#xff0c;部署独立站等业务场景&#xff0c;阿里云服务器网aliyunfuwuqi.com分享阿里云国外服务器优惠活动&#xff1a; 全球云服务器精选特惠…

web terminal - 如何在mac os上运行gotty

gotty可以让你使用web terminal的方式与环境进行交互&#xff0c;实现终端效果 假设你已经配置好了go环境&#xff0c;首先使用go get github.com/yudai/gotty命令获取可执行文件&#xff0c;默认会安装在$GOPATH/bin这个目录下&#xff0c;注意如果你的go版本比较高&#xff…

大数据深度学习ResNet深度残差网络详解:网络结构解读与PyTorch实现教程

文章目录 大数据深度学习ResNet深度残差网络详解&#xff1a;网络结构解读与PyTorch实现教程一、深度残差网络&#xff08;Deep Residual Networks&#xff09;简介深度学习与网络深度的挑战残差学习的提出为什么ResNet有效&#xff1f; 二、深度学习与梯度消失问题梯度消失问题…

2024年腾讯云轻量服务器和CVM云服务器性能如何?

腾讯云轻量服务器和云服务器有什么区别&#xff1f;为什么轻量应用服务器价格便宜&#xff1f;是因为轻量服务器CPU内存性能比云服务器CVM性能差吗&#xff1f;轻量应用服务器适合中小企业或个人开发者搭建企业官网、博客论坛、微信小程序或开发测试环境&#xff0c;云服务器CV…

RaspberryPi(树莓派)配置 VNC

RaspberryPi&#xff08;树莓派&#xff09;是可以通过 VNC 来连接到机器上进行图形化操作的。 什么 VNC VNC&#xff08;Virtual Network Computing&#xff09;&#xff0c;为一种使用RFB协议的屏幕画面分享及远程操作软件。此软件借由网络&#xff0c;可发送键盘与鼠标的动…

node.js(express.js)+mysql实现注册功能

文章目录 实现步骤一、获取客户端提交到服务器的用户信息&#xff0c;对表单中的数据&#xff0c;进行合法性的效验 代码如下:二、检测用户名是否被占用三、对密码进行加密四、插入新用户&#xff08;完整代码&#xff09;总结 实现步骤 一、获取客户端提交到服务器的用户信息…

plc红绿灯程序

引言&#xff1a; PLC&#xff08;Programmable Logic Controller&#xff0c;可编程逻辑控制器&#xff09;是一种用于工业自动化控制的电子设备。西门子的SIMATIC S7-200是这类设备的一个流行系列&#xff0c;广泛应用于小型至中等规模的自动化项目中。它具有以下特点&#…

常见的设计模式(模板与方法,观察者模式,策略模式)

前言 随着时间的推移&#xff0c;软件代码越来越庞大&#xff0c;随着而来的就是如何维护日趋庞大的软件系统。在面向对象开发出现之前&#xff0c;使用的是面向过程开发来设计大型的软件程序&#xff0c;面向过程开发将软件分成一个个单独的模块&#xff0c;模块之间使用函数…

[足式机器人]Part2 Dr. CAN学习笔记-Advanced控制理论 Ch04-17 串讲

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记-Advanced控制理论 Ch04-17 串讲

7.6 MySQL基本函数的使用(❤❤❤)

7.6 MySQL基本函数的使用 1. 提要2. 数字函数3. 字符函数3.1 替换字符3.2 左填充字符及截取字符串 4. 日期函数4.1 日期函数4.2 表达式占位符4.3 日期偏移计算4.4 日期间隔 5. 条件函数5.1 IF语句5.2 case...when语句 1. 提要 2. 数字函数 3. 字符函数 3.1 替换字符 -- INSERT…