当前位置: 首页 > news >正文

redis之集群

一.redis主从模式和redis集群模式的区别

redis主从模式:所有节点上的数据一致,但是key过多会影响性能

redis集群模式:将数据分散到多个redis节点,数据分片存储,提高了redis的吞吐量

二.redis cluster集群的特点

数据分片        多个存储入口        故障自动切换

三.redis数据存储机制

通过哈希算法将数据存储到集群中的卡槽中

四.redis cluster集群规划
三主: 192.168.145.142:7000        192.168.145.159:7001        192.168.145.160:7002
三从: 192.168.145.142:8000           192.168.145.159:8001            192.168.145.160:8002
三从保证主有问题时,及时切换
 

192.168.145.142端配置:

#创建配置文件目录
mkdir -p /data/cluster/7000
mkdir -p /data/cluster/8000
#创建配置文件......其余5个主机配置,配置文件修改端口和目录即可,其余参数一样
vim /data/cluster/7000/redis.conf
cluster-enabled yes
port 7000
dir "/data/cluster/7000" 
logfile "redis.log"
pidfile "redis.pid"
daemonize yes
bind 0.0.0.0
requirepass redispwd
masterauth redispwd
tcp-backlog 511 
tcp-keepalive 300
loglevel notice
stop-writes-on-bgsave-error yes 
rdbcompression yes
rdbchecksum yes
save 900 1
save 300 10
save 60 10000
dbfilename "dump.rdb"
slave-serve-stale-data yes  
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly yes  
appendfilename "appendonly.aof"  
appendfsync everysec
no-appendfsync-on-rewrite no  
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events g$  
hash-max-ziplist-entries 512  
hash-max-ziplist-value 64  
list-max-ziplist-entries 512  
list-max-ziplist-value 64  
set-max-intset-entries 512  
zset-max-ziplist-entries 128  
zset-max-ziplist-value 64  
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0  
client-output-buffer-limit slave 256mb 64mb 60  
client-output-buffer-limit pubsub 32mb 8mb 60  
hz 10
aof-rewrite-incremental-fsync yes启动主redis:
redis-server /data/cluster/7000/redis.conf
[root@bogon ~]# ps -ef | grep redis
root        3522       1  0 22:45 ?        00:00:00 redis-server 0.0.0.0:7000 [cluster]
root        3534    3181  0 22:51 pts/1    00:00:00 grep --color=auto redis创建3个主集群,任意一端操作均可:
redis-cli -a redispwd --cluster create 192.168.145.142:7000 192.168.145.159:7001 192.168.145.160:7002
redis-cli -a redispwd --cluster create 192.168.145.142:7000 192.168.145.160:7001 192.168.145.161:7002查看集群信息:
[root@bogon ~]#redis-cli -a redispwd -p 7000 cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:3
cluster_size:3
cluster_current_epoch:3
cluster_my_epoch:1
cluster_stats_messages_ping_sent:588
cluster_stats_messages_pong_sent:560
cluster_stats_messages_sent:1148
cluster_stats_messages_ping_received:558
cluster_stats_messages_pong_received:588
cluster_stats_messages_meet_received:2
cluster_stats_messages_received:1148[root@bogon ~]#redis-cli -a redispwd -p 7000 cluster nodes
c63dfc9a880d9b2d48864b8690797fe75ec8e173 192.168.145.160:7002@17002 master - 0 1714490094021 3 connected 10923-16383
7fbae96055629879bfce1f2ea6419e882e84cf75 192.168.145.142:7000@17000 myself,master - 0 0 1 connected 0-5460
b7b7c09a232814774a259ae24aeeb8bbacaf6db6 192.168.145.159:7001@17001 master - 0 1714490092968 2 connected 5461-10922在任意一个节点,向集群中写入数据:
[root@bogon ~]# redis-cli -p 7000 -a redispwd -c  #-c以及群的方式写入
127.0.0.1:7000> set k1 v1	#发现数据被写入了192.168.145.160:7002
-> Redirected to slot [12706] located at 192.168.145.160:7002
OK
192.168.145.160:7002> set k2 v2		#再次写入的数据被存储到了192.168.145.142:7000,可以看出数据是分布式存储的
-> Redirected to slot [449] located at 192.168.145.142:7000
OK查看存储的数据:
只能在对应的节点上查看对应的数据
[root@bogon ~]# redis-cli -p 7000 -a redispwd -c
127.0.0.1:7000> set k1 v1
-> Redirected to slot [12706] located at 192.168.145.160:7002   #7000端口生成的7002端口的数据
OK
[root@bogon ~]# redis-cli -p 7002 -a redispwd -c  #登录7002端查看数据
127.0.0.1:7002> get k1
"v1"搭建3个从集群,实现redis的高可用:
启动从redis:
[root@bogon ~]# redis-server /data/cluster/8000/redis.conf
[root@bogon ~]# ps -ef | grep redis
root        3522       1  0 Apr30 ?        00:00:09 redis-server 0.0.0.0:7000 [cluster]
root        3764       1  0 00:03 ?        00:00:00 redis-server 0.0.0.0:8000 [cluster]
root        3771    3181  0 00:08 pts/1    00:00:00 grep --color=auto redis在任意一个节点向3个主节点添加从库:
#查看集群各个节点的master id  
[root@bogon ~]# redis-cli -a redispwd -p 7000 cluster nodes7000的master id                                                          从节点                         主节点
[root@bogon ~]# redis-cli -a redispwd --cluster add-node --cluster-slave --cluster-master-id 7fbae96055629879bfce1f2ea6419e882e84cf75 192.168.145.159:8001 192.168.145.142:7000
[root@bogon ~]# redis-cli -a redispwd --cluster add-node --cluster-slave --cluster-master-id b7b7c09a232814774a259ae24aeeb8bbacaf6db6 192.168.145.160:8002 192.168.145.159:7001
[root@bogon ~]# redis-cli -a redispwd --cluster add-node --cluster-slave --cluster-master-id c63dfc9a880d9b2d48864b8690797fe75ec8e173 192.168.145.142:8000 192.168.145.160:7002加入节点后,查看角色:
[root@bogon ~]# redis-cli -a redispwd -p 7000 cluster nodes
1d267c8598fa178c5aa594a7151ff7c49e271b45 192.168.145.142:8000@18000 slave c63dfc9a880d9b2d48864b8690797fe75ec8e173 0 1714495446733 3 connected
f04dfb05f6f2bd0d6f426d8f405633c53d26d978 192.168.145.160:8002@18002 slave b7b7c09a232814774a259ae24aeeb8bbacaf6db6 0 1714495448194 2 connected
473bf9546b864d493c45a453d1d34e07bc642958 192.168.145.159:8001@18001 slave 7fbae96055629879bfce1f2ea6419e882e84cf75 0 1714495450251 1 connected
7fbae96055629879bfce1f2ea6419e882e84cf75 192.168.145.142:7000@17000 myself,master - 0 1714495449000 1 connected 0-5460
b7b7c09a232814774a259ae24aeeb8bbacaf6db6 192.168.145.159:7001@17001 master - 0 1714495451296 2 connected 5461-10922
c63dfc9a880d9b2d48864b8690797fe75ec8e173 192.168.145.160:7002@17002 master - 0 1714495452324 3 connected 10923-16383
发现出现了3主3从在任意一端,验证cluster集群的高可用:停掉7000的主库,查看8001是否提升为主库:
[root@bogon ~]# ps -ef | grep redis
root        3522       1  0 Apr30 ?        00:00:16 redis-server 0.0.0.0:7000 [cluster]
root        3764       1  0 00:03 ?        00:00:06 redis-server 0.0.0.0:8000 [cluster]
root        3927    3181  0 01:02 pts/1    00:00:00 grep --color=auto redis
[root@bogon ~]# kill -9 3522
[root@bogon ~]# ps -ef | grep redis
root        3764       1  0 00:03 ?        00:00:06 redis-server 0.0.0.0:8000 [cluster]
root        3929    3181  0 01:03 pts/1    00:00:00 grep --color=auto redis以8000的redis为入口,查看角色变化:
[root@bogon ~]# redis-cli -a redispwd -p 8000 cluster nodes
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
b7b7c09a232814774a259ae24aeeb8bbacaf6db6 192.168.145.159:7001@17001 master - 0 1714496715467 2 connected 5461-10922
f04dfb05f6f2bd0d6f426d8f405633c53d26d978 192.168.145.160:8002@18002 slave b7b7c09a232814774a259ae24aeeb8bbacaf6db6 0 1714496718560 2 connected
c63dfc9a880d9b2d48864b8690797fe75ec8e173 192.168.145.160:7002@17002 master - 0 1714496717531 3 connected 10923-16383
1d267c8598fa178c5aa594a7151ff7c49e271b45 192.168.145.142:8000@18000 myself,slave c63dfc9a880d9b2d48864b8690797fe75ec8e173 0 1714496573000 3 connected
7fbae96055629879bfce1f2ea6419e882e84cf75 192.168.145.142:7000@17000 master,fail - 1714496585074 1714496577517 1 disconnected
473bf9546b864d493c45a453d1d34e07bc642958 192.168.145.159:8001@18001 master - 0 1714496716504 4 connected 0-5460
发现了8001提升为了主库恢复redis的7000入口:
[root@bogon ~]# redis-cli -a redispwd -p 7000 cluster nodes
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
1d267c8598fa178c5aa594a7151ff7c49e271b45 192.168.145.142:8000@18000 slave c63dfc9a880d9b2d48864b8690797fe75ec8e173 0 1714497284618 3 connected
c63dfc9a880d9b2d48864b8690797fe75ec8e173 192.168.145.160:7002@17002 master - 0 1714497281543 3 connected 10923-16383
b7b7c09a232814774a259ae24aeeb8bbacaf6db6 192.168.145.159:7001@17001 master - 0 1714497283596 2 connected 5461-10922
f04dfb05f6f2bd0d6f426d8f405633c53d26d978 192.168.145.160:8002@18002 slave b7b7c09a232814774a259ae24aeeb8bbacaf6db6 0 1714497282573 2 connected
473bf9546b864d493c45a453d1d34e07bc642958 192.168.145.159:8001@18001 master - 0 1714497280513 4 connected 0-5460
7fbae96055629879bfce1f2ea6419e882e84cf75 192.168.145.142:7000@17000 myself,slave 473bf9546b864d493c45a453d1d34e07bc642958 0 1714497277000 4 connected
发现自动转换成了从角色使恢复redis的7000再次作为主角色:
[root@bogon ~]# redis-cli -p 7000 -a redispwd -c
127.0.0.1:7000> cluster failover
OK
127.0.0.1:7000> info   #转换成了主角色
# Replication
role:master
connected_slaves:1

