当前位置: 首页 > 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的航空发动机主轴承试验器…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南&#xff1a;计算机基础与源码原理深度解析 第一轮提问&#xff1a;基础概念问题 1. 请解释什么是进程和线程的区别&#xff1f; 面试官&#xff1a;进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的…...

Bean 作用域有哪些?如何答出技术深度?

导语&#xff1a; Spring 面试绕不开 Bean 的作用域问题&#xff0c;这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开&#xff0c;结合典型面试题及实战场景&#xff0c;帮你厘清重点&#xff0c;打破模板式回答&#xff0c…...

c# 局部函数 定义、功能与示例

C# 局部函数&#xff1a;定义、功能与示例 1. 定义与功能 局部函数&#xff08;Local Function&#xff09;是嵌套在另一个方法内部的私有方法&#xff0c;仅在包含它的方法内可见。 • 作用&#xff1a;封装仅用于当前方法的逻辑&#xff0c;避免污染类作用域&#xff0c;提升…...

恶补电源:1.电桥

一、元器件的选择 搜索并选择电桥&#xff0c;再multisim中选择FWB&#xff0c;就有各种型号的电桥: 电桥是用来干嘛的呢&#xff1f; 它是一个由四个二极管搭成的“桥梁”形状的电路&#xff0c;用来把交流电&#xff08;AC&#xff09;变成直流电&#xff08;DC&#xff09;。…...

二叉树-144.二叉树的前序遍历-力扣(LeetCode)

一、题目解析 对于递归方法的前序遍历十分简单&#xff0c;但对于一位合格的程序猿而言&#xff0c;需要掌握将递归转化为非递归的能力&#xff0c;毕竟递归调用的时候会调用大量的栈帧&#xff0c;存在栈溢出风险。 二、算法原理 递归调用本质是系统建立栈帧&#xff0c;而非…...

比特币:固若金汤的数字堡垒与它的四道防线

第一道防线&#xff1a;机密信函——无法破解的哈希加密 将每一笔比特币交易比作一封在堡垒内部传递的机密信函。 解释“哈希”&#xff08;Hashing&#xff09;就是一种军事级的加密术&#xff08;SHA-256&#xff09;&#xff0c;能将信函内容&#xff08;交易细节&#xf…...