Redis集群

Redis搭建集群模式 Redis 搭建集群的优缺点优点:支持数据的水平扩展,可以处理大规模数据提供高可用性,节点失效时能够自动进行故障转移高并发性能缺点:配置和管理复杂度较高不支持多键操作,某些命令在集群模式下受到限制需要更多的资源和节点来维持高可用性和性能。 阅读详情

集群架构

(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.

(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.

(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可

(4)redis-cluster把所有的物理节点映射到[0-16383]slot(插槽)上,cluster 负责维护node<->slot<->value

 

准备环境

创建一个目录,存放集群的配置文件

[root@master redis]# mkdir redis-cluster

[root@master redis]# cd redis-cluster/

[root@master redis-cluster]# mkdir 6380

[root@master redis-cluster]# mkdir 6381

[root@master redis-cluster]# mkdir 6382

[root@master redis-cluster]# pwd

/opt/redis/redis-cluster

 

拷贝安装源码中的redis.conf刚创建好的三个目录中

[root@master redis-cluster]# cp /opt/redis/redis-3.2.1/redis.conf /opt/redis/redis-cluster/6380/

[root@master redis-cluster]# cp /opt/redis/redis-3.2.1/redis.conf /opt/redis/redis-cluster/6381/

[root@master redis-cluster]# cp /opt/redis/redis-3.2.1/redis.conf /opt/redis/redis-cluster/6382/

 

分别进入这三个目录,修改配置文件redis.conf

1、将端口分别设置为:6380、6381、6382

2、设置pidfile文件为不同的路径

3、开启集群,cluster-enabled yes

4、指定集群的配置文件,cluster-config-file "nodes-xxxx.conf"

以6380为例:

[root@master redis-master-slave]# vim 6380/redis.conf

1

2

3

4

5

6

port 6380

daemonize yes

pidfile /var/run/redis_6380.pid

cluster-enabled yes

cluster-config-file nodes-6380.conf

dir /opt/redis/redis-cluster/6380/

 

启动redis-server

[root@master redis-cluster]# /usr/local/bin/redis-server /opt/redis/redis-cluster/6380/redis.conf

[root@master redis-cluster]# /usr/local/bin/redis-server /opt/redis/redis-cluster/6381/redis.conf

[root@master redis-cluster]# /usr/local/bin/redis-server /opt/redis/redis-cluster/6382/redis.conf

 

[root@master redis-cluster]# ps -ef | grep redis

root      2948     1  0 11:11 ?        00:00:00 /usr/local/bin/redis-server 127.0.0.1:6380 [cluster]                

root      2970     1  0 11:16 ?        00:00:00 /usr/local/bin/redis-server 127.0.0.1:6381 [cluster]                

root      2974     1  0 11:16 ?        00:00:00 /usr/local/bin/redis-server 127.0.0.1:6382 [cluster]  

 

创建redis集群

创建集群要使用redis-trib.rb脚本,执行此脚本查看使用方法

[root@master redis-cluster]# /opt/redis/redis-3.2.1/src/redis-trib.rb

Usage: redis-trib <command> <options> <arguments ...>

 del-node        host:port node_id

 info            host:port

 rebalance       host:port

                 --timeout <arg>

                 --auto-weights

                 --pipeline <arg>

                 --threshold <arg>

                 --weight <arg>

                 --simulate

                 --use-empty-masters

 check           host:port

 reshard         host:port

                 --timeout <arg>

                 --to <arg>

                 --pipeline <arg>

                 --from <arg>

                 --slots <arg>

                 --yes

 call            host:port command arg arg .. arg

 import          host:port

                 --copy

                 --from <arg>

                 --replace

 help            (show this help)

 set-timeout     host:port milliseconds

 create          host1:port1 ... hostN:portN

                 --replicas <arg>

 add-node        new_host:new_port existing_host:existing_port

                 --slave

                 --master-id <arg>

 fix             host:port

                 --timeout <arg>

For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster.

 

使用redis-trib.rb create创建集群,--replicas 0:指定了从数据的数量为0

注意:这里不能使用127.0.0.1,否则在Jedis客户端使用时无法连接到!

[root@master redis-cluster]# /opt/redis/redis-3.2.1/src/redis-trib.rb create --replicas 0 192.168.56.101:6380 192.168.56.101:6381 192.168.56.101:6382

>>> Creating cluster

[ERR] Sorry, can't connect to node 192.168.56.101:6380

 

修改刚创建的三个redis.conf配置文件中的bind

bind 192.168.56.101

 

重启redis-server

[root@master redis-cluster]# /usr/local/bin/redis-server /opt/redis/redis-cluster/6380/redis.conf

[root@master redis-cluster]# /usr/local/bin/redis-server /opt/redis/redis-cluster/6381/redis.conf

[root@master redis-cluster]# /usr/local/bin/redis-server /opt/redis/redis-cluster/6382/redis.conf

[root@master redis-cluster]# ps -ef | grep redis

root      3756     1  0 13:11 ?        00:00:00 /usr/local/bin/redis-server 192.168.56.101:6380 [cluster]          

root      3760     1  0 13:11 ?        00:00:00 /usr/local/bin/redis-server 192.168.56.101:6381 [cluster]          

root      3764     1  0 13:11 ?        00:00:00 /usr/local/bin/redis-server 192.168.56.101:6382 [cluster]

 

再创建集群

[root@master redis-cluster]# /opt/redis/redis-3.2.1/src/redis-trib.rb create --replicas 0 192.168.56.101:6380 192.168.56.101:6381 192.168.56.101:6382

>>> Creating cluster

>>> Performing hash slots allocation on 3 nodes...

Using 3 masters:

192.168.56.101:6380

192.168.56.101:6381

192.168.56.101:6382

M: 8c45a68a798aed7c1ed5e636f2899709717952c8 192.168.56.101:6380

  slots:0-5460 (5461 slots) master

M: c9267b81af4bb2c186d07c5ebc777a4b8551069a 192.168.56.101:6381

  slots:5461-10922 (5462 slots) master

M: 16c6db308b37be4d4dd337cd62ea1b676672e096 192.168.56.101:6382

  slots:10923-16383 (5461 slots) master

Can I set the above configuration? (type 'yes' to accept): yes

>>> Nodes configuration updated

>>> Assign a different config epoch to each node

>>> Sending CLUSTER MEET messages to join the cluster

Waiting for the cluster to join...

>>> Performing Cluster Check (using node 192.168.56.101:6380)

M: 8c45a68a798aed7c1ed5e636f2899709717952c8 192.168.56.101:6380

  slots:0-5460 (5461 slots) master

M: c9267b81af4bb2c186d07c5ebc777a4b8551069a 192.168.56.101:6381

  slots:5461-10922 (5462 slots) master

M: 16c6db308b37be4d4dd337cd62ea1b676672e096 192.168.56.101:6382

  slots:10923-16383 (5461 slots) master【集群及槽信息】

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

 

测试集群

[root@master hadoop]# /usr/local/bin/redis-cli -h 192.168.56.101 -p 6380

192.168.56.101:6380> keys *

(empty list or set)

192.168.56.101:6380> set k1 123

(error) MOVED 12706 192.168.56.101:6382

因为k1的hash槽信息是在6382上,现在使用redis-cli连接的6380,无法完成set操作,需要客户端跟踪重定向,使用-c参数

[root@master hadoop]# /usr/local/bin/redis-cli -h 192.168.56.101 -p 6380 -c

192.168.56.101:6380> set k1 123

-> Redirected to slot [12706] located at 192.168.56.101:6382

OK

 

获取数据

k1的hash槽信息在6382上,在6382上可以直接获取,在其他节点还是要重定向去获取

[root@master hadoop]# /usr/local/bin/redis-cli -h 192.168.56.101 -p 6380 -c

192.168.56.101:6380> get k1

-> Redirected to slot [12706] located at 192.168.56.101:6382

"123"

[root@master hadoop]# /usr/local/bin/redis-cli -h 192.168.56.101 -p 6382 -c

192.168.56.101:6382> get k1

"123"

 

执行redis-trib.rb脚本可能遇到的问题

1、/usr/bin/env: ruby: 没有那个文件或目录

[root@master redis-cluster]# /opt/redis/redis-3.2.1/src/redis-trib.rb

/usr/bin/env: ruby: 没有那个文件或目录

解决方案:由于redis-trib.rb是用ruby语言编写,所以需要安装ruby环境,这里推荐使用yum install ruby

 

2、redis-trib.rb:24:in `require': no such file to load -- rubygems

[root@master redis-cluster]# /opt/redis/redis-3.2.1/src/redis-trib.rb

/opt/redis/redis-3.2.1/src/redis-trib.rb:24:in `require': no such file to load -- rubygems (LoadError)

from /opt/redis/redis-3.2.1/src/redis-trib.rb:24

解决方案:yum install rubygems

 

3、/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- redis (LoadError)

[root@master redis-cluster]# /opt/redis/redis-3.2.1/src/redis-trib.rb

/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- redis (LoadError)

from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'

from /opt/redis/redis-3.2.1/src/redis-trib.rb:25

解决方案:缺少redis的接口,使用gem install redis或gem install redis --version 3.2.1

[root@master redis-cluster]# gem install redis --version 3.2.1

Successfully installed redis-3.2.1

1 gem installed

Installing ri documentation for redis-3.2.1...

Installing RDoc documentation for redis-3.2.1...

 

备注:

如果连接不上gem服务器安装,就手动下载并安装

gem install redis --version 3.0.0  

ERROR:  Could not find a valid gem 'redis' (= 3.0.0) in any repository

ERROR:  While executing gem ... (Gem::RemoteFetcher::FetchError)

需要手工下载并安装:

wget https://rubygems.global.ssl.fastly.net/gems/redis-3.2.1.gem

gem install -l ./redis-3.2.1.gem

安装redis的gem

gem install redis

linux 在线升级ruby

一、使用RVM也就是Ruby Version Manager,Ruby版本管理器来升级ruby,RVM包含了Ruby的版本管理和Gem库管理(gemset)。

1.先更新一下包

$ yum install -y gcc-c++ patch readline readline-devel zlib zlib-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf automake libtool bison iconv-devel

2、RVM安装

$ curl -L get.rvm.io | bash -s stable

(如果失败更新证书)

3、安装

$ source /etc/profile.d/rvm.sh

4、 测试是否安装正常

       $ rvm -v

二、使用RVM升级Ruby

1、利用国内镜像

 

   $ vim /usr/local/rvm/user/db

   写入:ruby_url=https://cache.ruby-china.org/pub/ruby

 

2、查看当前ruby版本

  $ ruby -v

这一步会显示出来当前ruby的版本

3、列出已知ruby的版本

    $ rvm list known

直接安装2.6版本

4、安装ruby 2.6,rvm会自行寻找此版本

     $ rvm install 2.6

超详细,多图文介绍redis集群方式并搭建redis伪集群 超多图文,对新手友好度极好。敲命令的过程中,难免会敲错,但为了截好一张合适的图,一旦出现一点问题,为了好的演示效果,就要从头开始敲。且看且珍惜。再认识redis集群前,若想先知道redis单机版的可查看,springboot整合redis。好了,下面开始了。每个redis实例可称为一个节点,安装redis并以默认端口启动是节点,不关闭,以另一个端口启动,是一个新节点。在另一台机器安装redis并启动,也是一个新节点。 阅读详情

相关推荐

Excel也能玩转K-means聚类?手把手教你用表格搞定用户分群(附完整公式)

本文详细介绍了如何在Excel中实现K-means聚类算法,无需编程即可完成用户分群。通过SUMIF、SQRT等基础函数,从数据预处理到最终分群全流程手把手教学,特别强调数据标准化和迭代优化的关键步骤,帮助运营团队低成本高效分析用户行为数据。

weixin_30555125的博客 181

redis 集群环境搭建-redis集群管理

集群架构 (1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽. (2)节点的fail是通过集群中超过半数的节点检测失效时才生效. (3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可 (4)redis-cluster把所有的物理节点映射到[0-16383]...

weixin_30546933的博客 108

从平衡车到寻迹小车:IMU963RA九轴陀螺仪实战避坑与四元数融合指南

本文详细解析了IMU963RA九轴陀螺仪在机器人姿态控制中的应用,重点探讨了从六轴升级到九轴系统的技术路径及四元数融合算法。通过实战案例,揭示了如何利用地磁计补偿陀螺积分漂移,并提供硬件集成、传感器校准及算法实现的完整解决方案,有效将8小时漂移控制在2度以内。

weixin_27219587的博客 254

(error) MOVED 12706 192.168.187.139:6379

在开启集群后,redis-cli用普通用户登录无法操作集群中的数据,需要加上-c 用集群模式登录才可进行操作。这种情况一般是因为启动 redis-cli 时没有设置集群模式所导致;加入 -c 参数采用集群策略连接,设置数据会自动切换到相应的 写主机。Redis操作set、get等操作出现如下错误。在启动时加入 -c 来启动集群模式。

爱吃Java的羊的博客 545

CMake是什么?为什么学习CMake

CMake的主要作用和重要性,包括其在跨平台构建中的应用、如何支持多种编译器及操作系统,以及它在管理大型和复杂项目中的优势。

小鱼酱的博客 3872

《Unity DOTS之ECS从入门到不香》(1)基本概念

文章目录一、什么是DOTS?二、什么是ECS?三、Hello World 一、什么是DOTS? Data Oriented Tech Stack(DOTS)是unity推出的多线程面向数据的技术堆栈 。它是一套高性能解决方案,包含三个部分: 1.ECS:ECS是一种有别于面向对象的编程模式,是面向CPU Cache友好的编程模式。要求代码都要按照 实体+组件+系统 的框架构建。官方链接 2.JobSystem:JobSystem是unity推出的一套先进的多线程任务管理系统,结合ECS可以获得最佳性能。当然

Cxihu田树东的游戏开发博客 2732

redis-cli报错:(error) MOVED 12706 (未以集群模式连接)

学亮编程手记 1357

手把手教你学simulink(90.1)--直流电动机实例:基于Simulink的基本模型的直流电动机(DC Motor)建模

直流电动机(DC Motor)因其结构简单、控制方便和良好的调速性能,广泛应用于各种工业自动化、机器人技术、家用电器以及航空航天等领域。为了更好地理解和应用直流电动机的工作原理及其控制系统,本项目旨在通过Simulink对直流电动机进行基本模型的建模与仿真。

MHD0815的博客 439

2017 火种CTF Writeup

趁着周日的时间打了个小比赛。。。。

4ct10n 6504

多标签图像分类:标签依赖关系建模的最新论文解读与实战应用

多标签图像分类:标签依赖关系建模的最新论文解读与实战应用 ,人工智能,计算机视觉,大模型,AI,本文解读了最新相关论文,包括基于图神经网络(GCN)的ML-GCN方法,通过构建标签相关矩阵建模依赖关系;区域潜在语义依赖的RLSD模型,定位关键区域并利用RNN建模语义依赖;以及语义图表示学习的SSGRL框架,结合语义解耦与交互模块。通过实战应用,展示了基于PyTorch的ML-GCN模型实现,包括图像特征提取、标签依赖建模及训练评估流程,为多标签图像分类提供了有效解决方案。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 18万+

数据库系统概论第五版课后习题答案第十二章

对元组的插入、删除、修改;语义检查的具体做法是,DBMS读取数据字典,检查是否存在与该语句中的表、视图或索引等要创建的对象相同的对象名,检查该用户是否具有创建数据库对象的权限。答:操作系统提供的封锁机制和DBMS的封锁机制在封锁对象、封锁对象的状态、封锁的粒度、及封锁的类型上存在很大的差别,操作系统的封锁机制不能直接应用在DBMS中,DBMS必须重新设计,来满足复杂的封锁需求。数据库的建立和维护包括数据库的初始建立、数据的转换、数据库的转储和恢复、数据库的重组织和重构造以及性能监测分析等功能。

wenling54321的博客 694

linux就该这么学

目录 第0章 让我们谈谈学习方法和红帽系统。 11 0.1 本书作者简介 11 0.2 学习是件苦差 11 0.3 开源共享精神 12 0.4 为什么要学Linux? 12 0.5 热门的开源系统 13 0.6 认识红帽认证 14 第1章 部署虚拟环境安装linux系统。 17 1.1 准备您的工具 17 1.2 安装配置虚拟机 17 1.3 VM安装RHEL7系统 21 1.4使用KVM安装系统 24 1.5 配置VNC服务程序 27 1.6 重置Root用户密码 29 1.7 安装虚拟机增加包 31 1

woaini886353的博客 1万+

【VxWorks】Vxworks、QNX、Xenomai、Intime、Sylixos、Ucos等实时操作系统的性能特点

VxWorks 操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统,是嵌入式开发环境的关键组成部分。其内核支持多任务调度(采用基于优先级抢占方式,同时支持同优先级任务间的分时间片调度)、任务间的同步、进程间通信机制、中断处理、定时器和内存管理机制等,且提供了一个快速灵活的与 ANSIC 兼容的 I/O 系统,网络支持 对其它VxWorks系统和TCP/IP网络系统的"透明"访问。具有良好的持续发展能力、良好的可靠性、卓越的实时性和高性能的内核以及友好的用户开发环境。

smartvxworks的博客 1065

Redis 篇-初步了解 Redis 持久化、Redis 主从集群、Redis 哨兵集群、Redis 分片集群

在子进程写入磁盘过程中,主进程有可能会进行写操作,所有为了防止脏读的情况,在写数据的时候,将内存的数据进行拷贝,再来进行写操作。在 slave 加载 RDB 文件的时候,master 也会不断接收写操作的请求命令,这些命令会先保存到 repl_baklog 文件中,等待 slave 加载完成之后,master 发送 repl_baklog 中的命令到 slave 节点中,而 slave 节点接收到命令就会执行。重新启动该 Redis 服务之后,会自动从 RDB 文件中获取数据,重新将数据放到内存中。

小扳手 2584

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

单机部署Redis集群

我们需要执行命令来创建集群,在Redis5.0之前创建集群比较麻烦,5.0之后集群管理命令都集成到了redis-cli中。修改redis-6.2.4/redis.conf文件,将其中的持久化模式改为默认的RDB模式,AOF保持关闭状态。要在同一台虚拟机开启3个实例,必须准备三份不同的配置文件和目录,配置文件所在目录也就是工作目录。要在同一台虚拟机开启3个实例,必须准备三份不同的配置文件和目录,配置文件所在目录也就是工作目录。这里我们搭建一个三节点形成的Sentinel集群,来监管之前的Redis主从集群。

shall_zhao的博客 2389

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【Redis】集群

哨兵模式显著提升了 Redis 系统的可用性。然而,其核心数据存储仍然依赖于单个 Master 节点及其 Slave 副本。这意味着所有数据都需要完整地存储在这组主从节点上。当数据量极其庞大,接近甚至超出 Master/Slave 节点所在服务器的物理内存容量时,系统就可能面临严重问题。虽然硬件成本持续下降,大中型互联网公司的服务器内存容量已普遍达到 TB 级别,但在当今的“大数据”时代,1TB 内存也常常显得捉襟见肘。

2301_80224556的博客 970

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Redis集群之Redis分片集群

Redis集群搭建直接一步到位:支持海量数据以及高并发写分片集群顾名思义,将数据分开存储到Redis集群中,这样能够存储更多的数据,避免浪费资源,基础搭建如:三主三从(一拖一)、三主六从(一拖二),本次搭建采用一拖一,一拖二情况可根据文末图文介绍进行添加从节点即可。

AIGUO666666的博客 1546

Redis 集群

现今 Redis 在很多业务场景,使用越来越广泛。在互联网发展的今天,网站的稳定性和高可用性不言而喻。随着技术的发展,集群方案层出不穷,目前 Redis 集群的实现方法 一般有客户端分片、代理分片和服务器端分片三种解决方案。

2301_77081516的博客 1177

Windows下搭建Redis集群

一、首先下载好Redis的Windows版本,注意:Redis只有3.0之后的版本才有集群 1、下载好后直接解压,可看到这些目录   2、在解压的目录启动redis-server.exe启动redis服务,出现下图的效果则说明redis服务启动成功   二、搭建Redis集群   首先构建集群的节点目录,注意:集群正常运作至少需要三个主节点,不过在刚开始试用集群功能时, 强...

青衫 2万+

Redis集群总结

Redis自动化检测主节点是否在工作,当主节点宕机后集群自动能够替换上去Cluster由多个主从节点组组成,每个主从节点组上的数据没有交集一个Redis组有多个Slot槽位,整个Cluster由2^14个槽位,经过路由确定在某个实例上每个Master至少有一个Slave。

SS_G_SS的博客 1605

【Redis】redis集群模式

Redis集群,即Redis Cluster,是Redis 3.0开始引入的分布式存储方案。实际使用中集群一般由多个节点(Node)组成,Redis的数据分布在这些节点中。集群中的节点分为主节点和从节点:只有主节点负责读写请求和集群信息的维护;从节点只进行主节点数据和状态信息的复制。集群的作用,可以归纳为两点:1、数据分区:数据分区(或称数据分片)是集群最核心的功能。集群将数据分散到多个节点,一方面突破了Redis单机内存大小的限制,存储容量大大增加;

margu_168的博客 1401

Redis 集群方式

集群,即 Redis cluster, 是 Redis 3.0开始引入的分布式存储方案。集群由多个节点(Node)组成,Redis 的数据分布在这些节点中。集群中的节点分为主节点和从节点;只有主节点负责读写请求和集群信息的维护;从节点只进行主节点数据和状态信息的复制。

qq_51678989的博客 5528

redis集群

集群,即RedisCluster,是Redis3.0开始引入的分布式存储方案。集群由多个节点(Node)组成,Redis的数据分布在这些节点中。集群中的节点分为主节点和从节点:只有主节点负贵读写请求和集群信息的维护;从节点只进行主节点数据和状态信息的复制。redis集群采用master-slave的方式,即1个master节点可以包含多个slave节点,slave节点主要对master节点的数据进行备份,如果master节点挂了,可以启动salve节。

2501_91557222的博客 1442
上一篇: 物联网云平台系统设计
下一篇: 高级JAVA必会系列三:并发编程
it_monkey_ali
博客等级 码龄10年 32粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值