Redis-cluster原理

当我们的存取的key到达的时候,redis会根据crc16的算法得出一个结果,然后把结果对 16384(redis集群将所有的空间分为16384份) 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作。

集群是如何判断是否有某个节点挂掉了呢?

节点之间通过互相的ping-pong判断是否可以连接上,如果有一半以上的节点去ping一个节点的时候没有回应,集群就认为这个节点宕机了。

为什么需要至少3个master节点?

因为故障检测和故障转移过程都要求大多数主节点(即一半以上节点)达成协议.如果我们只有2个主设备而一个设备发生故障,则另一个主节点无法根据协议做出决定;主数量应为奇数,以便做选举判决。

搭建集群

创建文件夹

我们计划集群中 Redis 节点的端口号为 9001-9006 ,端口号即集群下各实例文件夹。数据存放在 端口号/data 文件夹中。

mkdir /usr/local/redis-cluster

cd redis-cluster/

mkdir -p 9001/data 9002/data 9003/data 9004/data 9005/data 9006/data

复制脚本

在 /usr/local/redis-cluster 下创建 bin 文件夹,用来存放集群运行脚本,并把安装好的 Redis 的 src 路径下的运行脚本拷贝过来。看命令:

Cd /usr/local/redis-cluster

mkdir bin

Cd /usr/local/redis-3.2.9/src

 cp mkreleasehdr.sh redis-benchmark redis-check-aof  redis-cli redis-server redis-trib.rb /usr/local/redis-cluster/bin

复制一个新 Redis 实例

我们现在从已安装好的 Redis 中复制一个新的实例到 9001 文件夹,并修改 redis.conf 配置。

cp -r /usr/local/redis    /usr/local/redis-cluster/9001

注意,修改 redis.conf 配置和单点唯一区别是下图部分,其余还是常规的这几项:

port 9001(每个节点的端口号)

daemonize yes

bind 192.168.119.131(绑定当前机器 IP)

dir /usr/local/redis-cluster/9001/data/(数据文件存放位置)

pidfile /var/run/redis_9001.pid(pid 9001和port要对应)

cluster-enabled yes(启动集群模式)

cluster-config-file nodes9001.conf(9001和port要对应)

cluster-node-timeout 15000

appendonly yes

再复制出五个新 Redis 实例

我们已经完成了一个节点了,其实接下来就是机械化的再完成另外五个节点,其实可以这么做:把 9001 实例 复制到另外五个文件夹中,唯一要修改的就是 redis.conf 中的所有和端口的相关的信息即可,其实就那么四个位置。开始操作,看图:

\cp -rf /usr/local/redis-cluster/9001/*   /usr/local/redis-cluster/9002

\cp -rf /usr/local/redis-cluster/9001/*   /usr/local/redis-cluster/9003

\cp -rf /usr/local/redis-cluster/9001/*   /usr/local/redis-cluster/9004

\cp -rf /usr/local/redis-cluster/9001/*   /usr/local/redis-cluster/9005

\cp -rf /usr/local/redis-cluster/9001/*   /usr/local/redis-cluster/9006

\cp -rf 命令是不使用别名来复制,因为 cp 其实是别名 cp -i,操作时会有交互式确认,比较烦人。

修改 9002-9006 的 redis.conf 文件

其实非常简单了,你通过搜索会发现其实只有四个点需要修改,我们全局替换下吧,进入相应的节点文件夹,做替换就好了。命令非常简单,看图:

vi /usr/local/redis-cluster/9002/redis/etc/redis.conf

vi /usr/local/redis-cluster/9003/redis/etc/redis.conf

vi /usr/local/redis-cluster/9004/redis/etc/redis.conf

vi /usr/local/redis-cluster/9005/redis/etc/redis.conf

vi /usr/local/redis-cluster/9006/redis/etc/redis.conf

%s/9001/9002

%s/9001/9003

%s/9001/9004

%s/9001/9005

%s/9001/9006

其实我们也就是替换了下面这四行:

port 9002

dir /usr/local/redis-cluster/9002/data/

cluster-config-file nodes-9002.conf

pidfile /var/run/redis_9002.pid

启动9001-9006六个节点

/usr/local/redis/bin/redis-server  /usr/local/redis-cluster/9001/redis/etc/redis.conf

/usr/local/redis/bin/redis-server  /usr/local/redis-cluster/9002/redis/etc/redis.conf

/usr/local/redis/bin/redis-server  /usr/local/redis-cluster/9003/redis/etc/redis.conf

/usr/local/redis/bin/redis-server  /usr/local/redis-cluster/9004/redis/etc/redis.conf

/usr/local/redis/bin/redis-server  /usr/local/redis-cluster/9005/redis/etc/redis.conf

/usr/local/redis/bin/redis-server  /usr/local/redis-cluster/9006/redis/etc/redis.conf

随便找一个节点测试试

/usr/local/redis-cluster/9001/redis/bin/redis-cli -h 192.168.212.150 -p 9001

(error) CLUSTERDOWN Hash slot not served

这是因为虽然我们配置并启动了 Redis 集群服务,但是他们暂时还并不在一个集群中,互相直接发现不了,而且还没有可存储的位置,就是所谓的slot(槽)。

安装集群所需软件

由于 Redis 集群需要使用 ruby 命令,所以我们需要安装 ruby 和相关接口。

yum install ruby

yum install rubygems

gem install redis  使用本地上传方式

SpringBoot整合Redis集群

spring:

  redis:

    database: 0

#    host: 132.232.44.194

#    port: 6379

#    password: 123456

    jedis:

      pool:

        max-active: 8

        max-wait: -1

        max-idle: 8

        min-idle: 0

    timeout: 10000

    cluster:

      nodes:

        - 192.168.212.149:9001

        - 192.168.212.149:9002

        - 192.168.212.149:9003

        - 192.168.212.149:9004

        - 192.168.212.149:9005

        - 192.168.212.149:9006

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值