192.168.145.159端配置:

#创建配置文件目录
mkdir -p /data/cluster/7001
mkdir -p /data/cluster/8001
#创建配置文件
同上,修改端口和目录即可启动主redis:
redis-server /data/cluster/7001/redis.conf
[root@bogon ~]# ps -ef | grep redis
root        3522       1  0 22:45 ?        00:00:00 redis-server 0.0.0.0:7000 [cluster]
root        3534    3181  0 22:51 pts/1    00:00:00 grep --color=auto redis查看集群信息:
同上搭建3个从集群,实现redis的高可用:
启动从redis:
[root@bogon ~]# redis-server /data/cluster/8001/redis.conf
[root@bogon ~]# ps -ef | grep redis
root        3522       1  0 Apr30 ?        00:00:09 redis-server 0.0.0.0:7000 [cluster]
root        3764       1  0 00:03 ?        00:00:00 redis-server 0.0.0.0:8000 [cluster]
root        3771    3181  0 00:08 pts/1    00:00:00 grep --color=auto redis

192.168.145.160端配置:

#创建配置文件目录
mkdir -p /data/cluster/7002
mkdir -p /data/cluster/8002
#创建配置文件
同上,修改端口和目录即可启动主redis:
redis-server /data/cluster/7002/redis.conf
[root@bogon ~]# ps -ef | grep redis
root        3522       1  0 22:45 ?        00:00:00 redis-server 0.0.0.0:7000 [cluster]
root        3534    3181  0 22:51 pts/1    00:00:00 grep --color=auto redis查看集群信息:
同上搭建3个从集群,实现redis的高可用:
启动从redis:
[root@bogon ~]# redis-server /data/cluster/8002/redis.conf
[root@bogon ~]# ps -ef | grep redis
root        3522       1  0 Apr30 ?        00:00:09 redis-server 0.0.0.0:7000 [cluster]
root        3764       1  0 00:03 ?        00:00:00 redis-server 0.0.0.0:8000 [cluster]
root        3771    3181  0 00:08 pts/1    00:00:00 grep --color=auto redis

