一、🕊️ Redis集群方案

1. 🌿 redis-cluster

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LyYHiSiw-1649172671602)(redis笔记.assets/image-20220404195919262.png)]

架构细节:

(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.

(2)节点的fail是通过集群中超过半数的节点检测有效时整个集群才生效.

(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可

(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value

      Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽, redis 会根据节点数量大致均等的将哈希槽映射到不同的节点 。

示例如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eSemSnM8-1649172671604)(redis笔记.assets/image-20220404195845089.png)]

2.🌿 redis-cluster投票

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wMqqS5pm-1649172671606)(redis笔记.assets/image-20220404195907206.png)]

心跳机制

(1)集群中所有master参与投票,如果半数以上master节点与其中一个master节点通信超过(cluster-node-timeout), 认为该master节点挂掉.
(2):什么时候整个集群不可用(cluster_state:fail)?

  • 如果集群任意master挂掉,且当前master没有slave,则集群进入fail状态。也可以理解成集群的[0-16383]slot映

    射不完全时进入fail状态。

  • 如果集群超过半数以上master挂掉,无论是否有slave,集群进入fail状态。

3. 🌿 集群搭建步骤

🍃第一步:安装redis

redis安装教程:https://blog.csdn.net/mjh1667002013/article/details/123973167?spm=1001.2014.3001.5501

🍃第二步:创建集群目录

[root@centos7 local]# mkdir redis-cluster

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MB3QwhbC-1649172671607)(redis笔记.assets/image-20220405140328790.png)]

🍃第三步:在集群目录下创建节点目录

集群目录下创建3台主机,每台主机配置一台从机。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AKeR6AIJ-1649172671609)(redis笔记.assets/image-20220405140528586.png)]

      搭建集群最少也得需要3台主机,如果每台主机再配置一台从机的话,则最少需要6台机器。

      设计端口如下:创建6 个redis实例,需要端口号7001~7006 。

[root@centos7 local]# cp redis/ redis-cluster/7001 -r

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wWVOAs6d-1649172671612)(redis笔记.assets/image-20220405140811948.png)]

🍃第四步:如果存在持久化文件,则删除

[root@centos7 7001]# rm -rf appendonly.aof dump.rdb

🍃第五步:打开Cluster-enable yes

修改redis.conf配置文件,打开cluster-enable yes。说明:cluster-enable 是否支持集群

[root@centos7 7001]# vi redis.conf 

提示:检索文件: 输入:/cluster-enable当前页没有时,输入n,查找下一页

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tyI00HEa-1649172671613)(redis笔记.assets/image-20220405140949808.png)]

🍃第六步:修改端口

提示:检索文件: 输入:/port当前页没有时,输入n,查找下一页

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZgPDoa6Q-1649172671615)(redis笔记.assets/image-20220405141003753.png)]

🍃第七步:复制出7002-7006机器

将配置好的7001复制出另外需要的五台机器。

[root@centos7 redis-cluster]# cp 7001/ 7002 -r
[root@centos7 redis-cluster]# cp 7001/ 7003 -r
[root@centos7 redis-cluster]# cp 7001/ 7004 -r
[root@centos7 redis-cluster]# cp 7001/ 7005 -r
[root@centos7 redis-cluster]# cp 7001/ 7006 -r

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8Fc7axmv-1649172671616)(redis笔记.assets/image-20220405141746174.png)]

🍃第八步:修改7002-7006机器的端口

修改7002-7006端口分别为7002-7006

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HDX6Fdss-1649172671617)(redis笔记.assets/image-20220405142255075.png)]

🍃第九步:编写启动六台机器自定义脚本

写一个启动脚本:自定义shel脚本来一键启动六台机器

①在redis-cluster目录下创建startall.sh空脚本,名称可自取。

[root@centos7 redis-cluster]# vi startall.sh

②脚本内容:

