Redis高可用集群之rediscluster

本文基于redis-5.0.3版本,环境为Mac OS,单机器上部署。

Redis Cluster集群搭建

Redis Cluster集群是一个由多个主从节点集群组成的分布式服务集群,它具有复制、高可用和分片特性。Redis Cluster集群需要将每个节点设置成集群模式,这种集群模式没有中心节点,可水平扩展,据官方文档可以线性扩展到1000节点。Redis Cluster集群的性能和高可用性均优于之前版本的哨兵模式,且集群配置非常简单。

集群的最少节点数是3主3从,新建六个文件夹redis8000 redis8001 redis8002 redis8003 redis8004 redis8005,并将redis.conf文件复制到每个文件夹下,目录结构如下(redis-cluster是我自己建的集群根目录)。
redis cluster

我们先来看下原生命令搭建方式,然后再看下使用Redis提供的--cluster create命令如何搭建。

一、原生搭建

1、配置开启cluster节点
这里以配置8000端口的实例为例说明,其它实例将文件中的8000替换为对应端口号即可。

bind 10.40.222.186
port 8000
daemonize yes
pidfile /var/run/redis_8000.pid
logfile "redis8000.log"
dbfilename dump8000.rdb
dir /redis-cluster/redis8000
masterauth 123456
requirepass 123456
appendonly yes
appendfilename "appendonly8000.aof"

#集群模式配置
cluster-enabled yes # 启动集群模式
cluster-config-file nodes-8000.conf  # 集群配置文件,自动生成 后期勿动
cluster-node-timeout 15000
cluster-replica-validity-factor 10
cluster-require-full-coverage no #部分节点下线的情况下也可以对外提供服务

2、meet
依次启动6个节点,执行cluster nodes命令,此时会发现每个节点都是孤立的。
cluster nodes
使用客户端进入8000节点,执行如下命令,让各节点相互连通:

cluster meet 10.40.222.186 8001
cluster meet 10.40.222.186 8002
cluster meet 10.40.222.186 8003
cluster meet 10.40.222.186 8004
cluster meet 10.40.222.186 8005

再次执行cluster nodes命令,会发现这些节点联系在了一起。
meet
3、指派槽
Redis 集群中内置了16384个哈希槽,当需要在Redis 集群中放置一个key-value时,redis 会先对key使用crc16算法算出一个结果,然后把结果对16384求余数,这样每个key都会对应一个编号在0-16383之间的哈希槽,redis会根据节点数量大致均等的将哈希槽映射到不同的节点。

这种结构很容易添加或者删除节点,并且无论是添加删除或者修改某一个节点,都不会造成集群不可用的状态。
1.当需要增加节点时,只需要把其他节点的某些哈希槽挪到新节点就可以了;
2.当需要移除节点时,只需要把移除节点上的哈希槽挪到其他节点就行了;

这16384个槽位必须要分配完,本次我们搭建的是3主3从结构,所以使用16384/3 求出每个节点需要分配的槽位(这里选8000、8001、8002三个节点作为主节点。)
8000: 0-5461 8001:5462-10922 8002:10923-16383

添加槽位命令cluster addslots solt,因为命令一次只能添加一个槽位,这里需要借助一个脚本命令来帮助我们分配槽位。
addsolt.sh

start=$1
end=$2
port=$3
for slot in `seq  ${start} ${end}`
do
  echo "slot:${slot}"
  /redis-5.0.3/src/redis-cli -h 10.40.222.186 -p ${port} -a 123456 cluster addslots ${slot}
done

将该文件放在redis-cluster目录下,依次执行命令

sh addslots.sh 0 5461 8000
sh addslots.sh 5462 10922 8001
sh addslots.sh 10923 16383 8002

执行cluster nodes命令会发现槽位已分配完毕。
addslots

4、分配主从
槽位分配完毕后,我们需要把主从关系给建立起来。命令为cluster replicate node-id ,其中node-id代表redis实例的run_id。
分配主从
至此,Redis Cluster集群搭建完毕。

二、使用Redis提供的--cluster create命令

1、配置开启cluster节点
初始化文件夹以及配置redis.conf同原生搭建,请参考上文。

2、使用redis-trib.rb命令创建整个redis集群
依次启动6个节点,确认启动成功后,执行如下命令:
../redis-5.0.3/src/redis-cli -a 123456 --cluster create 10.40.222.186:8000 10.40.222.186:8001 10.40.222.186:8002 10.40.222.186:8003 10.40.222.186:8004 10.40.222.186:8005 --cluster-replicas 1
在这里插入图片描述
执行cluster nodes命令,查看集群节点情况,会发现上面一条命令涵盖了原生搭建方式的2、3、4步骤。
在这里插入图片描述
至此,Redis Cluster集群搭建完毕。

集群验证

使用集群模式连接到任意redis实例,然后执行设值命令。通过测试结果可以发现如果设置的key通过crc16算法不在当前redis实例的槽位范围,集群会自动重定向,如下图所示:
redis cluster设置值

Redis Cluster集群伸缩


------------本文结束感谢您的阅读------------
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值