相关文章:

redis之集群

一.redis主从模式和redis集群模式的区别 redis主从模式:所有节点上的数据一致,但是key过多会影响性能 redis集群模式:将数据分散到多个redis节点,数据分片存储,提高了redis的吞吐量 二.redis cluster集群的特点 数据分片 多个存储入…...

#9松桑前端后花园周刊-React19beta、TS5.5beta、Node22.1.0、const滥用、jsDelivr、douyin-vue

行业动态 Mozilla 提供 Firefox 的 ARM64 Linux二进制文件 此前一直由发行版开发者或其他第三方提供,目前Mozilla提供了nightly版本,正式版仍需要全面测试后再推出。 发布 React 19 Beta 此测试版用于为 React 19 做准备的库。React团队概述React 19…...

STM32中UART通信的完整C语言代码范例

UART(通用异步收发器)是STM32微控制器中常用的外设,用于与其他设备进行串行通信。本文将提供一个完整的C语言代码范例,演示如何在STM32中使用UART进行数据传输。 硬件配置 在开始编写代码之前,需要确保以下硬件配置&…...

【ITK统计】第一期 分类器

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享ITK中的分类器及其使用情况,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 在统计分…...

51单片机两个中断及中断嵌套

文章目录 前言一、中断嵌套是什么?二、两个同级别中断2.1 中断运行关系2.2 测试程序 三、两个不同级别中断实现中断嵌套3.1 中断运行关系3.2 测试程序 总结 前言 提示:这里可以添加本文要记录的大概内容: 课程需要: 提示&#x…...

