Java连接Redis集群&Redis扩容与迁移

323 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 14 天,点击查看活动详情

每日英语:

The jealous are troublesome to others, but a torment to themselves.

善妒的人对别人是个麻烦,而对自己则是个折磨。 -威廉·佩恩

Java连接Redis集群

在java客户端连接Redis集群,只需要修改配置文件bootstrap.yml中redis链接即可:

  redis:
    cluster:
      nodes: 192.168.100.130:7001,192.168.100.130:7002,192.168.100.130:7003,192.168.100.130:7004,192.168.100.130:7005,192.168.100.130:7006

我们可以把mall-permission-servicemall-api-gateway中redis链接地址换成集群服务地址,测试后我们可以发现权限数据正常入库:

1612883358644.png

扩容与迁移

在生产环境,如果缓存数据量过大,就有扩容需求,针对Redis进行扩容,其实只用使用它的指令即可,但无论怎么使用,都和Redis集群的原理有关,也就是key经过CRC16算法取模最终的值在0至16383范围之间。

新节点创建

我们需要做扩容操作,所以需要先创建一个节点,创建单个节点我们可以把之前的脚本修改一下,创建单个节点的文件oneinstall.sh:

#!/bin/bash
#在/usr/local/xz/redis-cluster下生成conf和data目标,并生成配置信息
#换行
echo -e "\n"
#输入信息
read -p "请输入容器端口:" DOCKER_PORT
​
#输入端口赋值
port=$DOCKER_PORT;
​
echo -e "$port"#创建配置文件
mkdir -p ./${port}/conf && PORT=${port} envsubst < ./redis-config.tmpl > ./${port}/conf/redis.conf && mkdir -p ./${port}/data;
​
#创建redis容器
docker run -d -it -p ${port}:${port} -p 1${port}:1${port} -v /usr/local/xz/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf -v /usr/local/xz/redis-cluster/${port}/data:/data --privileged=true --restart always --name redis-${port} --net redis-net --sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf;
#查找ip
echo  -n "启动$(docker inspect --format '{{ (index .NetworkSettings.Networks "redis-net").IPAddress }}' "redis-${port}")":${port}" 成功!";
echo -e "\n"

oneinstall.sh添加可执行权限,并执行该脚本:

#添加可执行权限
chmod +x oneinstall.sh
#创建新的节点
./oneinstall.sh
#输入7007端口
7007

此时7007节点创建完成:

1612889856547.png

扩容

我们要进行扩容,可以先查看当前集群状态:

#查看集群状态
cluster nodes

状态信息如下:

1612890002204.png

我们现在开始执行节点增加,也就是扩容操作:

./redis-cli --cluster add-node 192.168.100.130:7007 192.168.100.130:7001

执行后,效果如下:

1612890127757.png

此时我们再查看状态:cluster nodes

1612890188270.png

此时节点已经增加进来,但目前没有分配任何哈希槽,所以无论做数据增加还是删除以及查询,都和它没有一毛钱关系,因此我们还要把部分哈希槽迁移到该节点上,同时被迁移的节点上对应数据也会跟着一起迁移过来,迁移命令如下:

./redis-cli --cluster reshard 192.168.100.130:7003 --cluster-from 5d93f5ca5e7289c04b00ccc468e0ce4ef8afaea9 --cluster-to 889a13a1e1761f1e83c25e41287d1c463175d467 --cluster-slots 100

参数说明:

5d93f5ca5e7289c04b00ccc468e0ce4ef8afaea9 指的是7003节点
889a13a1e1761f1e83c25e41287d1c463175d467 指定是7007节点
表示将7003节点中100个哈希槽迁移到7007上来

我们再查看状态:

1612770337077.png

思考:如何实现收容?

收容其实也很简单,也是使用命令即可,要做2个操作
1:哈希槽迁移
2:删除节点

总结

本篇主要介绍一下Redis搭建为集群后,java后台如何连接到Redis集群。简单介绍一下Redis扩容与迁移。