cd 7001 
./bin/redis-server ./redis.conf 
cd .. 
cd 7002
./bin/redis-server ./redis.conf 
cd .. 
cd 7003 
./bin/redis-server ./redis.conf 
cd .. 
cd 7004 
./bin/redis-server ./redis.conf 
cd .. 
cd 7005 
./bin/redis-server ./redis.conf 
cd .. 
cd 7006 
./bin/redis-server ./redis.conf 
cd .. 

启动脚本内容很简单,把我们需要手动去启动每台服务的命令集合一起去执行就可以了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6SOsdmpZ-1649172671618)(redis笔记.assets/image-20220405142844480.png)]

🍃第十步:修改startall.sh文件的权限

[root@centos7 redis-cluster]# chmod u+x startall.sh

🍃第十一步:启动所有的实例

[root@centos7 redis-cluster]# ./startall.sh

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1N95my5t-1649172671620)(redis笔记.assets/image-20220405145214340.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HrqpLtpW-1649172671623)(redis笔记.assets/image-20220405162628157.png)]

🍃第十二步:创建集群(关闭防火墙)

确认防火墙是否关闭或放行。(centos7系统)

#查看防火墙是否关闭
firewall-cmd --state
#关闭防火墙
systemctl stop firewalld.service

注意:在任意一台上运行 不要在每台机器上都运行,一台就够了 redis 5.0.5中使用redis-cli --cluster替代redis- trib.rb,命令如下 :

redis-cli --cluster create ip:port ip:port ....ip:port cluster-replicas 1
[root@centos7 bin]# ./redis-cli --cluster create 192.168.249.166:7001 192.168.249.166:7002 192.168.249.166:7003 192.168.249.166:7004 192.168.249.166:7005 192.168.249.166:7006 --cluster-replicas 1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pKawvOAO-1649172671624)(redis笔记.assets/image-20220405164113139.png)]

输入yes确定

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9qS47o1V-1649172671625)(redis笔记.assets/image-20220405164319079.png)]

到这里集群全部搭建完成,下面测试一下。

🍃第十三步:连接集群

[root@centos7 7001]# ./bin/redis-cli -h 192.168.249.166 -p 7001 -c

#注意结尾的-c,-c:指定是集群连接

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PTOLzqKB-1649172671627)(redis笔记.assets/image-20220405165106139.png)]

查看集群信息

192.168.249.166:7003>  cluster info

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BgeFY282-1649172671629)(redis笔记.assets/image-20220405165331162.png)]

查看集群中节点信息

192.168.249.166:7003>  cluster nodes

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jiPasCas-1649172671630)(redis笔记.assets/image-20220405165425803.png)]

二、🕊️ IDEA连接redis

1. 🌿 关闭防火墙

注意:如果redis重启,需要将redis中生成的dump.rdbredis.conf文件删除,然后再重启。

2. 🌿 代码实现

mavenpom.xml导入redis-client依赖包。

<dependency> 
    <groupId>redis.clients</groupId> 
    <artifactId>jedis</artifactId> 
    <version>2.9.0</version> 
</dependency>

连接核心java代码

 public static void main(String[] args) throws IOException {
        //1.创建一个集合,保存集群信息
        Set set = new  HashSet<HostAndPort>();
        set.add(new HostAndPort("192.168.249.166",7001));
        set.add(new HostAndPort("192.168.249.166",7002));
        set.add(new HostAndPort("192.168.249.166",7003));
        set.add(new HostAndPort("192.168.249.166",7004));
        set.add(new HostAndPort("192.168.249.166",7005));
        set.add(new HostAndPort("192.168.249.166",7006));
        //2.创建集群操作对象
        JedisCluster jedisCluster = new JedisCluster(set);
        //3.操作数据库
        //IDEA中的方法和redis中的指令是相同的
        jedisCluster.set("demotest","mydemotest123");
        String demo12 = jedisCluster.get("demotest");
        System.out.println(demo12);
        //4.关闭资源
        jedisCluster.close();

    }

结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ii40c8sg-1649172671632)(redis笔记.assets/image-20220405170120972.png)]


Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