VUE 监视数据原理

1、如何监测对象中的数据? 通过setter实现监视,且要在new vue时就传入监测的数据 (1)对象中后加的属性,vue默认不做响应式处理 (2)如需给后添加的属性做响应式,请使用如下API&#x…...

Thinkphp使用dd()函数

用过Laravel框架的同学都知道在调试代码的时候使用dd()函数打印变量非常方便,在ThinkPHP6及以上的版本框架中也默认加上了这个函数。但是在ThinkPHP5或更低版本的框架中,dd 并不是一个内置的方法,不过我们可以手动添加这个函数,步…...

Git使用指北

目录 创建一个Git仓库本地仓库添加文件文件提交到本地仓库缓冲区添加远程仓库地址本地仓库推送到远程仓库创建新的分支拉取代码同步删除缓冲区的文件,远程仓库的文件.gitignore文件 创建一个Git仓库 Git仓库分为远程和本地两种,远程仓库如Githu上创建的…...

STM32G030F6P6TR 芯片TSSOP20 MCU单片机微控制器芯片

STM32G030F6P6TR 在物联网(IoT)设备中的典型应用案例包括但不限于以下几个方面: 1. 环境监测系统: 使用传感器来监测温度、湿度、气压等环境因素,并通过无线通信模块将数据发送到中央服务器或云端平台进行分析和监控。…...

零基础入门学习Python第二阶01生成式(推导式),数据结构

Python语言进阶 重要知识点 生成式(推导式)的用法 prices {AAPL: 191.88,GOOG: 1186.96,IBM: 149.24,ORCL: 48.44,ACN: 166.89,FB: 208.09,SYMC: 21.29}# 用股票价格大于100元的股票构造一个新的字典prices2 {key: value for key, value in prices.i…...

Java面试题:多线程3

CAS Compare and Swap(比较再交换) 体现了一种乐观锁的思想,在无锁情况下保证线程操作共享数据的原子性. 线程A和线程B对主内存中的变量c同时进行修改 在线程A中存在预期值a,修改后的更新值a1 在线程B中存在预期值b,修改后的更新值b1 当且仅当预期值和主内存中的变量值相等…...

【QEMU系统分析之实例篇(十八)】

系列文章目录 第十八章 QEMU系统仿真的机器创建分析实例 文章目录 系列文章目录第十八章 QEMU系统仿真的机器创建分析实例 前言一、QEMU是什么?二、QEMU系统仿真的机器创建分析实例1.系统仿真的命令行参数2.创建后期后端驱动qemu_create_late_backends()qtest_serv…...

