基于redis-3.2.4的Redis-Cluster集群搭建

原理

Redis 集群采用了P2P的模式,完全去中心化。Redis 把所有的 Key 分成了 16384 个 slot,每个 Redis 实例负责其中一部分 slot 。集群中的所有信息(节点、端口、slot等),都通过节点之间定期的数据交换而更新。

Redis 客户端可以在任意一个 Redis 实例发出请求,如果所需数据不在该实例中,通过重定向命令引导客户端访问所需的实例。

任何两个节点之间都是相互连通的。客户端可以与任何一个节点相连接,然后就可以访问集群中的任何一个节点。对其进行存取和其他操作。

在redis的每一个节点上,都有这么两个东西,一个是插槽(slot)可以理解为是一个可以存储两个数值的一个变量这个变量的取值范围是:0-16383。还有一个就是cluster我个人把这个cluster理解为是一个集群管理的插件。当我们的存取的key到达的时候,redis会根据crc16的算法得出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作。

搭建

推荐采用3主3从6节点方案

#创建文件夹
mkdir /usr/local/redis-cluster
mkdir /usr/local/redis-cluster/bin
cd /usr/local/redis-cluster
mkdir -p 6380/data 6381/data 6382/data 6383/data 6384/data 6385/data #进入编译好的redis下的src目录,拷贝文件到redis-cluster/bin中
cd redis-3.2.4/src
cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-cli redis-server redis-trib.rb /usr/local/redis-cluster/bin #复制一个新的redis实例到6380文件夹中
cp -r /usr/local/redis /usr/local/redis-cluster/6380 #修改redis.conf
port 6380 #端口号
daemonize yes
requirepass redispwd #设置密码
masterauth redispwd #设置验证密码
bind 192.168.204.128 #本机ip
dir /usr/local/redis-cluster/6380/data/ #数据文件存放位置
pidfile /var/run/redis_6380.pid #6380跟port一致
cluster-enabled yes #启动集群模式
cluster-config-file nodes6380.conf #6380跟port一致
cluster-node-timeout 15000
appendonly yes #另外复制上一个配置好的实例5个
\cp -rf /usr/local/redis-cluster/6380/* /usr/local/redis-cluster/6381
\cp -rf /usr/local/redis-cluster/6380/* /usr/local/redis-cluster/6382
\cp -rf /usr/local/redis-cluster/6380/* /usr/local/redis-cluster/6383
\cp -rf /usr/local/redis-cluster/6380/* /usr/local/redis-cluster/6384
\cp -rf /usr/local/redis-cluster/6380/* /usr/local/redis-cluster/6385 #分别修改这5个配置文件,采用字符串替换
vi /usr/local/redis-cluster/6381/redis/etc/redis.conf
:%s/6380/6381 vi /usr/local/redis-cluster/6382/redis/etc/redis.conf
:%s/6380/6382 vi /usr/local/redis-cluster/6383/redis/etc/redis.conf
:%s/6380/6383 vi /usr/local/redis-cluster/6384/redis/etc/redis.conf
:%s/6380/6384 vi /usr/local/redis-cluster/6385/redis/etc/redis.conf
:%s/6380/6385 #分别启动redis实例
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/6380/redis/etc/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/6381/redis/etc/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/6382/redis/etc/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/6383/redis/etc/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/6384/redis/etc/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/6385/redis/etc/redis.conf #查看进程信息
ps aux|grep 'redis' #安装ruby,rubygems
yum install ruby
yum install rubygems #上传redis-3.2.1.gem文件到某个目录下并cd到该目录进行安装
gem install -l redis-3.2.1.gem #设置集群密码
find / -name 'client.rb'
#添加密码(我的在以下目录)
vi /usr/local/share/gems/gems/redis-3.2.1/lib/redis/client.rb
password redispwd # 创建集群
/usr/local/redis-cluster/bin/redis-trib.rb create --replicas 1 192.168.204.128:6380 192.168.204.128:6381 192.168.204.128:6382 192.168.204.128:6383 192.168.204.128:6384 192.168.204.128:6385 #命令行访问任一节点,进行测试
/usr/local/redis-cluster/6380/redis/bin/redis-cli -c -h 192.168.204.128 -p 6380 -a "redispwd"

存在的问题

springboot整合redis集群需要关闭防火墙才可用,仅开放所有节点端口号无法建立连接,查询了一下官网说节点端口号+10000端口号也需要开放才可以,比如6380节点需要把6380、16380端口都开启外网访问,其他节点同理,但是我自己试了下还是不行,具体原因未知,还请各位指导。

Redis-03-集群搭建的更多相关文章

  1. Redis本地集群搭建(5版本以上)

    Redis本地集群搭建(5版本以上) 2019年11月3日10:05:48 步骤 1.下载安装Redis的安装包 2.复制5份,一共6份Redis的解压安装版,修改每个Redis节点的端口并开启节点 ...

  2. redis的集群搭建(很详细很详细)

    说在前面的话 之前有一节说了redis单机版的搭建和使用jedis管理redis单机版和集群版, 本节主要讲一下redis的集群搭建. 跳转到jedis管理redis的使用 认识redis集群 首先我 ...

  3. linux环境下redis安装(redis伪集群搭建)

    redis在linux环境下搭建 1.创建目录 [root@192 local]# mkdir /usr/local/redis 2.下载redis,并解压 [root@192 local]# wge ...

  4. redis主从集群搭建及容灾部署(哨兵sentinel)

    Redis也用了一段时间了,记录一下相关集群搭建及配置详解,方便后续使用查阅. 提纲 Redis安装 整体架构 Redis主从结构搭建 Redis容灾部署(哨兵sentinel) Redis常见问题 ...

  5. redis(9)集群搭建

    一.搭建流程 以下我们将构建这样一个redis集群:三个主节点,分别备有一个从节点,主节点之间相互通信,如果主节点挂掉,从节点将被提升为主节点. redis集群至少需要3个redis实例 那么我们需要 ...

  6. Redis Cluster集群搭建与配置

    Redis Cluster是一种服务器sharding分片技术,关于Redis的集群方案应该怎么做,请参考我的另一篇博客http://www.cnblogs.com/xckk/p/6134655.ht ...

  7. Redis Cluster集群搭建与应用

    1.redis-cluster设计 Redis集群搭建的方式有多种,例如使用zookeeper,但从redis 3.0之后版本支持redis-cluster集群,redis-cluster采用无中心结 ...

  8. Redis笔记-集群搭建

    Redis单机版搭建上一篇已经基本介绍了,下面讨论Redis集群搭建方案和示例. 1.关于Redis常用的集群方案(三种): a.一主多从,如一个Master.两个Slave b.薪火相传,即集群中的 ...

  9. Redis的搭建和Redis的集群搭建

    1.Redis的官网:https://redis.io/      Redis的测试网站:http://try.redis.io/ 2.参考博客:https://www.cnblogs.com/maf ...

  10. 【Redis】Redis cluster集群搭建

    Redis集群基本介绍 Redis 集群是一个可以在多个 Redis 节点之间进行数据共享的设施installation. Redis 集群不支持那些需要同时处理多个键的 Redis 命令, 因为执行 ...

随机推荐

  1. 消息中间件面试题31道RabbitMQ+ActiveMQ+Kafka

    消息中间件面试题31道RabbitMQ+ActiveMQ+Kafka 前言 文章开始前,我们先了解一下什么是消息中间件? 什么是中间件? 非底层操作系统软件,非业务应用软件,不是直接给最终用户使用的, ...

  2. 接口自动化CSV文件生成超长随机字符串--java接口方法

    public class STR { private static String Builderrud(int a){ StringBuilder builder= new StringBuilder ...

  3. ARTS Week 2

    Nov 4,2019 ~ Nov 10,2019 Algorithm 本周主要的算法是如何求两个数的最大公因数.传统的想法便是对这两个数分解质因数,而后找到其公共因数,再相乘,这样就会得到最大公因数了 ...

  4. 一口气说出Redis 5种数据结构及对应使用场景,面试要加分的

    整理了一些Java方面的架构.面试资料(微服务.集群.分布式.中间件等),有需要的小伙伴可以关注公众号[程序员内点事],无套路自行领取 更多优选 一口气说出 9种 分布式ID生成方式,面试官有点懵了 ...

  5. DRF框架的安装与使用

    目录 DRF框架的安装与配置 基于restful接口规范的接口设计 DRF框架的安装与配置 """ 1)安装 >: pip install djangorestfr ...

  6. 【TensorFlow】TensorFlow获取Variable值,将Variable保存为list数据

    Variable类型对象不能直接输出,因为当前对象只是一个定义. 获取Variable中的浮点数需要从数据流图获取: initial = tf.truncated_normal([3,3], stdd ...

  7. 动手学习pytorch——(3)多层感知机

    多层感知机(multi perceptron,MLP).对于普通的含隐藏层的感知机,由于其全连接层只是对数据做了仿射变换,而多个仿射变换的叠加仍然是一个仿射变换,即使添加更多的隐藏层,这种设计也只能与 ...

  8. JVM解毒——JVM与Java体系结构

    你是否也遇到过这些问题? 运行线上系统突然卡死,系统无法访问,甚至直接OOM 想解决线上JVM GC问题,但却无从下手 新项目上线,对各种JVM参数设置一脸懵逼,直接默认,然后就JJ了 每次面试都要重 ...

  9. 02-msyql-存储引擎

    1.优化器针对索引算法 1.1MySQL索引自优化-AHI(自适应HASH索引) MySQL的InnoDB引擎,能够创建只有Btree. AHI作用: 自动评估"热"的内存索引pa ...

  10. 【5min+】 对象映射只有AutoMapper?试试Mapster

    系列介绍 [五分钟的dotnet]是一个利用您的碎片化时间来学习和丰富.net知识的博文系列.它所包含了.net体系中可能会涉及到的方方面面,比如C#的小细节,AspnetCore,微服务中的.net ...