Redis集群高可用环境之Cluster集群(13)

1.传统Redis集群存在那些问题

Redis哨兵集群模式,每个节点都保存全量同步数据,冗余的数据比较多;而在Redis Cluster模式中集群中采用分片集群模式,可以减少冗余数据,缺点就是构建该集群模式成本非常高。

2.传统Redis Cluster集群的原理

Redis3.0开始官方推出了集群模式 RedisCluster,原理采用hash槽的概念,预先分配16384个卡槽,并且将该卡槽分配给具体服务的节点;通过key进行crc16(key)%16384 获取余数,余数就是对应的卡槽的位置,一个卡槽可以存放多个不同的key,从而将读或者写转发到该卡槽的服务的节点。 最大的有点:动态扩容、缩容。

3.Redis Cluster集群模式环境搭建

3.1搭建集群环境

一般大型的都是多个服务器,每个服务器安装一个redis,这里测试所有采用伪集群,一个服务器安装多个端口号不同的redis服务。

mkdir -p /usr/local/rediscluster
cd /usr/local/rediscluster
mkdir redis7000 redis7001 redis7002 redis7003 redis7004 redis7005
# 每个配置 redis.conf 文件内容修改如下,
daemonize yes #后台启动
protected-mode no ## 允许外部访问
bind 192.168.1.10 # 设置为本机的ip
port 7000 #修改端口号,从7000到7005区分
# masterauth "redis123" #密码,后面集群命令要添加密码,如无密码可不用添加
cluster-enabled yes #开启cluster,去掉注释
dpfilename "7000dump.rdb" #从7000到7005区分
cluster-config-file 7000nodes.conf #从7000到7005区分
cluster-node-timeout 15000 #节点通信时间
logfile   /usr/rediscluster/redis7005/redis.log #从7000到7005区分
pidfile "/var/run/redis_7005.pid" #从7000到7005区分

3.2 启动集群

#启动我们的redis
/usr/local/redis/bin/redis-server /usr/local/rediscluster/redis7000/redis.conf
/usr/local/redis/bin/redis-server /usr/local/rediscluster/redis7001/redis.conf
/usr/local/redis/bin/redis-server /usr/local/rediscluster/redis7002/redis.conf
/usr/local/redis/bin/redis-server /usr/local/rediscluster/redis7003/redis.conf
/usr/local/redis/bin/redis-server /usr/local/rediscluster/redis7004/redis.conf
/usr/local/redis/bin/redis-server /usr/local/rediscluster/redis7005/redis.conf

这里表示所有的redis通过已经启动了,但是还没有分配卡槽,无法使用

3.3连接并分配卡槽

连接一个redis
/usr/redis/bin/redis-cli -h 192.168.1.10 -p 7000
# 出现如下错误说明没有分配hash槽,如下图
(error) CLUSTERDOWN Hash slot not served  
/usr/redis/bin/redis-cli --cluster create  192.168.1.10:7000  192.168.1.10:7001  192.168.1.10:7002  192.168.1.10:7003  192.168.1.10:7004  192.168.1.10:7005  --cluster-replicas 1
(建议最好使用服务器的ip地址搭建)

在这里插入图片描述
分配hash操作
在这里插入图片描述

# 我们连接时需要采用集群连接的方式
/usr/redis/bin/redis-cli -h 192.168.1.10 -p 7000 –c

4.Redis Cluster集群模式动态扩容节点

4.1新增节点主-7006,从-7007

# 与上面一样安装不同端口号的redis服务7006和7007,然后启动服务
/usr/local/redis/bin/redis-server /usr/local/rediscluster/redis7006/redis.conf
/usr/local/redis/bin/redis-server /usr/local/rediscluster/redis7007/redis.conf

#为集群新增一个主节点
/usr/redis/bin/redis-cli --cluster add-node 192.168.1.10:7006   192.168.1.10:7000

#为集群新增从节点,将从节点7007只想新增的主节点7006(cluster-master-id)
/usr/redis/bin/redis-cli --cluster add-node 192.168.1.10:7007  192.168.1.10:7000  --cluster-slave   --cluster-master-id  5d94171eb34ed4396bf5b9db8efaab4d96d0cf10

4.2对新增节点分配卡槽

通过上面操作,7006和7007已经添加到集群了,但是还没有添加卡槽,接下来添加卡槽
/usr/local/redis/bin/redis-cli --cluster reshard 192.168.1.10:7000
执行命令后会提示你要到多少个卡槽我们一共是4个master所以每个应该是4096个。
然后将7006中集群id复制过来即可。接着提示是所有的平均分配还是指定ID分配,一般选择平均分配即可。
图片来源网络仅供参考

4.3Redis卡槽缩容

如果要将7006和7007回收,也要将相应的卡槽重新分配回去。如下命令是将7006所有的卡槽迁移到7000上。

#语法格式:
#/usr/redis/bin/redis-cli --cluster  reshard  192.168.1.10:7000  --cluster-from 7006ID --cluster-to 7000ID --cluster-slots

/usr/redis/bin/redis-cli --cluster  reshard  192.168.1.10:7000  --cluster-from   5d94171eb34ed4396bf5b9db8efaab4d96d0cf10  --cluster-to 511058958a3b80dd600e060c2500050c6c5a02ab  --cluster-slots 

执行命令后,里面的数据也会跟着迁移到7000中。
参考:蚂蚁课堂

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值