pyside6的调色板QPalette的简单应用

使用调色板需要先导入:from PySide6.QtGui import QPalette 调色板QPalette的源代码: class QPalette(Shiboken.Object):class ColorGroup(enum.Enum):Active : QPalette.ColorGroup ... # 0x0Normal : QPalette.ColorGrou…...

苍穹外卖项目

Day01 收获 补习git Git学习之路-CSDN博客 nginx 作用:反向代理和负载均衡 swagger Swagger 与 Yapi Swagger: 可以自动的帮助开发人员生成接口文档,并对接口进行测试。 项目接口文档网址: http://localhost:8080/doc.html Da…...

error: Execution was interrupted, reason: signal SIGABRT

c json解析时&#xff0c; error: Execution was interrupted, reason: signal SIGABRT const Json::Value points root["shapes"]; if (points.isArray()) { for (unsigned int i 0; i < points.size(); i) { std::cout << " - [" <<…...

HarmaonyOS鸿蒙应用科普课

一、什么是鸿蒙OS&#xff1f; 1.概念&#xff1a; 先给大家讲讲今天讲课的主题&#xff0c;鸿蒙OS是什么&#xff1f;鸿蒙系统大家都知道&#xff0c;就是一个操作系统&#xff0c;我们未来是为的成为鸿蒙程序员。所以我们不要将鸿蒙os完全等同于手机操作系统&#xff0c;太…...

数码管的显示

静态数码管显示 数码管有两种一种的负电压促发,一种是正电压促发,上图是单数码管的引脚 上图是数码管模组的引脚,采用了引脚复用技术 咱们这个单片机由8个单数码管,所以要用上38译码器,如下图 74138使能端,单片机上电直接就默认接通了 74HC245的作用是稳定输入输出,数据缓冲作…...

关于海康相机和镜头参数的记录

对比MV-CS020-10UC和大家用的最多的MV-CS016-10UC 其实前者适合雷达站使用&#xff0c;后者适合自瞄使用 一&#xff1a;MV-CS020-10UC的参数 二&#xff1a;对比 三&#xff1a;海康镜头选型工具...

【JavaScript】运算符

算术运算符 1. 加法运算符&#xff08;&#xff09; 加法运算符用于将两个值相加。如果两个操作数都是数字&#xff0c;则它们将被加在一起。如果其中一个操作数是字符串&#xff0c;则另一个操作数将被转换为字符串&#xff0c;然后执行字符串连接。 运算子不同&#xff0c…...

LabVIEW航空发动机主轴承试验器数据采集与监测

LabVIEW航空发动机主轴承试验器数据采集与监测 随着航空技术的迅速发展&#xff0c;对航空发动机性能的测试与监测提出了更高的要求。传统的数据采集与监测方法已难以满足当前高精度和高可靠性的需求&#xff0c;特别是在主轴承试验方面。基于LabVIEW的航空发动机主轴承试验器…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1&#xff09;下载安装包2&#xff09;配置环境变量3&#xff09;安装镜像4&#xff09;node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1&#xff09;使用 http-server2&#xff09;详解 …...

OCR MLLM Evaluation

为什么需要评测体系&#xff1f;——背景与矛盾 ​​ 能干的事&#xff1a;​​ 看清楚发票、身份证上的字&#xff08;准确率>90%&#xff09;&#xff0c;速度飞快&#xff08;眨眼间完成&#xff09;。​​干不了的事&#xff1a;​​ 碰到复杂表格&#xff08;合并单元…...

Tauri2学习笔记

教程地址&#xff1a;https://www.bilibili.com/video/BV1Ca411N7mF?spm_id_from333.788.player.switch&vd_source707ec8983cc32e6e065d5496a7f79ee6 官方指引&#xff1a;https://tauri.app/zh-cn/start/ 目前Tauri2的教程视频不多&#xff0c;我按照Tauri1的教程来学习&…...

背包问题双雄:01 背包与完全背包详解(Java 实现)

一、背包问题概述 背包问题是动态规划领域的经典问题&#xff0c;其核心在于如何在有限容量的背包中选择物品&#xff0c;使得总价值最大化。根据物品选择规则的不同&#xff0c;主要分为两类&#xff1a; 01 背包&#xff1a;每件物品最多选 1 次&#xff08;选或不选&#…...